Compare commits

..

142 Commits

Author SHA1 Message Date
Alex Tran 3760782d7f refactor combat message 2024-08-13 16:34:04 -05:00
Weblate (bot) a8a63b24d0 chore(web): update translations (#11533)
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/en_devel/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/es/
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/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/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/nb_NO/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ro/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ru/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sr_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/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: AMT AMT <altmimiamt@gmail.com>
Co-authored-by: Adam Uchmanowicz <auchmanowicz@gmail.com>
Co-authored-by: António Santos <antoniomsantos99@gmail.com>
Co-authored-by: Atakan Dulker <atakandulker@gmail.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: CanbiZ <mickey.leskowitz@gmail.com>
Co-authored-by: Christoph Auer <Christoph.Auer@pilsheim.de>
Co-authored-by: Cristian Florin Tănase <crissssty@gmail.com>
Co-authored-by: Czerjak N <czerjaknorbert@gmail.com>
Co-authored-by: Dmitry <kittyfriend@mail.ru>
Co-authored-by: Dmitry Banny <dj.icecore@gmail.com>
Co-authored-by: ElTopo <cameos@gmail.com>
Co-authored-by: Enoé Mugnaschi <enmuro@gmail.com>
Co-authored-by: Felipe Silva <dorsal-cobweb-life@duck.com>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Florian Ostertag <florian.kuepper@gmail.com>
Co-authored-by: Furkan Yutup <furkanyutupre@gmail.com>
Co-authored-by: Hugo Cossard <hugococa2004@gmail.com>
Co-authored-by: Ionut <ionutp626@gmail.com>
Co-authored-by: Joachim Klahr <joachim@klahr.se>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: Lars Bernstein <lb@setq.de>
Co-authored-by: Laurentiu <laurfb@gmail.com>
Co-authored-by: Lauritz Tieste <lauritz6000000@gmail.com>
Co-authored-by: Luna Kowalik <0skar16.contact@gmail.com>
Co-authored-by: MM <metalmario90@gmail.com>
Co-authored-by: Majid <abtin.php@gmail.com>
Co-authored-by: Manar Aldroubi <droubi@gmail.com>
Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: Oliver Larsson <larsson.e.oliver@gmail.com>
Co-authored-by: Peder Kollenborg <pederkollenborg@gmail.com>
Co-authored-by: Pheggas <petko252@gmail.com>
Co-authored-by: Ponas <le.slab124@aleeas.com>
Co-authored-by: Pruthvi Bugidi <bps.21@proton.me>
Co-authored-by: Riccardo <lark-unit-rush@duck.com>
Co-authored-by: Rosu Iulian <rosuiulian@gmail.com>
Co-authored-by: Rıfat Dinç <rafidinc41@gmail.com>
Co-authored-by: Sam Smith <ja49619@gmail.com>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Simmer Lajos <weblate.linguini033@passinbox.com>
Co-authored-by: Simon Zeeck Svärd <simon.svard100@gmail.com>
Co-authored-by: Stan P <g97d6liib@mozmail.com>
Co-authored-by: TheScientistPT <joao.ed.reis.gomes@gmail.com>
Co-authored-by: Tobias Frejo <tobiasfrejo@gmail.com>
Co-authored-by: Tom Niget <zippedfire@free.fr>
Co-authored-by: UTKARSH VISHNOI <utkarshvishnoi25@gmail.com>
Co-authored-by: Varga Bence Levente <varga.bence.levente@protonmail.com>
Co-authored-by: Vincent Yeung <yeung_pok_yin_405060@yahoo.com.hk>
Co-authored-by: Vladimir Petrov (Vlado) <mr.vlado@gmail.com>
Co-authored-by: Voinea Laurentiu Gabriel <gabivoinea29@gmail.com>
Co-authored-by: Xo <xocodokie@users.noreply.hosted.weblate.org>
Co-authored-by: aarhor <aaron.horstmann9916@gmail.com>
Co-authored-by: anton <reallygud@protonmail.com>
Co-authored-by: chapvic <victor@chapaev.org>
Co-authored-by: dkorecko <reset259@gmail.com>
Co-authored-by: dvbthien <dvbthien@dvbthien.onmicrosoft.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: jocxfin <joonatan@joonatanh.com>
Co-authored-by: manosrh <manosrh@gmail.com>
Co-authored-by: oopzzozzo <ek3ru8m4@gmail.com>
Co-authored-by: pyorot <FMasic@hotmail.co.uk>
Co-authored-by: sibber5 <ghasjado@gmail.com>
Co-authored-by: thestrudl <rok.vidmar1997@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: Åke Amcoff <ake@amcoff.net>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
Co-authored-by: 李奕寯 <eugenelego88@gmail.com>
2024-08-13 20:48:17 +00:00
Jason Rasmussen ab0ed11778 chore: separate enhancement group in release notes (#11756) 2024-08-13 16:39:25 -04:00
Alex 5ec407b57c chore(mobile): properly patch openapi with custom response dto (#11753) 2024-08-13 14:39:25 -05:00
martin fdf0b16fe3 feat(web): add privacy step in the onboarding (#11359)
* feat: add privacy step in the onboarding

* fix: remove console.log

* feat:Details the implications of enabling the map on the settings page

Added a link to the guide on customizing map styles as well

* feat: add map implication

* refactor: onboarding style

* fix: tile provider

* fix: remove long explanations

* chore: cleanup

---------

Co-authored-by: pcouy <contact@pierre-couy.dev>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
2024-08-13 17:01:30 +00:00
Pierre Couy c924f6c27c docs: update custom map style guide (#11350)
* docs:Reword "Custom Map Style" guide

- Split setting a style.json in Immich and creating a style with
  Maptiler
- Make it clearer that this is the way to change tile provider

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2024-08-13 16:05:36 +00:00
Carsten Otto df45ef0e35 fix(server): follow symlinks when zipping assets (#11685)
* follow symlinks when zipping assets

fixes #9335

* chore: clean up

---------

Co-authored-by: Jason Rasmussen <jason@rasm.me>
2024-08-13 11:39:24 -04:00
renovate[bot] 81c813a882 chore(deps): update dependency tailwindcss to v3.4.9 (#11750)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-13 11:37:06 -04:00
Michel Heusschen b014162088 refactor(web): add tailwind plugin for repeating grid cols (#11748) 2024-08-13 11:36:46 -04:00
Michel Heusschen 276101ee82 feat(web): improve shared link management on mobile (#11720)
* feat(web): improve shared link management on mobile

* fix format
2024-08-13 09:37:47 -05:00
renovate[bot] 9837d60074 chore(deps): update dependency vite-tsconfig-paths to v5 (#11746)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-13 08:40:22 -04:00
renovate[bot] 28b7443b92 chore(deps): update base-image to v20240813 (major) (#11747)
chore(deps): update base-image to v20240813

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-13 12:26:22 +00:00
Michel Heusschen 5acdc958b6 fix(web): single row of items (#11729)
* fix(web): single row of items

* remove filterBoxWidth

* slight size adjustment

* rewrite action as component
2024-08-13 08:20:08 -04:00
renovate[bot] e384692025 chore(deps): update typescript-projects (#11743)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-13 08:17:17 -04:00
renovate[bot] 54b276c984 chore(deps): update dependency @types/node to ^20.14.14 (#11737)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-12 23:31:57 -04:00
Jason Rasmussen 7eb004bd00 chore: better release notes (#11726)
* chore: better release notes

* chore: remove 'tedious' commits
2024-08-12 14:49:07 -04:00
Michel Heusschen c2965c4408 fix(web): detail panel out of sync when reopening (#11713)
* fix(web): detail panel out of sync when reopening

* extract event handler
2024-08-12 08:10:43 -04:00
Michel Heusschen b749a68349 fix(web): hide import json button when using config file (#11714) 2024-08-12 07:40:31 -04:00
Michel Heusschen 30aa2c9b82 fix(web): use fallback image if shared asset isn't resized (#11704)
* fix(web): use fallback image if shared asset isn't resized

* remove test-data index file
2024-08-11 15:43:07 -04:00
Robert Schütz 9ed04588b8 chore(deps): update pydantic to v2 (#11701) 2024-08-11 12:23:11 -04:00
Michel Heusschen 7d320217b9 chore(web): remove unused file (#11696) 2024-08-11 08:01:37 -04:00
Michel Heusschen efdf8bbca9 refactor(web): simplify some stores (#11695)
* refactor(web): simplify some stores

* make writable
2024-08-11 08:01:16 -04:00
Michel Heusschen 34c4fbf730 fix(web): asset viewer dynamic size (#11697) 2024-08-11 07:59:26 -04:00
Matthew Momjian ca775ab3e9 docs: Update docs + example.env for DB_PASSWORD (#11678) 2024-08-09 21:36:32 +00:00
renovate[bot] 2dd5514043 chore(deps): update prom/prometheus docker digest to cafe963 (#11673)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-09 14:07:25 -04:00
Christoph Suter f33dbdfe9a feat(web): add Exif-Rating (#11580)
* Add Exif-Rating

* Integrate star rating as own component

* Add e2e tests for rating and validation

* Rename component and async handleChangeRating

* Display rating can be enabled in app settings

* Correct i18n reference

Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>

* Star rating: change from slider to buttons

* Star rating for clarity

* Design updates.

* Renaming and code optimization

* chore: clean up

* chore: e2e formatting

* light mode border and default value

---------

Co-authored-by: Christoph Suter <christoph@suter-burri.ch>
Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
Co-authored-by: Mert <101130780+mertalev@users.noreply.github.com>
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2024-08-09 17:45:52 +00:00
Saschl b1587a5dee feat(mobile): darken screen on backup page (#11623)
* feat: keep screen active on backup

* show dialog

* improve dialog and use shared timer

* get rid of confirmation dialog

* fix timer logic

* fix: set timeout to 60 seconds

* fix: revert unwanted change

* fix: properly hide status bar

* remove unwanted change

* fix: properly restore status bar when waking up

* clean up

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-08-09 16:39:33 +00:00
Alex 501485d0b1 fix(mobile): incorrect remove action from the album assets detail view (#11671)
* fix(mobile): incorrect remove action from the album assets detail view

* better data structure
2024-08-09 09:51:08 -05:00
renovate[bot] ed7f857975 chore(deps): update prom/prometheus docker digest to 497fe92 (#11669)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-09 10:00:50 -04:00
Alex d346985457 chore(mobile): refactor detail panel (#11662)
* date time component

* rename to info_sheet

* simplify map info

* Edit datetime sheet

* fix janking when scroll on info sheet

* Location refactor

* refactor name

* Update date time after editing

* localize rebuild to smaller component

* restore advanced bottom sheet

* reassign EXIF back to local database

* remove print statements
2024-08-09 13:43:47 +00:00
bo0tzz a144a1bec3 chore: add warning to media location env var (#11665) 2024-08-09 07:29:55 -04:00
Carsten Otto 9f318a9338 fix(docs): update documentation (#11655)
update documentation
2024-08-08 23:03:43 +00:00
Michel Heusschen 11f41099c3 chore(web): remove font-size of 17px (#11657) 2024-08-08 13:26:53 -05:00
Michel Heusschen 96481aae5d refactor(web): supporter badge (#11656)
* refactor(web): supporter badge

* add style lang
2024-08-08 14:02:44 -04:00
Michel Heusschen 4a42a72bd3 fix(server): use luxon for maxdate validator (#11651) 2024-08-08 09:02:39 -05:00
Michel Heusschen 66f2ac8ce3 fix(web): keep album description in sync (#11652) 2024-08-08 09:02:08 -05:00
dependabot[bot] 6b2de807a7 chore(deps): bump docker/build-push-action from 6.6.0 to 6.6.1 (#11646)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.6.0 to 6.6.1.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v6.6.0...v6.6.1)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-08 07:28:40 -04:00
Michel Heusschen 96f8050143 feat(web): improve group-tab accessibility (#11647)
feat(web): improve GroupTab accessibility
2024-08-08 07:28:24 -04:00
Zack Pollard 14689462f8 feat: change web asset detail map to zoom level 12.5 (#11643) 2024-08-07 23:38:02 +01:00
Matthew Mirvish fb68da2b51 fix(server): avoid transcoding thumbnail streams (#11603)
Co-authored-by: mincrmatt12 <mincrmatt12@users.noreply.github.com>
2024-08-07 18:36:37 -04:00
Alex 720b9a286e chore(mobile): update other dependencies (#11641) 2024-08-07 14:09:56 -05:00
Alex d93ccb1669 chore(mobile): update maplibre_gl dep (#11640) 2024-08-07 13:47:40 -05:00
Alex c34fc4f2d1 fix(mobile): iOS crashing when download iCloud content (#11639) 2024-08-07 13:09:15 -05:00
Matthew Momjian 905a062a6e docs: how to decrease Redis logs (#11638) 2024-08-07 18:38:27 +01:00
renovate[bot] aeed24b5b4 fix(deps): update typescript-projects (#11606)
* fix(deps): update typescript-projects

* fix: type error

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
2024-08-07 15:45:30 +00:00
Johannes Groß 28ba22e8c1 fix(server): handle numeric 'Image Description' and 'Description' values (#11636)
* Made 'Image Description' and 'Description' type safe during exif parsing

* add test + update types

---------

Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
2024-08-07 15:23:36 +00:00
Jason Rasmussen 5b64456f48 chore: more cursed knowledge (#11631)
* chore: more cursed knowledge

* chore: more cursed knowledge

* chore: rework footer
2024-08-07 09:54:57 -04:00
Jason Rasmussen 02fd6d22b3 chore: more cursed knowledge (#11630) 2024-08-07 12:36:30 +00:00
dependabot[bot] 10ed31d725 chore(deps): bump docker/build-push-action from 6.5.0 to 6.6.0 (#11629)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.5.0 to 6.6.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v6.5.0...v6.6.0)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-07 08:31:23 -04:00
Mert 23d4314eed chore(server): support pgvecto.rs 0.3.0 (#11624)
relax pgvecto.rs constraint
2024-08-06 23:04:55 -04:00
renovate[bot] ea135cc310 chore(deps): update dependency @types/node to ^20.14.13 (#11604)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-06 22:59:26 -04:00
Saschl 745e1b003d feat(mobile): enable wakelock on backup page (#11621) 2024-08-06 17:13:11 -05:00
Alex 1dae622dbc chore(mobile): minor styling fix (#11619) 2024-08-06 14:39:07 -05:00
renovate[bot] 8ca24f0ef2 fix(deps): update dependency auto_route to v9 (#11566)
* fix(deps): update dependency auto_route to v9

* fix dep conflict

* linting

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-08-06 12:50:20 -05:00
renovate[bot] f679021f0e fix(deps): update dependency share_plus to v10 (#11550)
* fix(deps): update dependency share_plus to v10

* resolve dep conflict

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-08-06 17:24:55 +00:00
i-am-a-teapot 65f5118bdd feat(web): Add stacking option to deduplication utilities (#11114)
* feat(web): Add stacking option to deduplication utilities

* Update web/src/lib/components/utilities-page/duplicates/duplicates-compare-control.svelte

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

* Fix prettier

* Draft for server side modifications. Endpoint for stacks (PUT,DELETE)

* Fix error

* Disable stakc button if less or more than one asset selected

* Remove unnecesarry log

* Revert to first commit

* Further Revert

* Actually Revert to Origin

* Only one stack button

* Update +page.svelte

* Fix optional arguments

* Fix Prettier

* Fix Linting

* Add stack information to asset view

* clean up

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-08-06 17:06:30 +00:00
renovate[bot] 9f4fad2a0f chore(deps): update base-image to v20240806 (major) (#11616)
chore(deps): update base-image to v20240806

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-06 12:57:03 -04:00
Michel Heusschen 325fb4b5d1 fix(server): video duration extraction (#11610) 2024-08-06 11:27:05 -05:00
Alex f040c9fb38 chore(server): remove get person asset limit (#11597)
* chore(server): remover get person asset limit

* sql

* remove getPersonAsset endpoint

* remove getPersonAsset endpoint

* use search endpoint to get people

* fix: server test

* mobile linter

* fix: server test

* remove debuglog

* deprecated endpoint

* change page size on mobile

* revert max size

* fix test
2024-08-06 16:22:13 +00:00
Pruthvi Bugidi 0eacdf93eb feat(mobile): add support for material themes (#11560)
* feat(mobile): add support for material themes

Added support for custom theming and updated all elements accordingly.

* fix(mobile): Restored immich brand colors to default theme

* fix(mobile): make ListTile titles bold in settings main page

* feat(mobile): update bottom nav and appbar colors

* small tweaks

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-08-06 14:20:27 +00:00
renovate[bot] 20262209ce fix(deps): update dependency setuptools to v70 [security] (#11609) 2024-08-06 10:09:38 -04:00
Michel Heusschen dd638ac207 fix(web): slideshow on iphone (#11599)
* fix(web): slideshow on iphone

* make requestFullscreen type optional
2024-08-06 08:34:17 -05:00
Mert d5b23373c7 refactor(server): startup checks for vector extension (#11559)
* update update logic

refactor

* update tests

* get version range through repo method, make tests more static

* move "should work" test
2024-08-05 21:00:25 -04:00
renovate[bot] 9765ccb5a7 chore(deps): update machine-learning (#11605)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-05 21:00:00 -04:00
renovate[bot] 82d934d09d chore(deps): update dependency eslint to v9 (#11601)
* chore(deps): update dependency eslint to v9

* chore: migrate to eslint flat config files

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2024-08-05 16:13:16 -04:00
renovate[bot] 2821e0bf95 chore(deps): update typescript-eslint monorepo to v8 (major) (#11598)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
2024-08-05 19:13:00 +00:00
Michel Heusschen bb3d9b6306 chore(web): remove unused event type definitions (#11600) 2024-08-05 14:50:48 -04:00
Alex c83df2686a fix(mobile): autofill (#11591) 2024-08-05 12:02:31 -05:00
Jason Rasmussen 94da5942bd feat(web): open in map view (#11592) 2024-08-05 10:25:53 -05:00
Alex 54d2c12fff feat(docs): privacy policy (#11535) 2024-08-05 10:06:01 -05:00
foxit64 64fcb25971 fix: dockerfile linter error (#11590)
fix yamllint

Co-authored-by: sysadmin <sysadmin@localhost>
2024-08-05 09:02:02 -05:00
Jason Rasmussen 7f03bd8440 chore: dockerfile casing (#11589)
chore: docokerfile casing
2024-08-05 07:51:30 -05:00
Jason Rasmussen 2974cdbbee chore: dockerfile casing (#11588) 2024-08-05 12:07:28 +00:00
Yuvraj P f0677735fd fix(mobile): Naming fix for the edited file (#11503) 2024-08-04 23:48:02 -05:00
Stefan Berggren bb78eb4c4b Add Immich Distribution to Community Projects page (#11576)
Signed-off-by: Stefan Berggren <nsg@nsg.cc>
2024-08-05 03:36:55 +00:00
Mert 4ed75f2ac9 refactor(server): add config events for clip (#11575)
use config events for clip, add tests

formatting
2024-08-04 21:00:36 +00:00
Mert 3f4b783889 chore: add healthcheck field to server and ml (#11573)
add healthcheck field to server and ml
2024-08-04 13:37:43 -05:00
renovate[bot] 3968d76a57 fix(deps): update machine-learning (#11320) 2024-08-03 09:24:09 -04:00
Zack Pollard 55b31d1ce2 chore(web): fix weblate and other cleanup (#11532) 2024-08-02 13:35:47 +00:00
oidq 37cc6fbf27 fix(web): prevent change-location suggestion race-condition (#11523)
When debouncer activated on deletion, the handleSearchPlaces() function
would fire a request with empty query. UI would then show Immich API error.
2024-08-02 05:52:17 +00:00
Weblate (bot) 899b8a0ce7 chore(web): update translations (#11458)
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/he/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hu/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ko/
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/ro/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ru/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/tr/
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: Atakan Dulker <atakandulker@gmail.com>
Co-authored-by: Czerjak N <czerjaknorbert@gmail.com>
Co-authored-by: Dmitry Banny <dj.icecore@gmail.com>
Co-authored-by: ElTopo <cameos@gmail.com>
Co-authored-by: Enoé Mugnaschi <enmuro@gmail.com>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: Laurentiu <laurfb@gmail.com>
Co-authored-by: Luna Kowalik <0skar16.contact@gmail.com>
Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
Co-authored-by: Pheggas <petko252@gmail.com>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Vladimir Petrov (Vlado) <mr.vlado@gmail.com>
Co-authored-by: Voinea Laurentiu Gabriel <gabivoinea29@gmail.com>
Co-authored-by: chapvic <victor@chapaev.org>
Co-authored-by: dkorecko <reset259@gmail.com>
Co-authored-by: dvbthien <dvbthien@dvbthien.onmicrosoft.com>
Co-authored-by: oopzzozzo <ek3ru8m4@gmail.com>
Co-authored-by: 李奕寯 <eugenelego88@gmail.com>
2024-08-01 23:30:44 -04:00
Justin Forseth d3a5490e71 feat(server): search unknown place (#10866)
* Allow submission of null country

* Update searchAssetBuilder to handle nulls

andWhere({country:null}) produces `"exifInfo"."country" = NULL`. We want
`"exifInfo"."country" IS NULL`, so we have to treat NULL as a special
case

* Allow null country in frontend

* Make the query code a bit more straightforward

* Remove unused brackets import

* Remove log message

* Don't change whitespace for no reason

* Fix prettier style issue

* Update search.dto.ts validators per @jrasm91's recommendation

* Update api types

* Combine null country and state into one guard clause

* chore: clean up

* chore: add e2e for null/empty city, state, country search

* refactor: server returns suggestion for null values

* chore: clean up

---------

Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
2024-08-02 03:27:40 +00:00
Michel Heusschen 3afb5b497f fix(web): correctly format future timeline dates (#11506) 2024-08-01 07:39:26 -04:00
Michel Heusschen 1f0f880ecb fix(web): websocket over ipv6 (#11508) 2024-08-01 07:36:31 -04:00
martyfuhry 2c05ceaf50 fix(server): external domain url validation (#11493)
* fix(web): Changes externalDomain to IsUrl()

* refactor(web): asset viewer actions (#11449)

* refactor(web): asset viewer actions

* motion photo slot and more refactoring

fix(web): Changes externalDomain to IsUrl()

---------

Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
2024-07-31 14:09:30 -04:00
Yuvraj P 01f8b7e458 fix(mobile): Crop presets break crop rectangle #11462 (#11467)
Fix Issue 11464
2024-07-31 12:19:19 -05:00
Michel Heusschen b73f7fe16f refactor: deduplicate MemoryType and ReactionType enums (#11479)
* refactor: deduplicate memorytype and reactiontype enums

* fix mobile
2024-07-31 12:08:31 -05:00
Michel Heusschen 281cfc95a4 refactor(web): asset viewer actions (#11449)
* refactor(web): asset viewer actions

* motion photo slot and more refactoring
2024-07-31 12:25:38 -04:00
renovate[bot] 3a3ea6135e chore(deps): update typescript-projects (#11437)
* chore(deps): update typescript-projects

* chore: formatting

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
2024-07-31 15:40:23 +00:00
Jason Rasmussen c44271e9b2 fix(deps): vitest@2 (#11491) 2024-07-31 11:26:35 -04:00
Jason Rasmussen 86904a8382 feat(web): more languages (#11488) 2024-07-31 10:26:17 -04:00
renovate[bot] cf54829b3b chore(deps): update dependency eslint-plugin-unicorn to v55 (#11435)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-31 08:49:35 -04:00
dependabot[bot] 990627e00d chore(deps): bump stumpylog/image-cleaner-action from 0.7.0 to 0.8.0 (#11480)
Bumps [stumpylog/image-cleaner-action](https://github.com/stumpylog/image-cleaner-action) from 0.7.0 to 0.8.0.
- [Release notes](https://github.com/stumpylog/image-cleaner-action/releases)
- [Changelog](https://github.com/stumpylog/image-cleaner-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stumpylog/image-cleaner-action/compare/v0.7.0...v0.8.0)

---
updated-dependencies:
- dependency-name: stumpylog/image-cleaner-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-31 08:48:06 -04:00
Mert 41580696c7 feat(ml): add more search models (#11468)
* update export code

* add uuid glob, sort model names

* add new models to ml, sort names

* add new models to server, sort by dims and name

* typo in name

* update export dependencies

* onnx save function

* format
2024-07-31 04:34:45 +00:00
renovate[bot] 2423bb36c4 chore(deps): update grafana/grafana docker tag to v11.1.3 (#11451)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-31 00:09:13 -04:00
Ben McCann 82b899649d fix: make HTML valid (#11465) 2024-07-31 00:05:08 -04:00
Alex 8ee8450d18 chore(mobile): post release task (#11456) 2024-07-30 21:41:10 -05:00
dependabot[bot] 6d47d52b3c chore(deps): bump docker/setup-buildx-action from 3.5.0 to 3.6.1 (#11445)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3.5.0 to 3.6.1.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v3.5.0...v3.6.1)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-30 16:22:11 -04:00
Alex The Bot 919fd7d41f Version v1.111.0 2024-07-30 19:06:39 +00:00
Alex c2fdb6aab8 chores(mobile): Translations update (#11454)
chore(mobile): translation update
2024-07-30 14:03:04 -05:00
Weblate (bot) b6c4da37fd chore(web): update translations (#11429)
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/de/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/es/
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/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/nl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pl/
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/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: Atakan Dulker <atakandulker@gmail.com>
Co-authored-by: CanbiZ <mickey.leskowitz@gmail.com>
Co-authored-by: Dmitry Banny <dj.icecore@gmail.com>
Co-authored-by: Enoé Mugnaschi <enmuro@gmail.com>
Co-authored-by: Florian Ostertag <florian.kuepper@gmail.com>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: Maciek S <maslanypotwor1@gmail.com>
Co-authored-by: Manar Aldroubi <droubi@gmail.com>
Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
Co-authored-by: Ponas <le.slab124@aleeas.com>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Ultragian <giancarlo.brasil@gmail.com>
Co-authored-by: Unimpeded Lemur <yg7lh0fz3@mozmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: tddaij <xdaint@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: Вячеслав Лукьяненко <madeinchuguev@gmail.com>
Co-authored-by: 李奕寯 <eugenelego88@gmail.com>
2024-07-30 14:01:42 -05:00
Alex 17c3e8e8bf fix(mobile): mobile logging out randomly (#11431)
* fix(mobile): refactor splash screen to not require online connection

* chore: bump flutter sdk path for vscode

* refactor: authentication provider always try network calls and only fail if 401 or no local user

* lint

* fix: revert change to lookup serverendpoint from store the isar store implementation is very broken

* fix: clear serverUrl and serverEndpoint on logout, and await logout call

* refactor: remove unneeded extra conditions in splash screen useEffect

* revert change to remove serverEndpoint on logging out

* pr feedback

---------

Co-authored-by: Zack Pollard <zackpollard@ymail.com>
2024-07-30 13:15:48 -05:00
renovate[bot] 21d3f248da chore(deps): update base-image to v20240730 (major) (#11447)
chore(deps): update base-image to v20240730

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-30 08:57:27 -04:00
renovate[bot] a29660aae3 chore(deps): update dependency exiftool-vendored to v28 (#11440)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-30 07:30:25 -04:00
renovate[bot] 6c81fa0f0a fix(deps): update dependency exiftool-vendored to v28.2.0 (#11439)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-30 07:29:31 -04:00
renovate[bot] 7156da502f chore(deps): update node.js to eb8101c (#11436)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-29 22:53:17 -04:00
Alex 13741410a7 chore(mobile): Add text to bottom gallery bar (#11417) 2024-07-29 21:25:04 -05:00
Matthew Momjian 3408e6b3cb docs: warning to not edit volumes in compose (#11432)
* Update docker-compose.yml

* Update docker-compose.yml

* Update docker-compose.yml
2024-07-29 21:24:47 -05:00
Michel Heusschen 434bcec5cc fix(server): correct person birth date across timezones (#11369)
* fix(server): correct person birth date across timezones

* fix test

* update e2e tests

* use Optional decorator
2024-07-29 19:52:04 -04:00
Jason Rasmussen ebc71e428d feat(server): reverse geocoding endpoint (#11430)
* feat(server): reverse geocoding endpoint

* chore: rename error message
2024-07-29 18:17:26 -04:00
eleith a70cd368af fix(server): use fqdn for og:image meta tag value (#11082)
* attempt to use fqdn for og:image

opengraph image specifies that the url contains http or https, thus
implying a fqdn.

this change uses the external domain from the server config to attempt
to make the og:image have both the existing path to the thumbnail along
with the desired domain

if the server setting is empty, the old behavior will persist

please note, some og implementations do work with relative paths, so not
all og image checkers may still pass, but not all implementations have
this fallback and thus will not find the image otherwise

* tests and ssr for og:image value as fqdn

* formatting

* fix test

* formatting

* formatting

* fix tests

getConfig was requiring authentication. using already initiated global stores instead

* load config in shared link service itself

* join host and pathname/params safely

* use origin instead of host for full domain string

also fixes lint and address the imageURL type which is optional

* chore: clean up

---------

Co-authored-by: eleith <eleith@lemon.localdomain>
Co-authored-by: eleith <online-github@eleith.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
2024-07-29 21:38:47 +00:00
Jared L 3225e33fc1 feat(server): significantly improve Australian reverse geocoding accuracy (#11370)
chore(geocoding): ingest australia PPLXs
2024-07-29 10:59:53 -04:00
Weblate (bot) 85ab916ecf chore(web): update translations (#11416)
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/es/
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/nl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ru/
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: CraftWorks <weblate@craftworks.top>
Co-authored-by: Enoé Mugnaschi <enmuro@gmail.com>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: chapvic <victor@chapaev.org>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: nachtpfoetchen <nachtpfoetchen@posteo.de>
Co-authored-by: tddaij <xdaint@gmail.com>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: 李奕寯 <eugenelego88@gmail.com>
2024-07-29 14:48:44 +00:00
Michel Heusschen 7445dad0dd fix(web): timeline group date formatting (#11392)
* fix(web): timeline group date formatting

* add isValid check

* remove duplicate type
2024-07-29 10:42:55 -04:00
Michel Heusschen 0237f9baa3 feat(web): more localized number formatting (#11401) 2024-07-29 10:38:27 -04:00
Michel Heusschen 2e059bfbfd fix(web): avoid nesting buttons inside links (#11425) 2024-07-29 10:36:10 -04:00
renovate[bot] 7bb7f63d57 chore(deps): update dependency node to v20.16.0 (#11421)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-29 10:33:01 -04:00
renovate[bot] 66a5a5718f chore(deps): update terraform cloudflare to v4.38.0 (#11423)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-29 10:32:27 -04:00
Alex ddc4d2f927 fix(mobile): client TLS on ios (#11415) 2024-07-28 17:32:53 -05:00
Weblate (bot) 0beeb61f5c chore(web): update translations (#11365)
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/cs/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/de/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/en_devel/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/es/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/he/
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/nl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pl/
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/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/tr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/uk/
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: AlrightIDidIt <fimofuni.igamunu@gotgel.org>
Co-authored-by: AxGD <guillermeaxel@yahoo.fr>
Co-authored-by: Bartłomiej Ruk <bartek04041993@gmail.com>
Co-authored-by: Bezruchenko Simon <worcposj44@gmail.com>
Co-authored-by: ChoosenMEME <timjankowski259@gmail.com>
Co-authored-by: ConfusedAlex <alex@confusedalex.dev>
Co-authored-by: Coooolfan <coolfan1024@outlook.com>
Co-authored-by: Coxcopi70f00b67b61542fe <hn_vogel@gmx.net>
Co-authored-by: Denis Pacquier <denis.pacquier@gmail.com>
Co-authored-by: Eric Cornish <ao475129@gmail.com>
Co-authored-by: Fredrik Ekdahl <fekdahl@gmail.com>
Co-authored-by: Gilgwath <gilgwath@protonmail.com>
Co-authored-by: Jakub <jakubula.jm@gmail.com>
Co-authored-by: Jordy H <jordy@hoebergen.net>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
Co-authored-by: Miki Mrvos <medolino2009@gmail.com>
Co-authored-by: NikiTricky <niki.sto2010@gmail.com>
Co-authored-by: Sabin Oana <sabin.oana@gmail.com>
Co-authored-by: Sam Smith <ja49619@gmail.com>
Co-authored-by: Shawn <xiaxinx@gmail.com>
Co-authored-by: Sylvain Pichon <service@spichon.fr>
Co-authored-by: Varga Bence Levente <varga.bence.levente@protonmail.com>
Co-authored-by: Victor Sueiro <kiwicaja@gmail.com>
Co-authored-by: Xo <xocodokie@users.noreply.hosted.weblate.org>
Co-authored-by: aarhor <aaron.horstmann9916@gmail.com>
Co-authored-by: chapvic <victor@chapaev.org>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: krzemyk <krzemyk.official@proton.me>
Co-authored-by: nazo6 <git@nazo6.dev>
Co-authored-by: waclaw66 <waclaw66@seznam.cz>
Co-authored-by: yusufbarisk <yusufbarisk2004@gmail.com>
Co-authored-by: 李奕寯 <eugenelego88@gmail.com>
2024-07-28 20:53:04 +00:00
waclaw66 a321db9f48 fix(web): translation leftovers (#11412)
fix: new album
2024-07-28 15:43:25 -05:00
Matthew Momjian 827136fc8b docs: file custom location (#11413)
* file custom location

* fix microservices
2024-07-28 15:43:09 -05:00
Matthew Momjian 088eea88e0 docs: how to change PG PW (#11414)
* guide to change PG PW

* fix
2024-07-28 15:42:42 -05:00
Yuvraj P 15503784c8 feat(mobile): adds crop and rotate to mobile (#10989)
* Added Crop Feature

* Using LayoutBuilder Fix

* Using Immich Colors

* Using Immich Text Theme

* Chnaging dynamic datatype to nullable

* Fix for the retrivel of the image from the cropscreen

* Using Hooks State

* Small edits

* Finals edits

* Saving to the mobile

* Commented final code

* Commented final code

* Comments and AutoRoute

* Fix AutoRoute Final

* Naming tools and Action when made no edits

* Updating timeline after edit

* chore: lint

* format

* Light Mode Compatible

* fix duplicate page name

* Fix Routing

* Hiding the Button

* lint

* remove unused code

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-07-28 15:41:14 -05:00
Jonathan Jogenfors bc8e236598 chore(server): make vite-tsconfig-paths a dev dependency instead (#11404) 2024-07-27 21:50:35 +02:00
Michel Heusschen 909bd43e65 fix(web): slideshow settings title (#11396) 2024-07-27 10:46:19 -05:00
Alex 3330885bcc chore(server): email template minor styling (#11387) 2024-07-26 21:58:48 -05:00
Jan e1ac73718c feat(web): Duplicate-Page shortcut changes (#11183)
* duplicate page assign other shortcut keys, add 'open image' shortcut

* add shortcut info page to duplicates with own list of keys

* edit translations, add translationkeys

* format fix

* remove typo

---------

Co-authored-by: Zack Pollard <zackpollard@ymail.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-07-26 21:47:51 +00:00
Ben a78eeb9b9c feat(web): search bar keyboard accessibility (#11323)
* feat(web): search bar keyboard accessibility

* fix: adjust aria attributes

* fix: safari announcing the correct option count

* minor adjustments

- CircleIconButton disabled cursor
- more generic selection handler

* fix: more subtle border color in dark mode

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-07-26 16:45:15 -05:00
martin 86b3e3ee13 fix(web): responsive design when selecting assets in an album (#11169)
fix: responsive design when selecting assets in an album
2024-07-26 16:33:20 -05:00
waclaw66 4b2bc8e4ce fix(mobile): search filter translation + fixes (#11141)
translation + fixes
2024-07-26 16:32:19 -05:00
renovate[bot] f92aee204e chore(deps): update dependency @types/picomatch to v3 (#11096)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-26 16:29:25 -05:00
renovate[bot] 7fd2b7965c chore(deps): update docker.io/redis:6.2-alpine docker digest to e3b17ba (#11302)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-26 16:28:34 -05:00
renovate[bot] 32ba6e3e3f chore(deps): update dependency byte-size to v9 (#11356)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-26 16:27:09 -05:00
Jonathan Jogenfors 0a6e5e0ec1 fix(server): make vitest pick up edited files (#11385)
fix vitest on file edit
2024-07-26 16:26:38 -05:00
Jonathan Jogenfors 65a4f86154 chore: bump vitest to 1.6.0 (#11386)
bump vitest to 1.6.0
2024-07-26 16:26:17 -05:00
ayykamp 147c6e3600 chore(web): improve responsiveness in Album and Shared Album pages on small devices (#11055)
* style: better responsiveness on album and shared album pages

* revert right margin changes

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
2024-07-26 21:06:08 +00:00
Nicolò ee6f1a010c chore(server): clean mail-templates and add tailwind style (#11296)
With this commit I wanted to complete the react-mail
 structure by properly define the templates styles by
 including tailwind css framework.

The framework is extended by both react-mail and
 tailwindcss-preset-email. Those packages help the rendering
 for various email clients.

If in future there is the necessity to target specific mail
 clients the package `tailwindcss-email-variants` and
 `tailwindcss-mso` can help too. The latter has some
 workarounds for the Ms Outlook that is still lacking
 a lot of the CSS3 funcitonality.
 to target

Signed-off-by: hitech95 <nicveronese@gmail.com>
2024-07-26 15:41:11 -05:00
renovate[bot] a444ea7361 chore(deps): update dependency flutter to v3.22.3 (#11301)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-26 15:39:33 -05:00
Alex 59b809012f chore(mobile): post release task (#11382) 2024-07-26 15:38:41 -05:00
Ben c037a8b8fa fix(web): easier alt text translation for other languages (#11124)
* fix(web): alt text translation for non-English languages

* fix: refactor to use full translation key names

* fix: calling the translation function directly
2024-07-26 13:48:40 -05:00
Michel Heusschen ce15cf6065 fix(web): buy immich translations (#11379) 2024-07-26 13:41:59 -05:00
512 changed files with 25674 additions and 16850 deletions
+12 -24
View File
@@ -1,41 +1,29 @@
changelog: changelog:
categories: categories:
- title: ⚠️ Breaking Changes - title: 🚨 Breaking Changes
labels: labels:
- breaking-change - breaking-change
- title: 🗄️ Server - title: 🔒 Security
labels: labels:
- 🗄️server - security
- title: 📱 Mobile - title: 🚀 Features
labels: labels:
- 📱mobile - feature
- title: 🖥️ Web - title: 🌟 Enhancements
labels: labels:
- 🖥️web - enhancement
- title: 🧠 Machine Learning - title: 🐛 Bug fixes
labels: labels:
- 🧠machine-learning - bugfix
- title: ⚡ CLI - title: 📚 Documentation
labels:
- cli
- title: 📓 Documentation
labels: labels:
- documentation - documentation
- title: 🔨 Maintenance - title: 🌐 Translations
labels: labels:
- deployment - translation
- dependencies
- renovate
- maintenance
- tech-debt
- title: Other changes
labels:
- "*"
+2 -2
View File
@@ -59,7 +59,7 @@ jobs:
uses: docker/setup-qemu-action@v3.2.0 uses: docker/setup-qemu-action@v3.2.0
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3.5.0 uses: docker/setup-buildx-action@v3.6.1
- name: Login to GitHub Container Registry - name: Login to GitHub Container Registry
uses: docker/login-action@v3 uses: docker/login-action@v3
@@ -88,7 +88,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.5.0 uses: docker/build-push-action@v6.6.1
with: with:
file: cli/Dockerfile file: cli/Dockerfile
platforms: linux/amd64,linux/arm64 platforms: linux/amd64,linux/arm64
+2 -2
View File
@@ -35,7 +35,7 @@ jobs:
steps: steps:
- name: Clean temporary images - name: Clean temporary images
if: "${{ env.TOKEN != '' }}" if: "${{ env.TOKEN != '' }}"
uses: stumpylog/image-cleaner-action/ephemeral@v0.7.0 uses: stumpylog/image-cleaner-action/ephemeral@v0.8.0
with: with:
token: "${{ env.TOKEN }}" token: "${{ env.TOKEN }}"
owner: "immich-app" owner: "immich-app"
@@ -64,7 +64,7 @@ jobs:
steps: steps:
- name: Clean untagged images - name: Clean untagged images
if: "${{ env.TOKEN != '' }}" if: "${{ env.TOKEN != '' }}"
uses: stumpylog/image-cleaner-action/untagged@v0.7.0 uses: stumpylog/image-cleaner-action/untagged@v0.8.0
with: with:
token: "${{ env.TOKEN }}" token: "${{ env.TOKEN }}"
owner: "immich-app" owner: "immich-app"
+2 -2
View File
@@ -66,7 +66,7 @@ jobs:
uses: docker/setup-qemu-action@v3.2.0 uses: docker/setup-qemu-action@v3.2.0
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3.5.0 uses: docker/setup-buildx-action@v3.6.1
- name: Login to Docker Hub - name: Login to Docker Hub
# Only push to Docker Hub when making a release # Only push to Docker Hub when making a release
@@ -115,7 +115,7 @@ jobs:
fi fi
- name: Build and push image - name: Build and push image
uses: docker/build-push-action@v6.5.0 uses: docker/build-push-action@v6.6.1
with: with:
context: ${{ matrix.context }} context: ${{ matrix.context }}
file: ${{ matrix.file }} file: ${{ matrix.file }}
-1
View File
@@ -1 +0,0 @@
/dist
-28
View File
@@ -1,28 +0,0 @@
module.exports = {
parser: '@typescript-eslint/parser',
parserOptions: {
project: 'tsconfig.json',
sourceType: 'module',
tsconfigRootDir: __dirname,
},
plugins: ['@typescript-eslint/eslint-plugin'],
extends: ['plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended', 'plugin:unicorn/recommended'],
root: true,
env: {
node: true,
},
ignorePatterns: ['.eslintrc.js'],
rules: {
'@typescript-eslint/interface-name-prefix': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-floating-promises': 'error',
'unicorn/prefer-module': 'off',
'unicorn/prevent-abbreviations': 'off',
'unicorn/no-process-exit': 'off',
'unicorn/import-style': 'off',
curly: 2,
'prettier/prettier': 0,
},
};
+1 -1
View File
@@ -1 +1 @@
20.15.1 20.16.0
+1 -1
View File
@@ -1,4 +1,4 @@
FROM node:20.16.0-alpine3.20@sha256:aada767bf3e4b4a1437642b81db7d8bb99a6dba27627088e4608772f1f02ebc0 as core FROM node:20.16.0-alpine3.20@sha256:eb8101caae9ac02229bd64c024919fe3d4504ff7f329da79ca60a04db08cef52 AS core
WORKDIR /usr/src/open-api/typescript-sdk WORKDIR /usr/src/open-api/typescript-sdk
COPY open-api/typescript-sdk/package*.json open-api/typescript-sdk/tsconfig*.json ./ COPY open-api/typescript-sdk/package*.json open-api/typescript-sdk/tsconfig*.json ./
+60
View File
@@ -0,0 +1,60 @@
import { FlatCompat } from '@eslint/eslintrc';
import js from '@eslint/js';
import typescriptEslint from '@typescript-eslint/eslint-plugin';
import tsParser from '@typescript-eslint/parser';
import globals from 'globals';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all,
});
export default [
{
ignores: ['eslint.config.mjs', 'dist'],
},
...compat.extends(
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
'plugin:unicorn/recommended',
),
{
plugins: {
'@typescript-eslint': typescriptEslint,
},
languageOptions: {
globals: {
...globals.node,
},
parser: tsParser,
ecmaVersion: 5,
sourceType: 'module',
parserOptions: {
project: 'tsconfig.json',
tsconfigRootDir: __dirname,
},
},
rules: {
'@typescript-eslint/interface-name-prefix': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-floating-promises': 'error',
'unicorn/prefer-module': 'off',
'unicorn/prevent-abbreviations': 'off',
'unicorn/no-process-exit': 'off',
'unicorn/import-style': 'off',
curly: 2,
'prettier/prettier': 0,
},
},
];
+756 -811
View File
File diff suppressed because it is too large Load Diff
+15 -12
View File
@@ -1,6 +1,6 @@
{ {
"name": "@immich/cli", "name": "@immich/cli",
"version": "2.2.12", "version": "2.2.13",
"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",
@@ -13,30 +13,33 @@
"cli" "cli"
], ],
"devDependencies": { "devDependencies": {
"@eslint/eslintrc": "^3.1.0",
"@eslint/js": "^9.8.0",
"@immich/sdk": "file:../open-api/typescript-sdk", "@immich/sdk": "file:../open-api/typescript-sdk",
"@types/byte-size": "^8.1.0", "@types/byte-size": "^8.1.0",
"@types/cli-progress": "^3.11.0", "@types/cli-progress": "^3.11.0",
"@types/lodash-es": "^4.17.12", "@types/lodash-es": "^4.17.12",
"@types/mock-fs": "^4.13.1", "@types/mock-fs": "^4.13.1",
"@types/node": "^20.14.12", "@types/node": "^20.14.14",
"@typescript-eslint/eslint-plugin": "^7.0.0", "@typescript-eslint/eslint-plugin": "^8.0.0",
"@typescript-eslint/parser": "^7.0.0", "@typescript-eslint/parser": "^8.0.0",
"@vitest/coverage-v8": "^1.2.2", "@vitest/coverage-v8": "^2.0.5",
"byte-size": "^8.1.1", "byte-size": "^9.0.0",
"cli-progress": "^3.12.0", "cli-progress": "^3.12.0",
"commander": "^12.0.0", "commander": "^12.0.0",
"eslint": "^8.56.0", "eslint": "^9.0.0",
"eslint-config-prettier": "^9.1.0", "eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.1.3", "eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-unicorn": "^54.0.0", "eslint-plugin-unicorn": "^55.0.0",
"globals": "^15.9.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",
"vite": "^5.0.12", "vite": "^5.0.12",
"vite-tsconfig-paths": "^4.3.2", "vite-tsconfig-paths": "^5.0.0",
"vitest": "^1.2.2", "vitest": "^2.0.5",
"vitest-fetch-mock": "^0.2.2", "vitest-fetch-mock": "^0.3.0",
"yaml": "^2.3.1" "yaml": "^2.3.1"
}, },
"scripts": { "scripts": {
@@ -64,6 +67,6 @@
"lodash-es": "^4.17.21" "lodash-es": "^4.17.21"
}, },
"volta": { "volta": {
"node": "20.15.1" "node": "20.16.0"
} }
} }
+30 -30
View File
@@ -2,37 +2,37 @@
# Manual edits may be lost in future updates. # Manual edits may be lost in future updates.
provider "registry.opentofu.org/cloudflare/cloudflare" { provider "registry.opentofu.org/cloudflare/cloudflare" {
version = "4.37.0" version = "4.38.0"
constraints = "4.37.0" constraints = "4.38.0"
hashes = [ hashes = [
"h1:0gOI8arnh2CTcHfGH8iwAe6qz2BRSytmbOiNXZjnrHc=", "h1:+27KAHKHBDvv3dqyJv5vhtdKQZJzoZXoMqIyronlHNw=",
"h1:0h0qRJYPHL92Dx3NYZO2WJ21cxyZGEoldzw9aYhPnew=", "h1:/uV9RgOUhkxElkHhWs8fs5ZbX9vj6RCBfP0oJO0JF30=",
"h1:6ri7vZ1MLtQbooicIO4catyIuRq4LHAsIcgd3vGq3AE=", "h1:1DNAdMugJJOAWD/XYiZenYYZLy7fw2ctjT4YZmkRCVQ=",
"h1:7BwVaqxSD9VsmLzs6jDJBJvHPq0dz4I8rCeJAK63Dc4=", "h1:1wn4PmCLdT7mvd74JkCGmJDJxTQDkcxc+1jNbmwnMHA=",
"h1:8tVm+BJvzI14pRbEyt00AvH6oIyqiLRZQ9KxcBeSDhE=", "h1:BIHB4fBxHg2bA9KbL92njhyctxKC8b6hNDp60y5QBss=",
"h1:FTll1M9rPA7RxEyLB6etQqaqynWWl3WkiwJtHMjPr3Y=", "h1:HCQpvKPsMsR4HO5eDqt+Kao7T7CYeEH7KZIO7xMcC6M=",
"h1:L7ysGftn0fstXMjCt3/XEz2giRdEwBsGrdvi4Zw8uzM=", "h1:HTomuzocukpNLwtWzeSF3yteCVsyVKbwKmN66u9iPac=",
"h1:PsbAKy7LdSpwZMJZ7bO3lI04hLDTlXke/LCkrKXYwwE=", "h1:YDxsUBhBAwHSXLzVwrSlSBOwv1NvLyry7s5SfCV7VqQ=",
"h1:Sjkpr8CKs0rXGcdis5q4Kbqmo5mmosgirnQi65G4sM8=", "h1:dchVhxo+Acd1l2RuZ88tW9lWj4422QMfgtxKvKCjYrw=",
"h1:YxJRQdVSzMZR5Ce5M3Gs1SPutXpednxuRwtSSiReHDY=", "h1:eypa+P4ZpsEGMPFuCE+6VkRefu0TZRFmVBOpK+PDOPY=",
"h1:bJrJeBKWEwt4hGQ+3VJR69dsqHORovE8LzuQt9+NTug=", "h1:f3yjse2OsRZj7ZhR7BLintJMlI4fpyt8HyDP/zcEavw=",
"h1:hPC7Vk0ZGXCDJ1y5dOepVo1c0PoUulnJUarrMv4gQIQ=", "h1:mSJ7xj8K+xcnEmGg7lH0jjzyQb157wH94ULTAlIV+HQ=",
"h1:joMURZCLUJ2eSlj645xqHWKYbRBYqvajCkhaz7qzi8g=", "h1:tt+2J2Ze8VIdDq2Hr6uHlTJzAMBRpErBwTYx0uD5ilE=",
"h1:uqo0WgG5lCcG8+gf99VnsKKbJMM1urNZq1FbAT6u3S0=", "h1:uQW8SKxmulqrAisO+365mIf2FueINAp5PY28bqCPCug=",
"zh:012a6c3e8bf4aca0ebe0884e15bd42fd018659193f2159d5d2bf9948a9be1bc4", "zh:171ab67cccceead4514fafb2d39e4e708a90cce79000aaf3c29aab7ed4457071",
"zh:079666c0a079237af46ed19ffc4143655ee0e8920a274868e44fbc3db88f346d", "zh:18aa7228447baaaefc49a43e8eff970817a7491a63d8937e796357a3829dd979",
"zh:08e7ff86f6848f3109d59ad46f8c0987178eff2f70c8ef03f2d44ae68e42dfb3", "zh:2cbaab6092e81ba6f41fa60a50f14e980c8ec327ee11d0b21f16a478be4b7567",
"zh:1ce8a499fdf8f484f7d18ec91566bc0759b07d0ca710990cd60d32b222e416b1", "zh:53b8e49c06f5b31a8c681f8c0669cf43e78abe71657b8182a221d096bb514965",
"zh:348e72338095bffccf7c46c7e6b9d0e063a22d9ae761061b0b31dea1aad22cd9", "zh:6037cfc60b4b647aabae155fcb46d649ed7c650e0287f05db52b2068f1e27c8a",
"zh:47d39343dea1ef469a2c8e51c8d5993687af427a132da5379796fec27acb5710", "zh:62460982ce1a869eebfca675603fbbd50416cf6b69459fb855bfbe5ae2b97607",
"zh:4cdf8e9579f9af3c72270088fc6e22208f0f91fd4382bc4a860d16040c86917b", "zh:65f6f3a8470917b6398baa5eb4f74b3932b213eac7c0202798bfad6fd1ee17df",
"zh:4fbebb21ecebc7e5ac0ea9e341c5dbea3094fc0579e4dc5b40bfe693164e022e",
"zh:778578dda7dd98576a3fe228132c8b60f646f4cf113638c94f1c40e2b11c027c",
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f", "zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
"zh:894071f0f42571f820918d1a4316704923e29c5b2392704c1cbd063a04a641b8", "zh:8b5cebe64bf04105a49178a165b6a8800a9a33bae6767143a47fe4977755f805",
"zh:8d11dd73dd499c74d89f77a7e1b3d4a077ac88b0c9c3412e9a6a1b4efe17d107", "zh:a5596635db0993ee3c3060fbc2227d91b239466e96d2d82642625a5aa2486988",
"zh:991e088be8381a73872cd33bb659e9dd69d7ab1f1f8d89b3cd17ffe59dffc65f", "zh:b3a9c63038441f13c311fd4b2c7e69e571445e5a7365a20c7cc9046b7e6c8aba",
"zh:9c0848b9c7e6799c9ffcf3afa70ad94a027f3e15a94679d56790714de0b072c5", "zh:b585e7e4d7648a540b14b9182819214896ca9337729eeb1f2034833b17db754d",
"zh:ad71ae800065ffc24b94d994250136ae8a9f6da704cf91b0dc9e14989e947369", "zh:d2c3c545318ac8542369e9fc8228e29ee585febdf203a450fad3e0eded71ce02",
"zh:e95dd2d6c3525073af47d47b763cb81b6a51b20cabf76f789c69328922da9ecf",
"zh:eee6e590b36d6c6168a7daae8afa74a8721fd7aa9f62a710f04a311975100722",
] ]
} }
@@ -5,7 +5,7 @@ terraform {
required_providers { required_providers {
cloudflare = { cloudflare = {
source = "cloudflare/cloudflare" source = "cloudflare/cloudflare"
version = "4.37.0" version = "4.38.0"
} }
} }
} }
+30 -30
View File
@@ -2,37 +2,37 @@
# Manual edits may be lost in future updates. # Manual edits may be lost in future updates.
provider "registry.opentofu.org/cloudflare/cloudflare" { provider "registry.opentofu.org/cloudflare/cloudflare" {
version = "4.37.0" version = "4.38.0"
constraints = "4.37.0" constraints = "4.38.0"
hashes = [ hashes = [
"h1:0gOI8arnh2CTcHfGH8iwAe6qz2BRSytmbOiNXZjnrHc=", "h1:+27KAHKHBDvv3dqyJv5vhtdKQZJzoZXoMqIyronlHNw=",
"h1:0h0qRJYPHL92Dx3NYZO2WJ21cxyZGEoldzw9aYhPnew=", "h1:/uV9RgOUhkxElkHhWs8fs5ZbX9vj6RCBfP0oJO0JF30=",
"h1:6ri7vZ1MLtQbooicIO4catyIuRq4LHAsIcgd3vGq3AE=", "h1:1DNAdMugJJOAWD/XYiZenYYZLy7fw2ctjT4YZmkRCVQ=",
"h1:7BwVaqxSD9VsmLzs6jDJBJvHPq0dz4I8rCeJAK63Dc4=", "h1:1wn4PmCLdT7mvd74JkCGmJDJxTQDkcxc+1jNbmwnMHA=",
"h1:8tVm+BJvzI14pRbEyt00AvH6oIyqiLRZQ9KxcBeSDhE=", "h1:BIHB4fBxHg2bA9KbL92njhyctxKC8b6hNDp60y5QBss=",
"h1:FTll1M9rPA7RxEyLB6etQqaqynWWl3WkiwJtHMjPr3Y=", "h1:HCQpvKPsMsR4HO5eDqt+Kao7T7CYeEH7KZIO7xMcC6M=",
"h1:L7ysGftn0fstXMjCt3/XEz2giRdEwBsGrdvi4Zw8uzM=", "h1:HTomuzocukpNLwtWzeSF3yteCVsyVKbwKmN66u9iPac=",
"h1:PsbAKy7LdSpwZMJZ7bO3lI04hLDTlXke/LCkrKXYwwE=", "h1:YDxsUBhBAwHSXLzVwrSlSBOwv1NvLyry7s5SfCV7VqQ=",
"h1:Sjkpr8CKs0rXGcdis5q4Kbqmo5mmosgirnQi65G4sM8=", "h1:dchVhxo+Acd1l2RuZ88tW9lWj4422QMfgtxKvKCjYrw=",
"h1:YxJRQdVSzMZR5Ce5M3Gs1SPutXpednxuRwtSSiReHDY=", "h1:eypa+P4ZpsEGMPFuCE+6VkRefu0TZRFmVBOpK+PDOPY=",
"h1:bJrJeBKWEwt4hGQ+3VJR69dsqHORovE8LzuQt9+NTug=", "h1:f3yjse2OsRZj7ZhR7BLintJMlI4fpyt8HyDP/zcEavw=",
"h1:hPC7Vk0ZGXCDJ1y5dOepVo1c0PoUulnJUarrMv4gQIQ=", "h1:mSJ7xj8K+xcnEmGg7lH0jjzyQb157wH94ULTAlIV+HQ=",
"h1:joMURZCLUJ2eSlj645xqHWKYbRBYqvajCkhaz7qzi8g=", "h1:tt+2J2Ze8VIdDq2Hr6uHlTJzAMBRpErBwTYx0uD5ilE=",
"h1:uqo0WgG5lCcG8+gf99VnsKKbJMM1urNZq1FbAT6u3S0=", "h1:uQW8SKxmulqrAisO+365mIf2FueINAp5PY28bqCPCug=",
"zh:012a6c3e8bf4aca0ebe0884e15bd42fd018659193f2159d5d2bf9948a9be1bc4", "zh:171ab67cccceead4514fafb2d39e4e708a90cce79000aaf3c29aab7ed4457071",
"zh:079666c0a079237af46ed19ffc4143655ee0e8920a274868e44fbc3db88f346d", "zh:18aa7228447baaaefc49a43e8eff970817a7491a63d8937e796357a3829dd979",
"zh:08e7ff86f6848f3109d59ad46f8c0987178eff2f70c8ef03f2d44ae68e42dfb3", "zh:2cbaab6092e81ba6f41fa60a50f14e980c8ec327ee11d0b21f16a478be4b7567",
"zh:1ce8a499fdf8f484f7d18ec91566bc0759b07d0ca710990cd60d32b222e416b1", "zh:53b8e49c06f5b31a8c681f8c0669cf43e78abe71657b8182a221d096bb514965",
"zh:348e72338095bffccf7c46c7e6b9d0e063a22d9ae761061b0b31dea1aad22cd9", "zh:6037cfc60b4b647aabae155fcb46d649ed7c650e0287f05db52b2068f1e27c8a",
"zh:47d39343dea1ef469a2c8e51c8d5993687af427a132da5379796fec27acb5710", "zh:62460982ce1a869eebfca675603fbbd50416cf6b69459fb855bfbe5ae2b97607",
"zh:4cdf8e9579f9af3c72270088fc6e22208f0f91fd4382bc4a860d16040c86917b", "zh:65f6f3a8470917b6398baa5eb4f74b3932b213eac7c0202798bfad6fd1ee17df",
"zh:4fbebb21ecebc7e5ac0ea9e341c5dbea3094fc0579e4dc5b40bfe693164e022e",
"zh:778578dda7dd98576a3fe228132c8b60f646f4cf113638c94f1c40e2b11c027c",
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f", "zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
"zh:894071f0f42571f820918d1a4316704923e29c5b2392704c1cbd063a04a641b8", "zh:8b5cebe64bf04105a49178a165b6a8800a9a33bae6767143a47fe4977755f805",
"zh:8d11dd73dd499c74d89f77a7e1b3d4a077ac88b0c9c3412e9a6a1b4efe17d107", "zh:a5596635db0993ee3c3060fbc2227d91b239466e96d2d82642625a5aa2486988",
"zh:991e088be8381a73872cd33bb659e9dd69d7ab1f1f8d89b3cd17ffe59dffc65f", "zh:b3a9c63038441f13c311fd4b2c7e69e571445e5a7365a20c7cc9046b7e6c8aba",
"zh:9c0848b9c7e6799c9ffcf3afa70ad94a027f3e15a94679d56790714de0b072c5", "zh:b585e7e4d7648a540b14b9182819214896ca9337729eeb1f2034833b17db754d",
"zh:ad71ae800065ffc24b94d994250136ae8a9f6da704cf91b0dc9e14989e947369", "zh:d2c3c545318ac8542369e9fc8228e29ee585febdf203a450fad3e0eded71ce02",
"zh:e95dd2d6c3525073af47d47b763cb81b6a51b20cabf76f789c69328922da9ecf",
"zh:eee6e590b36d6c6168a7daae8afa74a8721fd7aa9f62a710f04a311975100722",
] ]
} }
+1 -1
View File
@@ -5,7 +5,7 @@ terraform {
required_providers { required_providers {
cloudflare = { cloudflare = {
source = "cloudflare/cloudflare" source = "cloudflare/cloudflare"
version = "4.37.0" version = "4.38.0"
} }
} }
} }
+4
View File
@@ -46,6 +46,8 @@ services:
depends_on: depends_on:
- redis - redis
- database - database
healthcheck:
disable: false
immich-web: immich-web:
container_name: immich_web container_name: immich_web
@@ -91,6 +93,8 @@ services:
depends_on: depends_on:
- database - database
restart: unless-stopped restart: unless-stopped
healthcheck:
disable: false
redis: redis:
container_name: immich_redis container_name: immich_redis
+7 -3
View File
@@ -21,6 +21,8 @@ services:
- redis - redis
- database - database
restart: always restart: always
healthcheck:
disable: false
immich-machine-learning: immich-machine-learning:
container_name: immich_machine_learning container_name: immich_machine_learning
@@ -40,6 +42,8 @@ services:
env_file: env_file:
- .env - .env
restart: always restart: always
healthcheck:
disable: false
redis: redis:
container_name: immich_redis container_name: immich_redis
@@ -67,7 +71,7 @@ services:
interval: 5m interval: 5m
start_interval: 30s start_interval: 30s
start_period: 5m start_period: 5m
command: ["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"] command: ["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"]
restart: always restart: always
# set IMMICH_METRICS=true in .env to enable metrics # set IMMICH_METRICS=true in .env to enable metrics
@@ -75,7 +79,7 @@ services:
container_name: immich_prometheus container_name: immich_prometheus
ports: ports:
- 9090:9090 - 9090:9090
image: prom/prometheus@sha256:f20d3127bf2876f4a1df76246fca576b41ddf1125ed1c546fbd8b16ea55117e6 image: prom/prometheus@sha256:cafe963e591c872d38f3ea41ff8eb22cee97917b7c97b5c0ccd43a419f11f613
volumes: volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml - ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus - prometheus-data:/prometheus
@@ -87,7 +91,7 @@ services:
command: ['./run.sh', '-disable-reporting'] command: ['./run.sh', '-disable-reporting']
ports: ports:
- 3000:3000 - 3000:3000
image: grafana/grafana:11.1.0-ubuntu@sha256:c7fc29ec783d5e7fc1bdfaad6f92345a345cffbc5d21c388ca228175006fc107 image: grafana/grafana:11.1.3-ubuntu@sha256:e10453733015f31103cb530425f32c994816b50102886fa885dafea2c50a711c
volumes: volumes:
- grafana-data:/var/lib/grafana - grafana-data:/var/lib/grafana
+8 -2
View File
@@ -16,6 +16,7 @@ services:
# file: hwaccel.transcoding.yml # file: hwaccel.transcoding.yml
# service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding # service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
volumes: volumes:
# Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
- ${UPLOAD_LOCATION}:/usr/src/app/upload - ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
env_file: env_file:
@@ -26,6 +27,8 @@ services:
- redis - redis
- database - database
restart: always restart: always
healthcheck:
disable: false
immich-machine-learning: immich-machine-learning:
container_name: immich_machine_learning container_name: immich_machine_learning
@@ -40,10 +43,12 @@ services:
env_file: env_file:
- .env - .env
restart: always restart: always
healthcheck:
disable: false
redis: redis:
container_name: immich_redis container_name: immich_redis
image: docker.io/redis:6.2-alpine@sha256:328fe6a5822256d065debb36617a8169dbfbd77b797c525288e465f56c1d392b image: docker.io/redis:6.2-alpine@sha256:e3b17ba9479deec4b7d1eeec1548a253acc5374d68d3b27937fcfe4df8d18c7e
healthcheck: healthcheck:
test: redis-cli ping || exit 1 test: redis-cli ping || exit 1
restart: always restart: always
@@ -57,13 +62,14 @@ services:
POSTGRES_DB: ${DB_DATABASE_NAME} POSTGRES_DB: ${DB_DATABASE_NAME}
POSTGRES_INITDB_ARGS: '--data-checksums' POSTGRES_INITDB_ARGS: '--data-checksums'
volumes: volumes:
# Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
healthcheck: healthcheck:
test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --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 test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --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: ["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"] command: ["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"]
restart: always restart: always
volumes: volumes:
+1
View File
@@ -12,6 +12,7 @@ DB_DATA_LOCATION=./postgres
IMMICH_VERSION=release IMMICH_VERSION=release
# Connection secret for postgres. You should change it to a random password # Connection secret for postgres. You should change it to a random password
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
DB_PASSWORD=postgres DB_PASSWORD=postgres
# The values below this line do not need to be changed # The values below this line do not need to be changed
+1 -1
View File
@@ -1 +1 @@
20.15.1 20.16.0
+6
View File
@@ -294,6 +294,12 @@ You need to enable WebSockets on your reverse proxy.
Immich components are typically deployed using docker. To see logs for deployed docker containers, you can use the [Docker CLI](https://docs.docker.com/engine/reference/commandline/cli/), specifically the `docker logs` command. For examples, see [Docker Help](/docs/guides/docker-help.md). Immich components are typically deployed using docker. To see logs for deployed docker containers, you can use the [Docker CLI](https://docs.docker.com/engine/reference/commandline/cli/), specifically the `docker logs` command. For examples, see [Docker Help](/docs/guides/docker-help.md).
### How can I reduce the log verbosity of Redis?
To decrease Redis logs, you can add the following line to the `redis:` section of the `docker-compose.yml`:
` command: redis-server --loglevel warning`
### How can I run Immich as a non-root user? ### How can I run Immich as a non-root user?
You can change the user in the container by setting the `user` argument in `docker-compose.yml` for each service. You can change the user in the container by setting the `user` argument in `docker-compose.yml` for each service.
+7 -1
View File
@@ -4,7 +4,8 @@
### Unit tests ### Unit tests
Unit are run by calling `npm run test` from the `server` directory. Unit are run by calling `npm run test` from the `server/` directory.
You need to run `npm install` (in `server/`) before _once_.
### End to end tests ### End to end tests
@@ -14,6 +15,11 @@ The e2e tests can be run by first starting up a test production environment via:
make e2e make e2e
``` ```
Before you can run the tests, you need to run the following commands _once_:
- `npm install` (in `e2e/`)
- `make open-api` (in the project root `/`)
Once the test environment is running, the e2e tests can be run via: Once the test environment is running, the e2e tests can be run via:
```bash ```bash
+5 -16
View File
@@ -13,14 +13,14 @@ In our `.env` file, we will define variables that will help us in the future whe
# Custom location where your uploaded, thumbnails, and transcoded video files are stored # Custom location where your uploaded, thumbnails, and transcoded video files are stored
- UPLOAD_LOCATION=./library - UPLOAD_LOCATION=./library
+ UPLOAD_LOCATION=/custom/location/on/your/system/immich/immich_files + UPLOAD_LOCATION=/custom/path/immich/immich_files
+ THUMB_LOCATION=/custom/location/on/your/system/immich/thumbs + THUMB_LOCATION=/custom/path/immich/thumbs
+ ENCODED_VIDEO_LOCATION=/custom/location/on/your/system/immich/encoded-video + ENCODED_VIDEO_LOCATION=/custom/path/immich/encoded-video
+ PROFILE_LOCATION=/custom/location/on/your/system/immich/profile + PROFILE_LOCATION=/custom/path/immich/profile
... ...
``` ```
After defining the locations for these files, we will edit the `docker-compose.yml` file accordingly and add the new variables to the `immich-server` and `immich-microservices` containers. After defining the locations for these files, we will edit the `docker-compose.yml` file accordingly and add the new variables to the `immich-server` container.
```diff title="docker-compose.yml" ```diff title="docker-compose.yml"
services: services:
@@ -29,16 +29,6 @@ services:
- ${UPLOAD_LOCATION}:/usr/src/app/upload - ${UPLOAD_LOCATION}:/usr/src/app/upload
+ - ${THUMB_LOCATION}:/usr/src/app/upload/thumbs + - ${THUMB_LOCATION}:/usr/src/app/upload/thumbs
+ - ${ENCODED_VIDEO_LOCATION}:/usr/src/app/upload/encoded-video + - ${ENCODED_VIDEO_LOCATION}:/usr/src/app/upload/encoded-video
+ - ${PROFILE_LOCATION}:/usr/src/app/upload/profile
- /etc/localtime:/etc/localtime:ro
...
immich-microservices:
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
+ - ${THUMB_LOCATION}:/usr/src/app/upload/thumbs
+ - ${ENCODED_VIDEO_LOCATION}:/usr/src/app/upload/encoded-video
+ - ${PROFILE_LOCATION}:/usr/src/app/upload/profile + - ${PROFILE_LOCATION}:/usr/src/app/upload/profile
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
``` ```
@@ -46,7 +36,6 @@ services:
Restart Immich to register the changes. Restart Immich to register the changes.
``` ```
docker compose down
docker compose up -d docker compose up -d
``` ```
+17 -6
View File
@@ -1,8 +1,22 @@
# Create Custom Map Styles for Immich Using Maptiler # Custom Map Styles
You may decide that you'd like to modify the style document which is used to draw the maps in Immich. This can be done easily using Maptiler, if you do not want to write an entire JSON document by hand. You may decide that you'd like to modify the style document which is used to
draw the maps in Immich. In addition to visual customization, this also allows
you to pick your own map tile provider instead of the default one. The default
`style.json` for [light theme](https://github.com/immich-app/immich/tree/main/server/resources/style-light.json)
and [dark theme](https://github.com/immich-app/immich/blob/main/server/resources/style-dark.json)
can be used as a basis for creating your own style.
## Steps There are several sources for already-made `style.json` map themes, as well as
online generators you can use.
1. In **Immich**, navigate to **Administration --> Settings --> Map & GPS Settings** and expand the **Map Settings** subsection.
2. Paste the link to your JSON style in either the **Light Style** or **Dark Style**. (You can add different styles which will help make the map style more appropriate depending on whether you set **Immich** to Light or Dark mode.)
3. Save your selections. Reload the map, and enjoy your custom map style!
## Use Maptiler to build a custom style
Customizing the map style can be done easily using Maptiler, if you do not want to write an entire JSON document by hand.
1. Create a free account at https://cloud.maptiler.com 1. Create a free account at https://cloud.maptiler.com
2. Once logged in, you can either create a brand new map by clicking on **New Map**, selecting a starter map, and then clicking **Customize**, OR by selecting a **Standard Map** and customizing it from there. 2. Once logged in, you can either create a brand new map by clicking on **New Map**, selecting a starter map, and then clicking **Customize**, OR by selecting a **Standard Map** and customizing it from there.
@@ -11,6 +25,3 @@ You may decide that you'd like to modify the style document which is used to dra
5. Next, **Publish** your style using the **Publish** button at the top right. This will deploy it to production, which means it is able to be exposed over the Internet. Maptiler will present an interactive side-by-side map with the original and your changes prior to publication.<br/>![Maptiler Publication Settings](img/immich_map_styles_publish.png) 5. Next, **Publish** your style using the **Publish** button at the top right. This will deploy it to production, which means it is able to be exposed over the Internet. Maptiler will present an interactive side-by-side map with the original and your changes prior to publication.<br/>![Maptiler Publication Settings](img/immich_map_styles_publish.png)
6. Maptiler will warn you that changing the map will change it across all apps using the map. Since no apps are using the map yet, this is okay. 6. Maptiler will warn you that changing the map will change it across all apps using the map. Since no apps are using the map yet, this is okay.
7. Clicking on the name of your new map at the top left will bring you to the item's **details** page. From here, copy the link to the JSON style under **Use vector style**. This link will automatically contain your personal API key to Maptiler. 7. Clicking on the name of your new map at the top left will bring you to the item's **details** page. From here, copy the link to the JSON style under **Use vector style**. This link will automatically contain your personal API key to Maptiler.
8. In **Immich**, navigate to **Administration --> Settings --> Map & GPS Settings** and expand the **Map Settings** subsection.
9. Paste the link to your JSON style in either the **Light Style** or **Dark Style**. (You can add different styles which will help make the map style more appropriate depending on whether you set **Immich** to Light or Dark mode.
10. Save your selections. Reload the map, and enjoy your custom map style!
+7 -1
View File
@@ -5,7 +5,7 @@ Keep in mind that mucking around in the database might set the moon on fire. Avo
::: :::
:::tip :::tip
Run `docker exec -it immich_postgres psql immich <DB_USERNAME>` to connect to the database via the container directly. Run `docker exec -it immich_postgres psql --dbname=immich --username=<DB_USERNAME>` to connect to the database via the container directly.
(Replace `<DB_USERNAME>` with the value from your [`.env` file](/docs/install/environment-variables#database)). (Replace `<DB_USERNAME>` with the value from your [`.env` file](/docs/install/environment-variables#database)).
::: :::
@@ -106,3 +106,9 @@ SELECT "key", "value" FROM "system_metadata" WHERE "key" = 'system-config';
```sql title="Delete person and unset it for the faces it was associated with" ```sql title="Delete person and unset it for the faces it was associated with"
DELETE FROM "person" WHERE "name" = 'PersonNameHere'; DELETE FROM "person" WHERE "name" = 'PersonNameHere';
``` ```
## Postgres internal
```sql title="Change DB_PASSWORD"
ALTER USER <DB_USERNAME> WITH ENCRYPTED PASSWORD 'newpasswordhere';
```
+2 -1
View File
@@ -56,7 +56,8 @@ Optionally, you can enable hardware acceleration for machine learning and transc
- Populate custom database information if necessary. - Populate custom database information if necessary.
- Populate `UPLOAD_LOCATION` with your preferred location for storing backup assets. - Populate `UPLOAD_LOCATION` with your preferred location for storing backup assets.
- Consider changing `DB_PASSWORD` to something randomly generated - Consider changing `DB_PASSWORD` to a custom value. Postgres is not publically exposed, so this password is only used for local authentication.
To avoid issues with Docker parsing this value, it is best to use only the characters `A-Za-z0-9`.
### Step 3 - Start the containers ### Step 3 - Start the containers
+16 -14
View File
@@ -38,21 +38,23 @@ Regardless of filesystem, it is not recommended to use a network share for your
## General ## General
| Variable | Description | Default | Containers | Workers | | Variable | Description | Default | Containers | Workers |
| :---------------------------------- | :-------------------------------------------------- | :--------------------------: | :----------------------- | :----------------- | | :---------------------------------- | :---------------------------------------------------------------------------------------- | :--------------------------: | :----------------------- | :----------------- |
| `TZ` | Timezone | | server | microservices | | `TZ` | Timezone | | server | microservices |
| `IMMICH_ENV` | Environment (production, development) | `production` | server, machine learning | api, microservices | | `IMMICH_ENV` | Environment (production, development) | `production` | server, machine learning | api, microservices |
| `IMMICH_LOG_LEVEL` | Log Level (verbose, debug, log, warn, error) | `log` | server, machine learning | api, microservices | | `IMMICH_LOG_LEVEL` | Log Level (verbose, debug, log, warn, error) | `log` | server, machine learning | api, microservices |
| `IMMICH_MEDIA_LOCATION` | Media Location | `./upload`<sup>\*1</sup> | server | api, microservices | | `IMMICH_MEDIA_LOCATION` | Media Location inside the container ⚠️**You probably shouldn't set this**<sup>\*1</sup>⚠️ | `./upload`<sup>\*2</sup> | server | api, microservices |
| `IMMICH_CONFIG_FILE` | Path to config file | | server | api, microservices | | `IMMICH_CONFIG_FILE` | Path to config file | | server | api, microservices |
| `NO_COLOR` | Set to `true` to disable color-coded log output | `false` | server, machine learning | | | `NO_COLOR` | Set to `true` to disable color-coded log output | `false` | server, machine learning | |
| `CPU_CORES` | Amount of cores available to the immich server | auto-detected cpu core count | server | | | `CPU_CORES` | Amount of cores available to the immich server | auto-detected cpu core count | server | |
| `IMMICH_API_METRICS_PORT` | Port for the OTEL metrics | `8081` | server | api | | `IMMICH_API_METRICS_PORT` | Port for the OTEL metrics | `8081` | server | api |
| `IMMICH_MICROSERVICES_METRICS_PORT` | Port for the OTEL metrics | `8082` | server | microservices | | `IMMICH_MICROSERVICES_METRICS_PORT` | Port for the OTEL metrics | `8082` | server | microservices |
| `IMMICH_PROCESS_INVALID_IMAGES` | When `true`, generate thumbnails for invalid images | | server | microservices | | `IMMICH_PROCESS_INVALID_IMAGES` | When `true`, generate thumbnails for invalid images | | server | microservices |
| `IMMICH_TRUSTED_PROXIES` | List of comma separated IPs set as trusted proxies | | server | api | | `IMMICH_TRUSTED_PROXIES` | List of comma separated IPs set as trusted proxies | | server | api |
\*1: With the default `WORKDIR` of `/usr/src/app`, this path will resolve to `/usr/src/app/upload`. \*1: This path is where the Immich code looks for the files, which is internal to the docker container. Setting it to a path on your host will certainly break things, you should use the `UPLOAD_LOCATION` variable instead.
\*2: With the default `WORKDIR` of `/usr/src/app`, this path will resolve to `/usr/src/app/upload`.
It only need to be set if the Immich deployment method is changing. It only need to be set if the Immich deployment method is changing.
:::tip :::tip
+25 -9
View File
@@ -145,28 +145,36 @@ const config = {
label: 'Installation', label: 'Installation',
to: '/docs/install/requirements', to: '/docs/install/requirements',
}, },
{
label: 'Contributing',
to: '/docs/overview/support-the-project',
},
{
label: 'Privacy Policy',
to: '/privacy-policy',
},
], ],
}, },
{ {
title: 'Community', title: 'Documentation',
items: [ items: [
{ {
label: 'Discord', label: 'Roadmap',
href: 'https://discord.immich.app', to: '/roadmap',
}, },
{ {
label: 'Reddit', label: 'API',
href: 'https://www.reddit.com/r/immich/', to: '/docs/api',
},
{
label: 'Cursed Knowledge',
to: '/cursed-knowledge',
}, },
], ],
}, },
{ {
title: 'Links', title: 'Links',
items: [ items: [
// {
// label: "Blog",
// to: "/blog",
// },
{ {
label: 'GitHub', label: 'GitHub',
href: 'https://github.com/immich-app/immich', href: 'https://github.com/immich-app/immich',
@@ -175,6 +183,14 @@ const config = {
label: 'YouTube', label: 'YouTube',
href: 'https://www.youtube.com/@immich-app', href: 'https://www.youtube.com/@immich-app',
}, },
{
label: 'Discord',
href: 'https://discord.immich.app',
},
{
label: 'Reddit',
href: 'https://www.reddit.com/r/immich/',
},
], ],
}, },
], ],
+60 -48
View File
@@ -4237,9 +4237,9 @@
} }
}, },
"node_modules/autoprefixer": { "node_modules/autoprefixer": {
"version": "10.4.19", "version": "10.4.20",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz",
"integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==",
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@@ -4254,12 +4254,13 @@
"url": "https://github.com/sponsors/ai" "url": "https://github.com/sponsors/ai"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"browserslist": "^4.23.0", "browserslist": "^4.23.3",
"caniuse-lite": "^1.0.30001599", "caniuse-lite": "^1.0.30001646",
"fraction.js": "^4.3.7", "fraction.js": "^4.3.7",
"normalize-range": "^0.1.2", "normalize-range": "^0.1.2",
"picocolors": "^1.0.0", "picocolors": "^1.0.1",
"postcss-value-parser": "^4.2.0" "postcss-value-parser": "^4.2.0"
}, },
"bin": { "bin": {
@@ -4531,9 +4532,9 @@
} }
}, },
"node_modules/browserslist": { "node_modules/browserslist": {
"version": "4.23.0", "version": "4.23.3",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
"integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@@ -4548,11 +4549,12 @@
"url": "https://github.com/sponsors/ai" "url": "https://github.com/sponsors/ai"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"caniuse-lite": "^1.0.30001587", "caniuse-lite": "^1.0.30001646",
"electron-to-chromium": "^1.4.668", "electron-to-chromium": "^1.5.4",
"node-releases": "^2.0.14", "node-releases": "^2.0.18",
"update-browserslist-db": "^1.0.13" "update-browserslist-db": "^1.1.0"
}, },
"bin": { "bin": {
"browserslist": "cli.js" "browserslist": "cli.js"
@@ -4699,9 +4701,9 @@
} }
}, },
"node_modules/caniuse-lite": { "node_modules/caniuse-lite": {
"version": "1.0.30001614", "version": "1.0.30001651",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001614.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz",
"integrity": "sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==", "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==",
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@@ -4715,7 +4717,8 @@
"type": "github", "type": "github",
"url": "https://github.com/sponsors/ai" "url": "https://github.com/sponsors/ai"
} }
] ],
"license": "CC-BY-4.0"
}, },
"node_modules/ccount": { "node_modules/ccount": {
"version": "2.0.1", "version": "2.0.1",
@@ -6342,9 +6345,10 @@
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
}, },
"node_modules/electron-to-chromium": { "node_modules/electron-to-chromium": {
"version": "1.4.751", "version": "1.5.6",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.751.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz",
"integrity": "sha512-2DEPi++qa89SMGRhufWTiLmzqyuGmNF3SK4+PQetW1JKiZdEpF4XQonJXJCzyuYSA6mauiMhbyVhqYAP45Hvfw==" "integrity": "sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==",
"license": "ISC"
}, },
"node_modules/emoji-regex": { "node_modules/emoji-regex": {
"version": "9.2.2", "version": "9.2.2",
@@ -11958,9 +11962,10 @@
} }
}, },
"node_modules/node-releases": { "node_modules/node-releases": {
"version": "2.0.14", "version": "2.0.18",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
"license": "MIT"
}, },
"node_modules/nopt": { "node_modules/nopt": {
"version": "1.0.10", "version": "1.0.10",
@@ -12754,9 +12759,9 @@
} }
}, },
"node_modules/postcss": { "node_modules/postcss": {
"version": "8.4.39", "version": "8.4.40",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz",
"integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==",
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@@ -13600,9 +13605,9 @@
} }
}, },
"node_modules/prettier": { "node_modules/prettier": {
"version": "3.3.2", "version": "3.3.3",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
"integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"bin": { "bin": {
@@ -13747,9 +13752,10 @@
} }
}, },
"node_modules/qs": { "node_modules/qs": {
"version": "6.12.1", "version": "6.13.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
"integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
"license": "BSD-3-Clause",
"dependencies": { "dependencies": {
"side-channel": "^1.0.6" "side-channel": "^1.0.6"
}, },
@@ -16014,9 +16020,9 @@
} }
}, },
"node_modules/tailwindcss": { "node_modules/tailwindcss": {
"version": "3.4.4", "version": "3.4.9",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.9.tgz",
"integrity": "sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==", "integrity": "sha512-1SEOvRr6sSdV5IDf9iC+NU4dhwdqzF4zKKq3sAbasUWHEM6lsMhX+eNN5gkPx1BvLFEnZQEUFbXnGj8Qlp83Pg==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@alloc/quick-lru": "^5.2.0", "@alloc/quick-lru": "^5.2.0",
@@ -16376,9 +16382,9 @@
} }
}, },
"node_modules/typescript": { "node_modules/typescript": {
"version": "5.5.3", "version": "5.5.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
"integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
"license": "Apache-2.0", "license": "Apache-2.0",
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",
@@ -16607,9 +16613,9 @@
} }
}, },
"node_modules/update-browserslist-db": { "node_modules/update-browserslist-db": {
"version": "1.0.13", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
"integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@@ -16624,9 +16630,10 @@
"url": "https://github.com/sponsors/ai" "url": "https://github.com/sponsors/ai"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"escalade": "^3.1.1", "escalade": "^3.1.2",
"picocolors": "^1.0.0" "picocolors": "^1.0.1"
}, },
"bin": { "bin": {
"update-browserslist-db": "cli.js" "update-browserslist-db": "cli.js"
@@ -16714,12 +16721,16 @@
} }
}, },
"node_modules/url": { "node_modules/url": {
"version": "0.11.3", "version": "0.11.4",
"resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz",
"integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==",
"license": "MIT",
"dependencies": { "dependencies": {
"punycode": "^1.4.1", "punycode": "^1.4.1",
"qs": "^6.11.2" "qs": "^6.12.3"
},
"engines": {
"node": ">= 0.4"
} }
}, },
"node_modules/url-loader": { "node_modules/url-loader": {
@@ -16783,7 +16794,8 @@
"node_modules/url/node_modules/punycode": { "node_modules/url/node_modules/punycode": {
"version": "1.4.1", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
"integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
"license": "MIT"
}, },
"node_modules/util": { "node_modules/util": {
"version": "0.10.4", "version": "0.10.4",
+1 -1
View File
@@ -56,6 +56,6 @@
"node": ">=20" "node": ">=20"
}, },
"volta": { "volta": {
"node": "20.15.1" "node": "20.16.0"
} }
} }
@@ -63,6 +63,11 @@ const projects: CommunityProjectProps[] = [
description: 'Powershell Module for the Immich API', description: 'Powershell Module for the Immich API',
url: 'https://github.com/hanpq/PSImmich', url: 'https://github.com/hanpq/PSImmich',
}, },
{
title: 'Immich Distribution',
description: 'Snap package for easy install and zero-care auto updates of Immich. Self-hosted photo management.',
url: 'https://immich-distribution.nsg.cc',
},
]; ];
function CommunityProject({ title, description, url }: CommunityProjectProps): JSX.Element { function CommunityProject({ title, description, url }: CommunityProjectProps): JSX.Element {
+45 -1
View File
@@ -1,4 +1,13 @@
import { mdiCalendarToday, mdiLeadPencil, mdiLockOutline, mdiSpeedometerSlow, mdiWeb } from '@mdi/js'; import {
mdiCalendarToday,
mdiCrosshairsOff,
mdiLeadPencil,
mdiLockOff,
mdiLockOutline,
mdiSpeedometerSlow,
mdiWeb,
mdiWrap,
} from '@mdi/js';
import Layout from '@theme/Layout'; import Layout from '@theme/Layout';
import React from 'react'; import React from 'react';
import { Item as TimelineItem, Timeline } from '../components/timeline'; import { Item as TimelineItem, Timeline } from '../components/timeline';
@@ -8,6 +17,41 @@ const withLanguage = (date: Date) => (language: string) => date.toLocaleDateStri
type Item = Omit<TimelineItem, 'done' | 'getDateLabel'> & { date: Date }; type Item = Omit<TimelineItem, 'done' | 'getDateLabel'> & { date: Date };
const items: Item[] = [ const items: Item[] = [
{
icon: mdiWrap,
iconColor: 'gray',
title: 'Carriage returns in bash scripts are cursed',
description: 'Git can be configured to automatically convert LF to CRLF on checkout and CRLF breaks bash scripts.',
link: {
url: 'https://github.com/immich-app/immich/pull/11613',
text: '#11613',
},
date: new Date(2024, 7, 7),
},
{
icon: mdiLockOff,
iconColor: 'red',
title: 'Fetch inside Cloudflare Workers is cursed',
description:
'Fetch requests in Cloudflare Workers use http by default, even if you explicitly specify https, which can often cause redirect loops.',
link: {
url: 'https://community.cloudflare.com/t/does-cloudflare-worker-allow-secure-https-connection-to-fetch-even-on-flexible-ssl/68051/5',
text: 'Cloudflare',
},
date: new Date(2024, 7, 7),
},
{
icon: mdiCrosshairsOff,
iconColor: 'gray',
title: 'GPS sharing on mobile is cursed',
description:
'Some phones will silently strip GPS data from images when apps without location permission try to access them.',
link: {
url: 'https://github.com/immich-app/immich/discussions/11268',
text: '#11268',
},
date: new Date(2024, 6, 21),
},
{ {
icon: mdiLeadPencil, icon: mdiLeadPencil,
iconColor: 'gold', iconColor: 'gold',
+114
View File
@@ -0,0 +1,114 @@
import React from 'react';
import Link from '@docusaurus/Link';
import Layout from '@theme/Layout';
import { useColorMode } from '@docusaurus/theme-common';
function HomepageHeader() {
const { isDarkTheme } = useColorMode();
return (
<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>
<h1>Privacy Policy</h1>
<p>Last updated: July 31st 2024</p>
<p>
Welcome to Immich. We are committed to respecting your privacy. This Privacy Policy sets out how we collect,
use, and share information when you use our Immich app.
</p>
</section>
{/* 1. Scope of This Policy */}
<section>
<h2>1. Scope of This Policy</h2>
<p>
This Privacy Policy applies to the Immich app ("we", "our", or "us") and covers our collection, use, and
disclosure of your information. This Policy does not cover any third-party websites, services, or
applications that can be accessed through our app, or third-party services you may access through Immich.
</p>
</section>
{/* 2. Information We Collect */}
<section>
<h2>2. Information We Collect</h2>
<div>
<p>
<strong>Locally Stored Data</strong>: Immich stores all your photos, albums, settings, and locally on your
device. We do not have access to this data, nor do we transmit or store it on any of our servers.
</p>
</div>
<div>
<p>
<strong>Purchase Information:</strong> When you make a purchase within the{' '}
<a href="https://buy.immich.app">https://buy.immich.app</a>, we collect the following information for tax
calculation purposes:
</p>
<ul>
<li>Country of origin</li>
<li>Postal code (if the user is from Canada or the United States)</li>
</ul>
</div>
</section>
{/* 3. Use of Your Information */}
<section>
<h2>3. Use of Your Information</h2>
<p>
<strong>Tax Calculation:</strong> The country of origin and postal code (for users from Canada or the United
States) are collected solely for determining the applicable tax rates on your purchase.
</p>
</section>
{/* 4. Sharing of Your Information */}
<section>
<h2>4. Sharing of Your Information</h2>
<ul>
<li>
<strong>Tax Authorities:</strong> The purchase information may be shared with tax authorities as required
by law.
</li>
<li>
<strong>Payment Providers:</strong> The purchase information may be shared with payment providers where
required.
</li>
</ul>
</section>
{/* 5. Changes to This Policy */}
<section>
<h2>5. Changes to This Policy</h2>
<p>
We may update our Privacy Policy from time to time. If we make any changes, we will notify you by revising
the "Last updated" date at the top of this policy. It's encouraged that users frequently check this page for
any changes to stay informed about how we are helping to protect the personal information we collect.
</p>
</section>
{/* 6. Contact Us */}
<section>
<h2>6. Contact Us</h2>
<p>
If you have any questions about this Privacy Policy, please contact us at{' '}
<a href="mailto:immich@futo.org">immich@futo.org</a>
</p>
</section>
</section>
</header>
);
}
export default function Home(): JSX.Element {
return (
<Layout
title="Home"
description="immich Self-hosted photo and video backup solution directly from your mobile phone "
noFooter={true}
>
<HomepageHeader />
<div className="flex flex-col place-items-center place-content-center">
<p>This project is available under GNU AGPL v3 license.</p>
<p className="text-xs">Privacy should not be a luxury</p>
</div>
</Layout>
);
}
+4
View File
@@ -1,4 +1,8 @@
[ [
{
"label": "v1.111.0",
"url": "https://v1.111.0.archive.immich.app"
},
{ {
"label": "v1.110.0", "label": "v1.110.0",
"url": "https://v1.110.0.archive.immich.app" "url": "https://v1.110.0.archive.immich.app"
-32
View File
@@ -1,32 +0,0 @@
module.exports = {
parser: '@typescript-eslint/parser',
parserOptions: {
project: 'tsconfig.json',
sourceType: 'module',
tsconfigRootDir: __dirname,
},
plugins: ['@typescript-eslint/eslint-plugin'],
extends: ['plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended', 'plugin:unicorn/recommended'],
root: true,
env: {
node: true,
},
ignorePatterns: ['.eslintrc.js'],
rules: {
'@typescript-eslint/interface-name-prefix': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-floating-promises': 'error',
'unicorn/prefer-module': 'off',
'unicorn/import-style': 'off',
curly: 2,
'prettier/prettier': 0,
'unicorn/prevent-abbreviations': 'off',
'unicorn/filename-case': 'off',
'unicorn/no-null': 'off',
'unicorn/prefer-top-level-await': 'off',
'unicorn/prefer-event-target': 'off',
'unicorn/no-thenable': 'off',
},
};
+1 -1
View File
@@ -1 +1 @@
20.15.1 20.16.0
+64
View File
@@ -0,0 +1,64 @@
import { FlatCompat } from '@eslint/eslintrc';
import js from '@eslint/js';
import typescriptEslint from '@typescript-eslint/eslint-plugin';
import tsParser from '@typescript-eslint/parser';
import globals from 'globals';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all,
});
export default [
{
ignores: ['eslint.config.mjs'],
},
...compat.extends(
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
'plugin:unicorn/recommended',
),
{
plugins: {
'@typescript-eslint': typescriptEslint,
},
languageOptions: {
globals: {
...globals.node,
},
parser: tsParser,
ecmaVersion: 5,
sourceType: 'module',
parserOptions: {
project: 'tsconfig.json',
tsconfigRootDir: __dirname,
},
},
rules: {
'@typescript-eslint/interface-name-prefix': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-floating-promises': 'error',
'unicorn/prefer-module': 'off',
'unicorn/import-style': 'off',
curly: 2,
'prettier/prettier': 0,
'unicorn/prevent-abbreviations': 'off',
'unicorn/filename-case': 'off',
'unicorn/no-null': 'off',
'unicorn/prefer-top-level-await': 'off',
'unicorn/prefer-event-target': 'off',
'unicorn/no-thenable': 'off',
},
},
];
+960 -818
View File
File diff suppressed because it is too large Load Diff
+13 -10
View File
@@ -1,6 +1,6 @@
{ {
"name": "immich-e2e", "name": "immich-e2e",
"version": "1.110.0", "version": "1.111.0",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"type": "module", "type": "module",
@@ -19,23 +19,26 @@
"author": "", "author": "",
"license": "GNU Affero General Public License version 3", "license": "GNU Affero General Public License version 3",
"devDependencies": { "devDependencies": {
"@eslint/eslintrc": "^3.1.0",
"@eslint/js": "^9.8.0",
"@immich/cli": "file:../cli", "@immich/cli": "file:../cli",
"@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": "^20.14.12", "@types/node": "^20.14.14",
"@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": "^7.1.0", "@typescript-eslint/eslint-plugin": "^8.0.0",
"@typescript-eslint/parser": "^7.1.0", "@typescript-eslint/parser": "^8.0.0",
"@vitest/coverage-v8": "^1.3.0", "@vitest/coverage-v8": "^2.0.5",
"eslint": "^8.57.0", "eslint": "^9.0.0",
"eslint-config-prettier": "^9.1.0", "eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.1.3", "eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-unicorn": "^54.0.0", "eslint-plugin-unicorn": "^55.0.0",
"exiftool-vendored": "^27.0.0", "exiftool-vendored": "^28.0.0",
"globals": "^15.9.0",
"jose": "^5.6.3", "jose": "^5.6.3",
"luxon": "^3.4.4", "luxon": "^3.4.4",
"oidc-provider": "^8.5.1", "oidc-provider": "^8.5.1",
@@ -47,9 +50,9 @@
"supertest": "^7.0.0", "supertest": "^7.0.0",
"typescript": "^5.3.3", "typescript": "^5.3.3",
"utimes": "^5.2.1", "utimes": "^5.2.1",
"vitest": "^1.3.0" "vitest": "^2.0.5"
}, },
"volta": { "volta": {
"node": "20.15.1" "node": "20.16.0"
} }
} }
+53
View File
@@ -43,6 +43,7 @@ const makeUploadDto = (options?: { omit: string }): Record<string, any> => {
const TEN_TIMES = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; const TEN_TIMES = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
const locationAssetFilepath = `${testAssetDir}/metadata/gps-position/thompson-springs.jpg`; const locationAssetFilepath = `${testAssetDir}/metadata/gps-position/thompson-springs.jpg`;
const ratingAssetFilepath = `${testAssetDir}/metadata/rating/mongolels.jpg`;
const readTags = async (bytes: Buffer, filename: string) => { const readTags = async (bytes: Buffer, filename: string) => {
const filepath = join(tempDir, filename); const filepath = join(tempDir, filename);
@@ -72,6 +73,7 @@ describe('/asset', () => {
let user2Assets: AssetMediaResponseDto[]; let user2Assets: AssetMediaResponseDto[];
let stackAssets: AssetMediaResponseDto[]; let stackAssets: AssetMediaResponseDto[];
let locationAsset: AssetMediaResponseDto; let locationAsset: AssetMediaResponseDto;
let ratingAsset: AssetMediaResponseDto;
const setupTests = async () => { const setupTests = async () => {
await utils.resetDatabase(); await utils.resetDatabase();
@@ -99,6 +101,16 @@ describe('/asset', () => {
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: locationAsset.id }); await utils.waitForWebsocketEvent({ event: 'assetUpload', id: locationAsset.id });
// asset rating
ratingAsset = await utils.createAsset(admin.accessToken, {
assetData: {
filename: 'mongolels.jpg',
bytes: await readFile(ratingAssetFilepath),
},
});
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: ratingAsset.id });
user1Assets = await Promise.all([ user1Assets = await Promise.all([
utils.createAsset(user1.accessToken), utils.createAsset(user1.accessToken),
utils.createAsset(user1.accessToken), utils.createAsset(user1.accessToken),
@@ -214,6 +226,22 @@ describe('/asset', () => {
expect(body).toMatchObject({ id: user1Assets[0].id }); expect(body).toMatchObject({ id: user1Assets[0].id });
}); });
it('should get the asset rating', async () => {
await utils.waitForWebsocketEvent({
event: 'assetUpload',
id: ratingAsset.id,
});
const { status, body } = await request(app)
.get(`/assets/${ratingAsset.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(200);
expect(body).toMatchObject({
id: ratingAsset.id,
exifInfo: expect.objectContaining({ rating: 3 }),
});
});
it('should work with a shared link', async () => { it('should work with a shared link', async () => {
const sharedLink = await utils.createSharedLink(user1.accessToken, { const sharedLink = await utils.createSharedLink(user1.accessToken, {
type: SharedLinkType.Individual, type: SharedLinkType.Individual,
@@ -575,6 +603,31 @@ describe('/asset', () => {
expect(status).toEqual(200); expect(status).toEqual(200);
}); });
it('should set the rating', async () => {
const { status, body } = await request(app)
.put(`/assets/${user1Assets[0].id}`)
.set('Authorization', `Bearer ${user1.accessToken}`)
.send({ rating: 2 });
expect(body).toMatchObject({
id: user1Assets[0].id,
exifInfo: expect.objectContaining({
rating: 2,
}),
});
expect(status).toEqual(200);
});
it('should reject invalid rating', async () => {
for (const test of [{ rating: 7 }, { rating: 3.5 }, { rating: null }]) {
const { status, body } = await request(app)
.put(`/assets/${user1Assets[0].id}`)
.send(test)
.set('Authorization', `Bearer ${user1.accessToken}`);
expect(status).toBe(400);
expect(body).toEqual(errorDto.badRequest());
}
});
it('should return tagged people', async () => { it('should return tagged people', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/assets/${user1Assets[0].id}`) .put(`/assets/${user1Assets[0].id}`)
+71
View File
@@ -159,4 +159,75 @@ describe('/map', () => {
expect(body).toEqual(expect.objectContaining({ id: 'immich-map-dark' })); expect(body).toEqual(expect.objectContaining({ id: 'immich-map-dark' }));
}); });
}); });
describe('GET /map/reverse-geocode', () => {
it('should require authentication', async () => {
const { status, body } = await request(app).get('/map/reverse-geocode');
expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized);
});
it('should throw an error if a lat is not provided', async () => {
const { status, body } = await request(app)
.get('/map/reverse-geocode?lon=123')
.set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(400);
expect(body).toEqual(errorDto.badRequest(['lat must be a number between -90 and 90']));
});
it('should throw an error if a lat is not a number', async () => {
const { status, body } = await request(app)
.get('/map/reverse-geocode?lat=abc&lon=123.456')
.set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(400);
expect(body).toEqual(errorDto.badRequest(['lat must be a number between -90 and 90']));
});
it('should throw an error if a lat is out of range', async () => {
const { status, body } = await request(app)
.get('/map/reverse-geocode?lat=91&lon=123.456')
.set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(400);
expect(body).toEqual(errorDto.badRequest(['lat must be a number between -90 and 90']));
});
it('should throw an error if a lon is not provided', async () => {
const { status, body } = await request(app)
.get('/map/reverse-geocode?lat=75')
.set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(400);
expect(body).toEqual(errorDto.badRequest(['lon must be a number between -180 and 180']));
});
const reverseGeocodeTestCases = [
{
name: 'Vaucluse',
lat: -33.858_977_058_663_13,
lon: 151.278_490_730_270_48,
results: [{ city: 'Vaucluse', state: 'New South Wales', country: 'Australia' }],
},
{
name: 'Ravenhall',
lat: -37.765_732_399_174_75,
lon: 144.752_453_164_883_3,
results: [{ city: 'Ravenhall', state: 'Victoria', country: 'Australia' }],
},
{
name: 'Scarborough',
lat: -31.894_346_156_789_997,
lon: 115.757_617_103_904_64,
results: [{ city: 'Scarborough', state: 'Western Australia', country: 'Australia' }],
},
];
it.each(reverseGeocodeTestCases)(`should resolve to $name`, async ({ lat, lon, results }) => {
const { status, body } = await request(app)
.get(`/map/reverse-geocode?lat=${lat}&lon=${lon}`)
.set('Authorization', `Bearer ${admin.accessToken}`);
expect(status).toBe(200);
expect(Array.isArray(body)).toBe(true);
expect(body.length).toBe(results.length);
expect(body).toEqual(results);
});
});
}); });
+16 -7
View File
@@ -6,10 +6,19 @@ import request from 'supertest';
import { beforeAll, beforeEach, describe, expect, it } from 'vitest'; import { beforeAll, beforeEach, describe, expect, it } from 'vitest';
const invalidBirthday = [ const invalidBirthday = [
{ birthDate: 'false', response: 'birthDate must be a date string' }, {
{ birthDate: '123567', response: 'birthDate must be a date string' }, birthDate: 'false',
{ birthDate: 123_567, response: 'birthDate must be a date string' }, response: ['birthDate must be a string in the format yyyy-MM-dd', 'Birth date cannot be in the future'],
{ birthDate: new Date(9999, 0, 0).toISOString(), response: ['Birth date cannot be in the future'] }, },
{
birthDate: '123567',
response: ['birthDate must be a string in the format yyyy-MM-dd', 'Birth date cannot be in the future'],
},
{
birthDate: 123_567,
response: ['birthDate must be a string in the format yyyy-MM-dd', 'Birth date cannot be in the future'],
},
{ birthDate: '9999-01-01', response: ['Birth date cannot be in the future'] },
]; ];
describe('/people', () => { describe('/people', () => {
@@ -185,13 +194,13 @@ describe('/people', () => {
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ .send({
name: 'New Person', name: 'New Person',
birthDate: '1990-01-01T05:00:00.000Z', birthDate: '1990-01-01',
}); });
expect(status).toBe(201); expect(status).toBe(201);
expect(body).toMatchObject({ expect(body).toMatchObject({
id: expect.any(String), id: expect.any(String),
name: 'New Person', name: 'New Person',
birthDate: '1990-01-01T05:00:00.000Z', birthDate: '1990-01-01',
}); });
}); });
}); });
@@ -233,7 +242,7 @@ describe('/people', () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.put(`/people/${visiblePerson.id}`) .put(`/people/${visiblePerson.id}`)
.set('Authorization', `Bearer ${admin.accessToken}`) .set('Authorization', `Bearer ${admin.accessToken}`)
.send({ birthDate: '1990-01-01T05:00:00.000Z' }); .send({ birthDate: '1990-01-01' });
expect(status).toBe(200); expect(status).toBe(200);
expect(body).toMatchObject({ birthDate: '1990-01-01' }); expect(body).toMatchObject({ birthDate: '1990-01-01' });
}); });
+166 -30
View File
@@ -1,4 +1,4 @@
import { AssetMediaResponseDto, LoginResponseDto, deleteAssets, getMapMarkers, updateAsset } from '@immich/sdk'; import { AssetMediaResponseDto, LoginResponseDto, deleteAssets, updateAsset } from '@immich/sdk';
import { DateTime } from 'luxon'; import { DateTime } from 'luxon';
import { readFile } from 'node:fs/promises'; import { readFile } from 'node:fs/promises';
import { join } from 'node:path'; import { join } from 'node:path';
@@ -32,9 +32,6 @@ describe('/search', () => {
let assetOneJpg5: AssetMediaResponseDto; let assetOneJpg5: AssetMediaResponseDto;
let assetSprings: AssetMediaResponseDto; let assetSprings: AssetMediaResponseDto;
let assetLast: AssetMediaResponseDto; let assetLast: AssetMediaResponseDto;
let cities: string[];
let states: string[];
let countries: string[];
beforeAll(async () => { beforeAll(async () => {
await utils.resetDatabase(); await utils.resetDatabase();
@@ -85,7 +82,7 @@ describe('/search', () => {
// note: the coordinates here are not the actual coordinates of the images and are random for most of them // note: the coordinates here are not the actual coordinates of the images and are random for most of them
const coordinates = [ const coordinates = [
{ latitude: 48.853_41, longitude: 2.3488 }, // paris { latitude: 48.853_41, longitude: 2.3488 }, // paris
{ latitude: 63.0695, longitude: -151.0074 }, // denali { latitude: 35.6895, longitude: 139.691_71 }, // tokyo
{ latitude: 52.524_37, longitude: 13.410_53 }, // berlin { latitude: 52.524_37, longitude: 13.410_53 }, // berlin
{ latitude: 1.314_663_1, longitude: 103.845_409_3 }, // singapore { latitude: 1.314_663_1, longitude: 103.845_409_3 }, // singapore
{ latitude: 41.013_84, longitude: 28.949_66 }, // istanbul { latitude: 41.013_84, longitude: 28.949_66 }, // istanbul
@@ -101,16 +98,15 @@ describe('/search', () => {
{ latitude: 31.634_16, longitude: -7.999_94 }, // marrakesh { latitude: 31.634_16, longitude: -7.999_94 }, // marrakesh
{ latitude: 38.523_735_4, longitude: -78.488_619_4 }, // tanners ridge { latitude: 38.523_735_4, longitude: -78.488_619_4 }, // tanners ridge
{ latitude: 59.938_63, longitude: 30.314_13 }, // st. petersburg { latitude: 59.938_63, longitude: 30.314_13 }, // st. petersburg
{ latitude: 35.6895, longitude: 139.691_71 }, // tokyo
]; ];
const updates = assets.map((asset, i) => const updates = coordinates.map((dto, i) =>
updateAsset({ id: asset.id, updateAssetDto: coordinates[i] }, { headers: asBearerAuth(admin.accessToken) }), updateAsset({ id: assets[i].id, updateAssetDto: dto }, { headers: asBearerAuth(admin.accessToken) }),
); );
await Promise.all(updates); await Promise.all(updates);
for (const asset of assets) { for (const [i] of coordinates.entries()) {
await utils.waitForWebsocketEvent({ event: 'assetUpdate', id: asset.id }); await utils.waitForWebsocketEvent({ event: 'assetUpdate', id: assets[i].id });
} }
[ [
@@ -137,12 +133,6 @@ describe('/search', () => {
assetLast = assets.at(-1) as AssetMediaResponseDto; assetLast = assets.at(-1) as AssetMediaResponseDto;
await deleteAssets({ assetBulkDeleteDto: { ids: [assetSilver.id] } }, { headers: asBearerAuth(admin.accessToken) }); await deleteAssets({ assetBulkDeleteDto: { ids: [assetSilver.id] } }, { headers: asBearerAuth(admin.accessToken) });
const mapMarkers = await getMapMarkers({}, { headers: asBearerAuth(admin.accessToken) });
const nonTrashed = mapMarkers.filter((mark) => mark.id !== assetSilver.id);
cities = [...new Set(nonTrashed.map((mark) => mark.city).filter((entry): entry is string => !!entry))].sort();
states = [...new Set(nonTrashed.map((mark) => mark.state).filter((entry): entry is string => !!entry))].sort();
countries = [...new Set(nonTrashed.map((mark) => mark.country).filter((entry): entry is string => !!entry))].sort();
}, 30_000); }, 30_000);
afterAll(async () => { afterAll(async () => {
@@ -321,23 +311,120 @@ describe('/search', () => {
}, },
{ {
should: 'should search by city', should: 'should search by city',
deferred: () => ({ dto: { city: 'Accra' }, assets: [assetHeic] }), deferred: () => ({
dto: {
city: 'Accra',
includeNull: true,
},
assets: [assetHeic],
}),
},
{
should: "should search city ('')",
deferred: () => ({
dto: {
city: '',
isVisible: true,
includeNull: true,
},
assets: [assetLast],
}),
},
{
should: 'should search city (null)',
deferred: () => ({
dto: {
city: null,
isVisible: true,
includeNull: true,
},
assets: [assetLast],
}),
}, },
{ {
should: 'should search by state', should: 'should search by state',
deferred: () => ({ dto: { state: 'New York' }, assets: [assetDensity] }), deferred: () => ({
dto: {
state: 'New York',
includeNull: true,
},
assets: [assetDensity],
}),
},
{
should: "should search state ('')",
deferred: () => ({
dto: {
state: '',
isVisible: true,
withExif: true,
includeNull: true,
},
assets: [assetLast, assetNotocactus],
}),
},
{
should: 'should search state (null)',
deferred: () => ({
dto: {
state: null,
isVisible: true,
includeNull: true,
},
assets: [assetLast, assetNotocactus],
}),
}, },
{ {
should: 'should search by country', should: 'should search by country',
deferred: () => ({ dto: { country: 'France' }, assets: [assetFalcon] }), deferred: () => ({
dto: {
country: 'France',
includeNull: true,
},
assets: [assetFalcon],
}),
},
{
should: "should search country ('')",
deferred: () => ({
dto: {
country: '',
isVisible: true,
includeNull: true,
},
assets: [assetLast],
}),
},
{
should: 'should search country (null)',
deferred: () => ({
dto: {
country: null,
isVisible: true,
includeNull: true,
},
assets: [assetLast],
}),
}, },
{ {
should: 'should search by make', should: 'should search by make',
deferred: () => ({ dto: { make: 'Canon' }, assets: [assetFalcon, assetDenali] }), deferred: () => ({
dto: {
make: 'Canon',
includeNull: true,
},
assets: [assetFalcon, assetDenali],
}),
}, },
{ {
should: 'should search by model', should: 'should search by model',
deferred: () => ({ dto: { model: 'Canon EOS 7D' }, assets: [assetDenali] }), deferred: () => ({
dto: {
model: 'Canon EOS 7D',
includeNull: true,
},
assets: [assetDenali],
}),
}, },
{ {
should: 'should allow searching the upload library (libraryId: null)', should: 'should allow searching the upload library (libraryId: null)',
@@ -450,32 +537,79 @@ describe('/search', () => {
it('should get suggestions for country', async () => { it('should get suggestions for country', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/search/suggestions?type=country') .get('/search/suggestions?type=country&includeNull=true')
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(body).toEqual(countries); expect(body).toEqual([
'Cuba',
'France',
'Georgia',
'Germany',
'Ghana',
'Japan',
'Morocco',
"People's Republic of China",
'Russian Federation',
'Singapore',
'Spain',
'Switzerland',
'United States of America',
null,
]);
expect(status).toBe(200); expect(status).toBe(200);
}); });
it('should get suggestions for state', async () => { it('should get suggestions for state', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/search/suggestions?type=state') .get('/search/suggestions?type=state&includeNull=true')
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(body).toHaveLength(states.length); expect(body).toEqual([
expect(body).toEqual(expect.arrayContaining(states)); 'Andalusia',
'Berlin',
'Glarus',
'Greater Accra',
'Havana',
'Île-de-France',
'Marrakesh-Safi',
'Mississippi',
'New York',
'Shanghai',
'St.-Petersburg',
'Tbilisi',
'Tokyo',
'Virginia',
null,
]);
expect(status).toBe(200); expect(status).toBe(200);
}); });
it('should get suggestions for city', async () => { it('should get suggestions for city', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/search/suggestions?type=city') .get('/search/suggestions?type=city&includeNull=true')
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(body).toEqual(cities); expect(body).toEqual([
'Accra',
'Berlin',
'Glarus',
'Havana',
'Marrakesh',
'Montalbán de Córdoba',
'New York City',
'Novena',
'Paris',
'Philadelphia',
'Saint Petersburg',
'Shanghai',
'Stanley',
'Tbilisi',
'Tokyo',
null,
]);
expect(status).toBe(200); expect(status).toBe(200);
}); });
it('should get suggestions for camera make', async () => { it('should get suggestions for camera make', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/search/suggestions?type=camera-make') .get('/search/suggestions?type=camera-make&includeNull=true')
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(body).toEqual([ expect(body).toEqual([
'Apple', 'Apple',
@@ -485,13 +619,14 @@ describe('/search', () => {
'PENTAX Corporation', 'PENTAX Corporation',
'samsung', 'samsung',
'SONY', 'SONY',
null,
]); ]);
expect(status).toBe(200); expect(status).toBe(200);
}); });
it('should get suggestions for camera model', async () => { it('should get suggestions for camera model', async () => {
const { status, body } = await request(app) const { status, body } = await request(app)
.get('/search/suggestions?type=camera-model') .get('/search/suggestions?type=camera-model&includeNull=true')
.set('Authorization', `Bearer ${admin.accessToken}`); .set('Authorization', `Bearer ${admin.accessToken}`);
expect(body).toEqual([ expect(body).toEqual([
'Canon EOS 7D', 'Canon EOS 7D',
@@ -506,6 +641,7 @@ describe('/search', () => {
'SM-F711N', 'SM-F711N',
'SM-S906U', 'SM-S906U',
'SM-T970', 'SM-T970',
null,
]); ]);
expect(status).toBe(200); expect(status).toBe(200);
}); });
@@ -112,6 +112,13 @@ describe('/shared-links', () => {
expect(resp.header['content-type']).toContain('text/html'); expect(resp.header['content-type']).toContain('text/html');
expect(resp.text).toContain(`<meta name="description" content="1 shared photos & videos" />`); expect(resp.text).toContain(`<meta name="description" content="1 shared photos & videos" />`);
}); });
it('should have fqdn og:image meta tag for shared asset', async () => {
const resp = await request(shareUrl).get(`/${linkWithAssets.key}`);
expect(resp.status).toBe(200);
expect(resp.header['content-type']).toContain('text/html');
expect(resp.text).toContain(`<meta property="og:image" content="http://`);
});
}); });
describe('GET /shared-links', () => { describe('GET /shared-links', () => {
+4 -4
View File
@@ -424,12 +424,12 @@ export const utils = {
createPartner: (accessToken: string, id: string) => createPartner({ id }, { headers: asBearerAuth(accessToken) }), createPartner: (accessToken: string, id: string) => createPartner({ id }, { headers: asBearerAuth(accessToken) }),
setAuthCookies: async (context: BrowserContext, accessToken: string) => setAuthCookies: async (context: BrowserContext, accessToken: string, domain = '127.0.0.1') =>
await context.addCookies([ await context.addCookies([
{ {
name: 'immich_access_token', name: 'immich_access_token',
value: accessToken, value: accessToken,
domain: '127.0.0.1', domain,
path: '/', path: '/',
expires: 1_742_402_728, expires: 1_742_402_728,
httpOnly: true, httpOnly: true,
@@ -439,7 +439,7 @@ export const utils = {
{ {
name: 'immich_auth_type', name: 'immich_auth_type',
value: 'password', value: 'password',
domain: '127.0.0.1', domain,
path: '/', path: '/',
expires: 1_742_402_728, expires: 1_742_402_728,
httpOnly: true, httpOnly: true,
@@ -449,7 +449,7 @@ export const utils = {
{ {
name: 'immich_is_authenticated', name: 'immich_is_authenticated',
value: 'true', value: 'true',
domain: '127.0.0.1', domain,
path: '/', path: '/',
expires: 1_742_402_728, expires: 1_742_402_728,
httpOnly: false, httpOnly: false,
@@ -1,16 +1,23 @@
import { AssetMediaResponseDto, LoginResponseDto, SharedLinkType } from '@immich/sdk'; import { AssetMediaResponseDto, LoginResponseDto, SharedLinkType } from '@immich/sdk';
import { expect, test } from '@playwright/test'; import { expect, test } from '@playwright/test';
import type { Socket } from 'socket.io-client';
import { utils } from 'src/utils'; import { utils } from 'src/utils';
test.describe('Detail Panel', () => { test.describe('Detail Panel', () => {
let admin: LoginResponseDto; let admin: LoginResponseDto;
let asset: AssetMediaResponseDto; let asset: AssetMediaResponseDto;
let websocket: Socket;
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);
websocket = await utils.connectWebsocket(admin.accessToken);
});
test.afterAll(() => {
utils.disconnectWebsocket(websocket);
}); });
test('can be opened for shared links', async ({ page }) => { test('can be opened for shared links', async ({ page }) => {
@@ -57,4 +64,23 @@ test.describe('Detail Panel', () => {
await expect(textarea).toBeVisible(); await expect(textarea).toBeVisible();
await expect(textarea).not.toBeDisabled(); await expect(textarea).not.toBeDisabled();
}); });
test('description changes are visible after reopening', async ({ context, page }) => {
await utils.setAuthCookies(context, admin.accessToken);
await page.goto(`/photos/${asset.id}`);
await page.waitForSelector('#immich-asset-viewer');
await page.getByRole('button', { name: 'Info' }).click();
const textarea = page.getByRole('textbox', { name: 'Add a description' });
await textarea.fill('new description');
await expect(textarea).toHaveValue('new description');
await page.getByRole('button', { name: 'Info' }).click();
await expect(textarea).not.toBeVisible();
await page.getByRole('button', { name: 'Info' }).click();
await expect(textarea).toBeVisible();
await utils.waitForWebsocketEvent({ event: 'assetUpdate', id: asset.id });
await expect(textarea).toHaveValue('new description');
});
}); });
@@ -10,6 +10,9 @@ test.describe('Asset Viewer Navbar', () => {
utils.initSdk(); utils.initSdk();
await utils.resetDatabase(); await utils.resetDatabase();
admin = await utils.adminSetup(); admin = await utils.adminSetup();
});
test.beforeEach(async () => {
asset = await utils.createAsset(admin.accessToken); asset = await utils.createAsset(admin.accessToken);
}); });
@@ -49,4 +52,14 @@ test.describe('Asset Viewer Navbar', () => {
} }
}); });
}); });
test.describe('actions', () => {
test('favorite asset with shortcut', async ({ context, page }) => {
await utils.setAuthCookies(context, admin.accessToken);
await page.goto(`/photos/${asset.id}`);
await page.waitForSelector('#immich-asset-viewer');
await page.keyboard.press('f');
await expect(page.locator('#notification-list').getByTestId('message')).toHaveText('Added to favorites');
});
});
}); });
@@ -0,0 +1,56 @@
import { AssetMediaResponseDto, LoginResponseDto } from '@immich/sdk';
import { expect, type Page, test } from '@playwright/test';
import { utils } from 'src/utils';
test.describe('Slideshow', () => {
let admin: LoginResponseDto;
let asset: AssetMediaResponseDto;
test.beforeAll(async () => {
utils.initSdk();
await utils.resetDatabase();
admin = await utils.adminSetup();
asset = await utils.createAsset(admin.accessToken);
});
const openSlideshow = async (page: Page) => {
await page.goto(`/photos/${asset.id}`);
await page.waitForSelector('#immich-asset-viewer');
await page.getByRole('button', { name: 'More' }).click();
await page.getByRole('menuitem', { name: 'Slideshow' }).click();
};
test('open slideshow', async ({ context, page }) => {
await utils.setAuthCookies(context, admin.accessToken);
await openSlideshow(page);
await expect(page.getByRole('button', { name: 'Exit Slideshow' })).toBeVisible();
});
test('exit slideshow with button', async ({ context, page }) => {
await utils.setAuthCookies(context, admin.accessToken);
await openSlideshow(page);
const exitButton = page.getByRole('button', { name: 'Exit Slideshow' });
await exitButton.click();
await expect(exitButton).not.toBeVisible();
});
test('exit slideshow with shortcut', async ({ context, page }) => {
await utils.setAuthCookies(context, admin.accessToken);
await openSlideshow(page);
const exitButton = page.getByRole('button', { name: 'Exit Slideshow' });
await expect(exitButton).toBeVisible();
await page.keyboard.press('Escape');
await expect(exitButton).not.toBeVisible();
});
test('favorite shortcut is disabled', async ({ context, page }) => {
await utils.setAuthCookies(context, admin.accessToken);
await openSlideshow(page);
await expect(page.getByRole('button', { name: 'Exit Slideshow' })).toBeVisible();
await page.keyboard.press('f');
await expect(page.locator('#notification-list')).not.toBeVisible();
});
});
+2 -1
View File
@@ -13,7 +13,7 @@ test.describe('Registration', () => {
test('admin registration', async ({ page }) => { test('admin registration', async ({ page }) => {
// welcome // welcome
await page.goto('/'); await page.goto('/');
await page.getByRole('button', { name: 'Getting Started' }).click(); await page.getByRole('link', { name: 'Getting Started' }).click();
// register // register
await expect(page).toHaveTitle(/Admin Registration/); await expect(page).toHaveTitle(/Admin Registration/);
@@ -33,6 +33,7 @@ test.describe('Registration', () => {
// onboarding // onboarding
await expect(page).toHaveURL('/auth/onboarding'); await expect(page).toHaveURL('/auth/onboarding');
await page.getByRole('button', { name: 'Theme' }).click(); await page.getByRole('button', { name: 'Theme' }).click();
await page.getByRole('button', { name: 'Privacy' }).click();
await page.getByRole('button', { name: 'Storage Template' }).click(); await page.getByRole('button', { name: 'Storage Template' }).click();
await page.getByRole('button', { name: 'Done' }).click(); await page.getByRole('button', { name: 'Done' }).click();
+2 -2
View File
@@ -25,7 +25,7 @@ test.describe('Photo Viewer', () => {
test('initially shows a loading spinner', async ({ page }) => { test('initially shows a loading spinner', async ({ page }) => {
await page.route(`/api/assets/${asset.id}/thumbnail**`, async (route) => { await page.route(`/api/assets/${asset.id}/thumbnail**`, async (route) => {
// slow down the request for thumbnail, so spiner has chance to show up // slow down the request for thumbnail, so spinner has chance to show up
await new Promise((f) => setTimeout(f, 2000)); await new Promise((f) => setTimeout(f, 2000));
await route.continue(); await route.continue();
}); });
@@ -40,7 +40,7 @@ test.describe('Photo Viewer', () => {
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();
expect(box).toBeTruthy; expect(box).toBeTruthy();
const { x, y, width, height } = box!; const { x, y, width, height } = box!;
await page.mouse.move(x + width / 2, y + height / 2); await page.mouse.move(x + width / 2, y + height / 2);
await page.mouse.wheel(0, -1); await page.mouse.wheel(0, -1);
+25
View File
@@ -0,0 +1,25 @@
import { LoginResponseDto } from '@immich/sdk';
import { expect, test } from '@playwright/test';
import { utils } from 'src/utils';
test.describe('Websocket', () => {
let admin: LoginResponseDto;
test.beforeAll(async () => {
utils.initSdk();
await utils.resetDatabase();
admin = await utils.adminSetup();
});
test('connects using ipv4', async ({ page, context }) => {
await utils.setAuthCookies(context, admin.accessToken);
await page.goto('http://127.0.0.1:2283/');
await expect(page.locator('#sidebar')).toContainText('Server Online');
});
test('connects using ipv6', async ({ page, context }) => {
await utils.setAuthCookies(context, admin.accessToken, '[::1]');
await page.goto('http://[::1]:2283/');
await expect(page.locator('#sidebar')).toContainText('Server Online');
});
});
+1
View File
@@ -13,6 +13,7 @@ export default defineConfig({
include: ['src/{api,cli,immich-admin}/specs/*.e2e-spec.ts'], include: ['src/{api,cli,immich-admin}/specs/*.e2e-spec.ts'],
globalSetup, globalSetup,
testTimeout: 15_000, testTimeout: 15_000,
pool: 'threads',
poolOptions: { poolOptions: {
threads: { threads: {
singleThread: true, singleThread: true,
+10 -10
View File
@@ -1,12 +1,12 @@
ARG DEVICE=cpu ARG DEVICE=cpu
FROM python:3.11-bookworm@sha256:ef4b550f029a76b94f8e6cc6e4a8ed0e870fc6c5af1c4e9d77faaea50f41f6cd as builder-cpu FROM python:3.11-bookworm@sha256:d0131ce0ff4bdb5e9eae6bc86ebde891c207d5cac1f3f582b5de0f903cc68384 AS builder-cpu
FROM builder-cpu as builder-openvino FROM builder-cpu AS builder-openvino
FROM builder-cpu as builder-cuda FROM builder-cpu AS builder-cuda
FROM builder-cpu as builder-armnn FROM builder-cpu AS builder-armnn
ENV ARMNN_PATH=/opt/armnn ENV ARMNN_PATH=/opt/armnn
COPY ann /opt/ann COPY ann /opt/ann
@@ -15,7 +15,7 @@ RUN mkdir /opt/armnn && \
cd /opt/ann && \ cd /opt/ann && \
sh build.sh sh build.sh
FROM builder-${DEVICE} as builder FROM builder-${DEVICE} AS builder
ARG DEVICE ARG DEVICE
ENV PYTHONDONTWRITEBYTECODE=1 \ ENV PYTHONDONTWRITEBYTECODE=1 \
@@ -34,9 +34,9 @@ RUN python3 -m venv /opt/venv
COPY poetry.lock pyproject.toml ./ COPY poetry.lock pyproject.toml ./
RUN poetry install --sync --no-interaction --no-ansi --no-root --with ${DEVICE} --without dev RUN poetry install --sync --no-interaction --no-ansi --no-root --with ${DEVICE} --without dev
FROM python:3.11-slim-bookworm@sha256:ee317183d292ee6ed30e90bc325043ca3f7d2e8c79ac5019575490b5256ae244 as prod-cpu FROM python:3.11-slim-bookworm@sha256:a90e299af8a9cd6b59c4aaed2b024c78561476978244a1ab89742a4a5ac8c974 AS prod-cpu
FROM prod-cpu as prod-openvino FROM prod-cpu AS prod-openvino
COPY scripts/configure-apt.sh ./ COPY scripts/configure-apt.sh ./
RUN ./configure-apt.sh && \ RUN ./configure-apt.sh && \
@@ -44,13 +44,13 @@ RUN ./configure-apt.sh && \
apt-get install -t unstable --no-install-recommends -yqq intel-opencl-icd && \ apt-get install -t unstable --no-install-recommends -yqq intel-opencl-icd && \
rm configure-apt.sh rm configure-apt.sh
FROM nvidia/cuda:12.3.2-cudnn9-runtime-ubuntu22.04@sha256:fa44193567d1908f7ca1f3abf8623ce9c63bc8cba7bcfdb32702eb04d326f7a8 as prod-cuda FROM nvidia/cuda:12.3.2-cudnn9-runtime-ubuntu22.04@sha256:fa44193567d1908f7ca1f3abf8623ce9c63bc8cba7bcfdb32702eb04d326f7a8 AS prod-cuda
COPY --from=builder-cuda /usr/local/bin/python3 /usr/local/bin/python3 COPY --from=builder-cuda /usr/local/bin/python3 /usr/local/bin/python3
COPY --from=builder-cuda /usr/local/lib/python3.11 /usr/local/lib/python3.11 COPY --from=builder-cuda /usr/local/lib/python3.11 /usr/local/lib/python3.11
COPY --from=builder-cuda /usr/local/lib/libpython3.11.so /usr/local/lib/libpython3.11.so COPY --from=builder-cuda /usr/local/lib/libpython3.11.so /usr/local/lib/libpython3.11.so
FROM prod-cpu as prod-armnn FROM prod-cpu AS prod-armnn
ENV LD_LIBRARY_PATH=/opt/armnn ENV LD_LIBRARY_PATH=/opt/armnn
@@ -70,7 +70,7 @@ COPY --from=builder-armnn \
/opt/ann/build.sh \ /opt/ann/build.sh \
/opt/armnn/ /opt/armnn/
FROM prod-${DEVICE} as prod FROM prod-${DEVICE} AS prod
ARG DEVICE ARG DEVICE
RUN apt-get update && \ RUN apt-get update && \
+2 -2
View File
@@ -65,7 +65,7 @@ class Ann(metaclass=_Singleton):
self.input_shapes: dict[int, tuple[tuple[int], ...]] = {} self.input_shapes: dict[int, tuple[tuple[int], ...]] = {}
self.ann: int | None = None self.ann: int | None = None
self.new() self.new()
if self.tuning_file is not None: if self.tuning_file is not None:
# make sure tuning file exists (without clearing contents) # make sure tuning file exists (without clearing contents)
# once filled, the tuning file reduces the cost/time of the first # once filled, the tuning file reduces the cost/time of the first
@@ -105,7 +105,7 @@ class Ann(metaclass=_Singleton):
raise ValueError("model_path must be a file with extension .armnn, .tflite or .onnx") raise ValueError("model_path must be a file with extension .armnn, .tflite or .onnx")
if not exists(model_path): if not exists(model_path):
raise ValueError("model_path must point to an existing file!") raise ValueError("model_path must point to an existing file!")
save_cached_network = False save_cached_network = False
if cached_network_path is not None and not exists(cached_network_path): if cached_network_path is not None and not exists(cached_network_path):
save_cached_network = True save_cached_network = True
+1 -1
View File
@@ -6,7 +6,7 @@ from pathlib import Path
from socket import socket from socket import socket
from gunicorn.arbiter import Arbiter from gunicorn.arbiter import Arbiter
from pydantic import BaseModel, BaseSettings from pydantic.v1 import BaseModel, BaseSettings
from rich.console import Console from rich.console import Console
from rich.logging import RichHandler from rich.logging import RichHandler
from uvicorn import Server from uvicorn import Server
+1 -1
View File
@@ -15,7 +15,7 @@ from fastapi import Depends, FastAPI, File, Form, HTTPException
from fastapi.responses import ORJSONResponse from fastapi.responses import ORJSONResponse
from onnxruntime.capi.onnxruntime_pybind11_state import InvalidProtobuf, NoSuchFile from onnxruntime.capi.onnxruntime_pybind11_state import InvalidProtobuf, NoSuchFile
from PIL.Image import Image from PIL.Image import Image
from pydantic import ValidationError from pydantic.v1 import ValidationError
from starlette.formparsers import MultiPartParser from starlette.formparsers import MultiPartParser
from app.models import get_model_deps from app.models import get_model_deps
+32 -21
View File
@@ -2,53 +2,64 @@ from app.config import clean_name
from app.schemas import ModelSource from app.schemas import ModelSource
_OPENCLIP_MODELS = { _OPENCLIP_MODELS = {
"RN50__openai",
"RN50__yfcc15m",
"RN50__cc12m",
"RN101__openai", "RN101__openai",
"RN101__yfcc15m", "RN101__yfcc15m",
"RN50x4__openai", "RN50__cc12m",
"RN50__openai",
"RN50__yfcc15m",
"RN50x16__openai", "RN50x16__openai",
"RN50x4__openai",
"RN50x64__openai", "RN50x64__openai",
"ViT-B-32__openai", "ViT-B-16-SigLIP-256__webli",
"ViT-B-16-SigLIP-384__webli",
"ViT-B-16-SigLIP-512__webli",
"ViT-B-16-SigLIP-i18n-256__webli",
"ViT-B-16-SigLIP__webli",
"ViT-B-16-plus-240__laion400m_e31",
"ViT-B-16-plus-240__laion400m_e32",
"ViT-B-16__laion400m_e31",
"ViT-B-16__laion400m_e32",
"ViT-B-16__openai",
"ViT-B-32__laion2b-s34b-b79k",
"ViT-B-32__laion2b_e16", "ViT-B-32__laion2b_e16",
"ViT-B-32__laion400m_e31", "ViT-B-32__laion400m_e31",
"ViT-B-32__laion400m_e32", "ViT-B-32__laion400m_e32",
"ViT-B-32__laion2b-s34b-b79k", "ViT-B-32__openai",
"ViT-B-16__openai", "ViT-H-14-378-quickgelu__dfn5b",
"ViT-B-16__laion400m_e31", "ViT-H-14-quickgelu__dfn5b",
"ViT-B-16__laion400m_e32", "ViT-H-14__laion2b-s32b-b79k",
"ViT-B-16-plus-240__laion400m_e31", "ViT-L-14-336__openai",
"ViT-B-16-plus-240__laion400m_e32", "ViT-L-14-quickgelu__dfn2b",
"ViT-L-14__openai", "ViT-L-14__laion2b-s32b-b82k",
"ViT-L-14__laion400m_e31", "ViT-L-14__laion400m_e31",
"ViT-L-14__laion400m_e32", "ViT-L-14__laion400m_e32",
"ViT-L-14__laion2b-s32b-b82k", "ViT-L-14__openai",
"ViT-L-14-336__openai", "ViT-L-16-SigLIP-256__webli",
"ViT-H-14__laion2b-s32b-b79k", "ViT-L-16-SigLIP-384__webli",
"ViT-SO400M-14-SigLIP-384__webli",
"ViT-g-14__laion2b-s12b-b42k", "ViT-g-14__laion2b-s12b-b42k",
"ViT-L-14-quickgelu__dfn2b", "XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k",
"ViT-H-14-quickgelu__dfn5b",
"ViT-H-14-378-quickgelu__dfn5b",
"XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k", "XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k",
"nllb-clip-base-siglip__mrl",
"nllb-clip-base-siglip__v1", "nllb-clip-base-siglip__v1",
"nllb-clip-large-siglip__mrl",
"nllb-clip-large-siglip__v1", "nllb-clip-large-siglip__v1",
} }
_MCLIP_MODELS = { _MCLIP_MODELS = {
"LABSE-Vit-L-14", "LABSE-Vit-L-14",
"XLM-Roberta-Large-Vit-B-32",
"XLM-Roberta-Large-Vit-B-16Plus", "XLM-Roberta-Large-Vit-B-16Plus",
"XLM-Roberta-Large-Vit-B-32",
"XLM-Roberta-Large-Vit-L-14", "XLM-Roberta-Large-Vit-L-14",
} }
_INSIGHTFACE_MODELS = { _INSIGHTFACE_MODELS = {
"antelopev2", "antelopev2",
"buffalo_l",
"buffalo_m",
"buffalo_s", "buffalo_s",
"buffalo_m",
"buffalo_l",
} }
+1 -1
View File
@@ -3,7 +3,7 @@ from typing import Any, Literal, Protocol, TypedDict, TypeGuard, TypeVar
import numpy as np import numpy as np
import numpy.typing as npt import numpy.typing as npt
from pydantic import BaseModel from pydantic.v1 import BaseModel
class StrEnum(str, Enum): class StrEnum(str, Enum):
+1 -1
View File
@@ -1,4 +1,4 @@
FROM mambaorg/micromamba:bookworm-slim@sha256:94d6837f023c0fc0bb68782dd2a984ff7fe0e21ea7e533056c9b8ca060e31de2 as builder FROM mambaorg/micromamba:bookworm-slim@sha256:954e438daab0ad0835430ea84acb27dd47d1ea35a7120c3c9dd9d1a5578f4b13 AS builder
ENV TRANSFORMERS_CACHE=/cache \ ENV TRANSFORMERS_CACHE=/cache \
PYTHONDONTWRITEBYTECODE=1 \ PYTHONDONTWRITEBYTECODE=1 \
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -2,7 +2,7 @@ name: base
channels: channels:
- conda-forge - conda-forge
- nvidia - nvidia
- pytorch-nightly - pytorch
platforms: platforms:
- linux-64 - linux-64
dependencies: dependencies:
@@ -13,7 +13,7 @@ dependencies:
- orjson==3.* - orjson==3.*
- pip - pip
- python==3.11.* - python==3.11.*
- pytorch - pytorch>=2.3
- rich==13.* - rich==13.*
- safetensors==0.* - safetensors==0.*
- setuptools==68.* - setuptools==68.*
@@ -21,5 +21,5 @@ dependencies:
- transformers==4.* - transformers==4.*
- pip: - pip:
- multilingual-clip - multilingual-clip
- onnx-simplifier - onnxsim
category: main category: main
+12 -10
View File
@@ -1,3 +1,4 @@
import os
import tempfile import tempfile
import warnings import warnings
from pathlib import Path from pathlib import Path
@@ -8,7 +9,6 @@ from transformers import AutoTokenizer
from .openclip import OpenCLIPModelConfig from .openclip import OpenCLIPModelConfig
from .openclip import to_onnx as openclip_to_onnx from .openclip import to_onnx as openclip_to_onnx
from .optimize import optimize
from .util import get_model_path from .util import get_model_path
_MCLIP_TO_OPENCLIP = { _MCLIP_TO_OPENCLIP = {
@@ -23,18 +23,20 @@ def to_onnx(
model_name: str, model_name: str,
output_dir_visual: Path | str, output_dir_visual: Path | str,
output_dir_textual: Path | str, output_dir_textual: Path | str,
) -> None: ) -> tuple[Path, Path]:
textual_path = get_model_path(output_dir_textual) textual_path = get_model_path(output_dir_textual)
with tempfile.TemporaryDirectory() as tmpdir: with tempfile.TemporaryDirectory() as tmpdir:
model = MultilingualCLIP.from_pretrained(model_name, cache_dir=tmpdir) model = MultilingualCLIP.from_pretrained(model_name, cache_dir=os.environ.get("CACHE_DIR", tmpdir))
AutoTokenizer.from_pretrained(model_name).save_pretrained(output_dir_textual) AutoTokenizer.from_pretrained(model_name).save_pretrained(output_dir_textual)
model.eval()
for param in model.parameters(): for param in model.parameters():
param.requires_grad_(False) param.requires_grad_(False)
export_text_encoder(model, textual_path) export_text_encoder(model, textual_path)
openclip_to_onnx(_MCLIP_TO_OPENCLIP[model_name], output_dir_visual) visual_path, _ = openclip_to_onnx(_MCLIP_TO_OPENCLIP[model_name], output_dir_visual)
optimize(textual_path) assert visual_path is not None, "Visual model export failed"
return visual_path, textual_path
def export_text_encoder(model: MultilingualCLIP, output_path: Path | str) -> None: def export_text_encoder(model: MultilingualCLIP, output_path: Path | str) -> None:
@@ -58,10 +60,10 @@ def export_text_encoder(model: MultilingualCLIP, output_path: Path | str) -> Non
args, args,
output_path.as_posix(), output_path.as_posix(),
input_names=["input_ids", "attention_mask"], input_names=["input_ids", "attention_mask"],
output_names=["text_embedding"], output_names=["embedding"],
opset_version=17, opset_version=17,
dynamic_axes={ # dynamic_axes={
"input_ids": {0: "batch_size", 1: "sequence_length"}, # "input_ids": {0: "batch_size", 1: "sequence_length"},
"attention_mask": {0: "batch_size", 1: "sequence_length"}, # "attention_mask": {0: "batch_size", 1: "sequence_length"},
}, # },
) )
+12 -11
View File
@@ -1,3 +1,4 @@
import os
import tempfile import tempfile
import warnings import warnings
from dataclasses import dataclass, field from dataclasses import dataclass, field
@@ -7,7 +8,6 @@ import open_clip
import torch import torch
from transformers import AutoTokenizer from transformers import AutoTokenizer
from .optimize import optimize
from .util import get_model_path, save_config from .util import get_model_path, save_config
@@ -23,25 +23,28 @@ class OpenCLIPModelConfig:
if open_clip_cfg is None: if open_clip_cfg is None:
raise ValueError(f"Unknown model {self.name}") raise ValueError(f"Unknown model {self.name}")
self.image_size = open_clip_cfg["vision_cfg"]["image_size"] self.image_size = open_clip_cfg["vision_cfg"]["image_size"]
self.sequence_length = open_clip_cfg["text_cfg"]["context_length"] self.sequence_length = open_clip_cfg["text_cfg"].get("context_length", 77)
def to_onnx( def to_onnx(
model_cfg: OpenCLIPModelConfig, model_cfg: OpenCLIPModelConfig,
output_dir_visual: Path | str | None = None, output_dir_visual: Path | str | None = None,
output_dir_textual: Path | str | None = None, output_dir_textual: Path | str | None = None,
) -> None: ) -> tuple[Path | None, Path | None]:
visual_path = None
textual_path = None
with tempfile.TemporaryDirectory() as tmpdir: with tempfile.TemporaryDirectory() as tmpdir:
model = open_clip.create_model( model = open_clip.create_model(
model_cfg.name, model_cfg.name,
pretrained=model_cfg.pretrained, pretrained=model_cfg.pretrained,
jit=False, jit=False,
cache_dir=tmpdir, cache_dir=os.environ.get("CACHE_DIR", tmpdir),
require_pretrained=True, require_pretrained=True,
) )
text_vision_cfg = open_clip.get_model_config(model_cfg.name) text_vision_cfg = open_clip.get_model_config(model_cfg.name)
model.eval()
for param in model.parameters(): for param in model.parameters():
param.requires_grad_(False) param.requires_grad_(False)
@@ -53,8 +56,6 @@ def to_onnx(
save_config(text_vision_cfg, output_dir_visual.parent / "config.json") save_config(text_vision_cfg, output_dir_visual.parent / "config.json")
export_image_encoder(model, model_cfg, visual_path) export_image_encoder(model, model_cfg, visual_path)
optimize(visual_path)
if output_dir_textual is not None: if output_dir_textual is not None:
output_dir_textual = Path(output_dir_textual) output_dir_textual = Path(output_dir_textual)
textual_path = get_model_path(output_dir_textual) textual_path = get_model_path(output_dir_textual)
@@ -62,7 +63,7 @@ def to_onnx(
tokenizer_name = text_vision_cfg["text_cfg"].get("hf_tokenizer_name", "openai/clip-vit-base-patch32") tokenizer_name = text_vision_cfg["text_cfg"].get("hf_tokenizer_name", "openai/clip-vit-base-patch32")
AutoTokenizer.from_pretrained(tokenizer_name).save_pretrained(output_dir_textual) AutoTokenizer.from_pretrained(tokenizer_name).save_pretrained(output_dir_textual)
export_text_encoder(model, model_cfg, textual_path) export_text_encoder(model, model_cfg, textual_path)
optimize(textual_path) return visual_path, textual_path
def export_image_encoder(model: open_clip.CLIP, model_cfg: OpenCLIPModelConfig, output_path: Path | str) -> None: def export_image_encoder(model: open_clip.CLIP, model_cfg: OpenCLIPModelConfig, output_path: Path | str) -> None:
@@ -83,9 +84,9 @@ def export_image_encoder(model: open_clip.CLIP, model_cfg: OpenCLIPModelConfig,
args, args,
output_path.as_posix(), output_path.as_posix(),
input_names=["image"], input_names=["image"],
output_names=["image_embedding"], output_names=["embedding"],
opset_version=17, opset_version=17,
dynamic_axes={"image": {0: "batch_size"}}, # dynamic_axes={"image": {0: "batch_size"}},
) )
@@ -107,7 +108,7 @@ def export_text_encoder(model: open_clip.CLIP, model_cfg: OpenCLIPModelConfig, o
args, args,
output_path.as_posix(), output_path.as_posix(),
input_names=["text"], input_names=["text"],
output_names=["text_embedding"], output_names=["embedding"],
opset_version=17, opset_version=17,
dynamic_axes={"text": {0: "batch_size"}}, # dynamic_axes={"text": {0: "batch_size"}},
) )
+16 -5
View File
@@ -5,13 +5,26 @@ import onnxruntime as ort
import onnxsim import onnxsim
def save_onnx(model: onnx.ModelProto, output_path: Path | str) -> None:
try:
onnx.save(model, output_path)
except ValueError as e:
if "The proto size is larger than the 2 GB limit." in str(e):
onnx.save(model, output_path, save_as_external_data=True, size_threshold=1_000_000)
else:
raise e
def optimize_onnxsim(model_path: Path | str, output_path: Path | str) -> None: def optimize_onnxsim(model_path: Path | str, output_path: Path | str) -> None:
model_path = Path(model_path) model_path = Path(model_path)
output_path = Path(output_path) output_path = Path(output_path)
model = onnx.load(model_path.as_posix()) model = onnx.load(model_path.as_posix())
model, check = onnxsim.simplify(model, skip_shape_inference=True) model, check = onnxsim.simplify(model)
assert check, "Simplified ONNX model could not be validated" assert check, "Simplified ONNX model could not be validated"
onnx.save(model, output_path.as_posix()) for file in model_path.parent.iterdir():
if file.name.startswith("Constant") or "onnx" in file.name or file.suffix == ".weight":
file.unlink()
save_onnx(model, output_path)
def optimize_ort( def optimize_ort(
@@ -33,6 +46,4 @@ def optimize(model_path: Path | str) -> None:
model_path = Path(model_path) model_path = Path(model_path)
optimize_ort(model_path, model_path) optimize_ort(model_path, model_path)
# onnxsim serializes large models as a blob, which uses much more memory when loading the model at runtime optimize_onnxsim(model_path, model_path)
if not any(file.name.startswith("Constant") for file in model_path.parent.iterdir()):
optimize_onnxsim(model_path, model_path)
+76 -39
View File
@@ -3,74 +3,111 @@ import os
from pathlib import Path from pathlib import Path
from tempfile import TemporaryDirectory from tempfile import TemporaryDirectory
from huggingface_hub import create_repo, login, upload_folder import torch
from huggingface_hub import create_repo, upload_folder
from models import mclip, openclip from models import mclip, openclip
from models.optimize import optimize
from rich.progress import Progress from rich.progress import Progress
models = [ models = [
"RN50::openai", "M-CLIP/LABSE-Vit-L-14",
"RN50::yfcc15m", "M-CLIP/XLM-Roberta-Large-Vit-B-16Plus",
"RN50::cc12m", "M-CLIP/XLM-Roberta-Large-Vit-B-32",
"M-CLIP/XLM-Roberta-Large-Vit-L-14",
"RN101::openai", "RN101::openai",
"RN101::yfcc15m", "RN101::yfcc15m",
"RN50x4::openai", "RN50::cc12m",
"RN50::openai",
"RN50::yfcc15m",
"RN50x16::openai", "RN50x16::openai",
"RN50x4::openai",
"RN50x64::openai", "RN50x64::openai",
"ViT-B-32::openai", "ViT-B-16-SigLIP-256::webli",
"ViT-B-16-SigLIP-384::webli",
"ViT-B-16-SigLIP-512::webli",
"ViT-B-16-SigLIP-i18n-256::webli",
"ViT-B-16-SigLIP::webli",
"ViT-B-16-plus-240::laion400m_e31",
"ViT-B-16-plus-240::laion400m_e32",
"ViT-B-16::laion400m_e31",
"ViT-B-16::laion400m_e32",
"ViT-B-16::openai",
"ViT-B-32::laion2b-s34b-b79k",
"ViT-B-32::laion2b_e16", "ViT-B-32::laion2b_e16",
"ViT-B-32::laion400m_e31", "ViT-B-32::laion400m_e31",
"ViT-B-32::laion400m_e32", "ViT-B-32::laion400m_e32",
"ViT-B-32::laion2b-s34b-b79k", "ViT-B-32::openai",
"ViT-B-16::openai", "ViT-H-14-378-quickgelu::dfn5b",
"ViT-B-16::laion400m_e31", "ViT-H-14-quickgelu::dfn5b",
"ViT-B-16::laion400m_e32", "ViT-H-14::laion2b-s32b-b79k",
"ViT-B-16-plus-240::laion400m_e31", "ViT-L-14-336::openai",
"ViT-B-16-plus-240::laion400m_e32", "ViT-L-14-quickgelu::dfn2b",
"ViT-L-14::openai", "ViT-L-14::laion2b-s32b-b82k",
"ViT-L-14::laion400m_e31", "ViT-L-14::laion400m_e31",
"ViT-L-14::laion400m_e32", "ViT-L-14::laion400m_e32",
"ViT-L-14::laion2b-s32b-b82k", "ViT-L-14::openai",
"ViT-L-14-336::openai", "ViT-L-16-SigLIP-256::webli",
"ViT-H-14::laion2b-s32b-b79k", "ViT-L-16-SigLIP-384::webli",
"ViT-SO400M-14-SigLIP-384::webli",
"ViT-g-14::laion2b-s12b-b42k", "ViT-g-14::laion2b-s12b-b42k",
"M-CLIP/LABSE-Vit-L-14", "nllb-clip-base-siglip::mrl",
"M-CLIP/XLM-Roberta-Large-Vit-B-32", "nllb-clip-base-siglip::v1",
"M-CLIP/XLM-Roberta-Large-Vit-B-16Plus", "nllb-clip-large-siglip::mrl",
"M-CLIP/XLM-Roberta-Large-Vit-L-14", "nllb-clip-large-siglip::v1",
"xlm-roberta-base-ViT-B-32::laion5b_s13b_b90k",
"xlm-roberta-large-ViT-H-14::frozen_laion5b_s13b_b90k",
] ]
login(token=os.environ["HF_AUTH_TOKEN"]) # glob to delete old UUID blobs when reuploading models
uuid_char = "[a-fA-F0-9]"
uuid_glob = uuid_char * 8 + "-" + uuid_char * 4 + "-" + uuid_char * 4 + "-" + uuid_char * 4 + "-" + uuid_char * 12
# remote repo files to be deleted before uploading
# deletion is in the same commit as the upload, so it's atomic
delete_patterns = ["**/*onnx*", "**/Constant*", "**/*.weight", "**/*.bias", f"**/{uuid_glob}"]
with Progress() as progress: with Progress() as progress:
task1 = progress.add_task("[green]Exporting models...", total=len(models)) task = progress.add_task("[green]Exporting models...", total=len(models))
task2 = progress.add_task("[yellow]Uploading models...", total=len(models)) token = os.environ.get("HF_AUTH_TOKEN")
torch.backends.mha.set_fastpath_enabled(False)
with TemporaryDirectory() as tmp: with TemporaryDirectory() as tmp:
tmpdir = Path(tmp) tmpdir = Path(tmp)
for model in models: for model in models:
model_name = model.split("/")[-1].replace("::", "__") model_name = model.split("/")[-1].replace("::", "__")
hf_model_name = model_name.replace("xlm-roberta-large", "XLM-Roberta-Large")
hf_model_name = model_name.replace("xlm-roberta-base", "XLM-Roberta-Base")
config_path = tmpdir / model_name / "config.json" config_path = tmpdir / model_name / "config.json"
def upload() -> None:
progress.update(task2, description=f"[yellow]Uploading {model_name}")
repo_id = f"immich-app/{model_name}"
create_repo(repo_id, exist_ok=True)
upload_folder(repo_id=repo_id, folder_path=tmpdir / model_name)
progress.update(task2, advance=1)
def export() -> None: def export() -> None:
progress.update(task1, description=f"[green]Exporting {model_name}") progress.update(task, description=f"[green]Exporting {hf_model_name}")
visual_dir = tmpdir / model_name / "visual" visual_dir = tmpdir / hf_model_name / "visual"
textual_dir = tmpdir / model_name / "textual" textual_dir = tmpdir / hf_model_name / "textual"
if model.startswith("M-CLIP"): if model.startswith("M-CLIP"):
mclip.to_onnx(model, visual_dir, textual_dir) visual_path, textual_path = mclip.to_onnx(model, visual_dir, textual_dir)
else: else:
name, _, pretrained = model_name.partition("__") name, _, pretrained = model_name.partition("__")
openclip.to_onnx(openclip.OpenCLIPModelConfig(name, pretrained), visual_dir, textual_dir) config = openclip.OpenCLIPModelConfig(name, pretrained)
visual_path, textual_path = openclip.to_onnx(config, visual_dir, textual_dir)
progress.update(task, description=f"[green]Optimizing {hf_model_name} (visual)")
optimize(visual_path)
progress.update(task, description=f"[green]Optimizing {hf_model_name} (textual)")
optimize(textual_path)
progress.update(task1, advance=1)
gc.collect() gc.collect()
def upload() -> None:
progress.update(task, description=f"[yellow]Uploading {hf_model_name}")
repo_id = f"immich-app/{hf_model_name}"
create_repo(repo_id, exist_ok=True)
upload_folder(
repo_id=repo_id,
folder_path=tmpdir / hf_model_name,
delete_patterns=delete_patterns,
token=token,
)
export() export()
upload() if token is not None:
upload()
progress.update(task, advance=1)
+207 -120
View File
@@ -40,6 +40,17 @@ develop = ["imgaug (>=0.4.0)", "pytest"]
imgaug = ["imgaug (>=0.4.0)"] imgaug = ["imgaug (>=0.4.0)"]
tests = ["pytest"] tests = ["pytest"]
[[package]]
name = "annotated-types"
version = "0.7.0"
description = "Reusable constraint types to use with typing.Annotated"
optional = false
python-versions = ">=3.8"
files = [
{file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"},
{file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"},
]
[[package]] [[package]]
name = "anyio" name = "anyio"
version = "4.2.0" version = "4.2.0"
@@ -1236,13 +1247,13 @@ socks = ["socksio (==1.*)"]
[[package]] [[package]]
name = "huggingface-hub" name = "huggingface-hub"
version = "0.24.0" version = "0.24.5"
description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub"
optional = false optional = false
python-versions = ">=3.8.0" python-versions = ">=3.8.0"
files = [ files = [
{file = "huggingface_hub-0.24.0-py3-none-any.whl", hash = "sha256:7ad92edefb93d8145c061f6df8d99df2ff85f8379ba5fac8a95aca0642afa5d7"}, {file = "huggingface_hub-0.24.5-py3-none-any.whl", hash = "sha256:d93fb63b1f1a919a22ce91a14518974e81fc4610bf344dfe7572343ce8d3aced"},
{file = "huggingface_hub-0.24.0.tar.gz", hash = "sha256:6c7092736b577d89d57b3cdfea026f1b0dc2234ae783fa0d59caf1bf7d52dfa7"}, {file = "huggingface_hub-0.24.5.tar.gz", hash = "sha256:7b45d6744dd53ce9cbf9880957de00e9d10a9ae837f1c9b7255fc8fa4e8264f3"},
] ]
[package.dependencies] [package.dependencies]
@@ -1530,13 +1541,13 @@ test = ["pytest (>=7.4)", "pytest-cov (>=4.1)"]
[[package]] [[package]]
name = "locust" name = "locust"
version = "2.29.1" version = "2.31.1"
description = "Developer-friendly load testing framework" description = "Developer-friendly load testing framework"
optional = false optional = false
python-versions = ">=3.9" python-versions = ">=3.9"
files = [ files = [
{file = "locust-2.29.1-py3-none-any.whl", hash = "sha256:8b15daab44cdf50eef1860a32bb30969423e3795247115e5a37446da3240c6d6"}, {file = "locust-2.31.1-py3-none-any.whl", hash = "sha256:20756509939004e95c622ac3042886edab38b736f00534cc03ce2774064e7f71"},
{file = "locust-2.29.1.tar.gz", hash = "sha256:2e0628a59e2689a50cb4735a9a43709e30f2da7ed276c15d877c5325507f44b1"}, {file = "locust-2.31.1.tar.gz", hash = "sha256:d26b7333cdef80645f3978d8ff9aabab4d53e41ed82cc8490212aa68e8498fdd"},
] ]
[package.dependencies] [package.dependencies]
@@ -1548,14 +1559,14 @@ gevent = ">=22.10.2"
geventhttpclient = ">=2.3.1" geventhttpclient = ">=2.3.1"
msgpack = ">=1.0.0" msgpack = ">=1.0.0"
psutil = ">=5.9.1" psutil = ">=5.9.1"
pywin32 = {version = "*", markers = "platform_system == \"Windows\""} pywin32 = {version = "*", markers = "sys_platform == \"win32\""}
pyzmq = ">=25.0.0" pyzmq = ">=25.0.0"
requests = [ requests = [
{version = ">=2.32.2", markers = "python_version > \"3.11\""}, {version = ">=2.32.2", markers = "python_full_version > \"3.11.0\""},
{version = ">=2.26.0", markers = "python_version <= \"3.11\""}, {version = ">=2.26.0", markers = "python_full_version <= \"3.11.0\""},
] ]
tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
typing-extensions = {version = ">=4.6.0", markers = "python_version < \"3.11\""} typing_extensions = {version = ">=4.6.0", markers = "python_version < \"3.11\""}
Werkzeug = ">=2.0.0" Werkzeug = ">=2.0.0"
[[package]] [[package]]
@@ -1794,38 +1805,38 @@ files = [
[[package]] [[package]]
name = "mypy" name = "mypy"
version = "1.11.0" version = "1.11.1"
description = "Optional static typing for Python" description = "Optional static typing for Python"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
{file = "mypy-1.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3824187c99b893f90c845bab405a585d1ced4ff55421fdf5c84cb7710995229"}, {file = "mypy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a32fc80b63de4b5b3e65f4be82b4cfa362a46702672aa6a0f443b4689af7008c"},
{file = "mypy-1.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:96f8dbc2c85046c81bcddc246232d500ad729cb720da4e20fce3b542cab91287"}, {file = "mypy-1.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c1952f5ea8a5a959b05ed5f16452fddadbaae48b5d39235ab4c3fc444d5fd411"},
{file = "mypy-1.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a5d8d8dd8613a3e2be3eae829ee891b6b2de6302f24766ff06cb2875f5be9c6"}, {file = "mypy-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1e30dc3bfa4e157e53c1d17a0dad20f89dc433393e7702b813c10e200843b03"},
{file = "mypy-1.11.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:72596a79bbfb195fd41405cffa18210af3811beb91ff946dbcb7368240eed6be"}, {file = "mypy-1.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c63350af88f43a66d3dfeeeb8d77af34a4f07d760b9eb3a8697f0386c7590b4"},
{file = "mypy-1.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:35ce88b8ed3a759634cb4eb646d002c4cef0a38f20565ee82b5023558eb90c00"}, {file = "mypy-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:a831671bad47186603872a3abc19634f3011d7f83b083762c942442d51c58d58"},
{file = "mypy-1.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:98790025861cb2c3db8c2f5ad10fc8c336ed2a55f4daf1b8b3f877826b6ff2eb"}, {file = "mypy-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7b6343d338390bb946d449677726edf60102a1c96079b4f002dedff375953fc5"},
{file = "mypy-1.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:25bcfa75b9b5a5f8d67147a54ea97ed63a653995a82798221cca2a315c0238c1"}, {file = "mypy-1.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4fe9f4e5e521b458d8feb52547f4bade7ef8c93238dfb5bbc790d9ff2d770ca"},
{file = "mypy-1.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bea2a0e71c2a375c9fa0ede3d98324214d67b3cbbfcbd55ac8f750f85a414e3"}, {file = "mypy-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:886c9dbecc87b9516eff294541bf7f3655722bf22bb898ee06985cd7269898de"},
{file = "mypy-1.11.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d2b3d36baac48e40e3064d2901f2fbd2a2d6880ec6ce6358825c85031d7c0d4d"}, {file = "mypy-1.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fca4a60e1dd9fd0193ae0067eaeeb962f2d79e0d9f0f66223a0682f26ffcc809"},
{file = "mypy-1.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:d8e2e43977f0e09f149ea69fd0556623919f816764e26d74da0c8a7b48f3e18a"}, {file = "mypy-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:0bd53faf56de9643336aeea1c925012837432b5faf1701ccca7fde70166ccf72"},
{file = "mypy-1.11.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1d44c1e44a8be986b54b09f15f2c1a66368eb43861b4e82573026e04c48a9e20"}, {file = "mypy-1.11.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f39918a50f74dc5969807dcfaecafa804fa7f90c9d60506835036cc1bc891dc8"},
{file = "mypy-1.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cea3d0fb69637944dd321f41bc896e11d0fb0b0aa531d887a6da70f6e7473aba"}, {file = "mypy-1.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0bc71d1fb27a428139dd78621953effe0d208aed9857cb08d002280b0422003a"},
{file = "mypy-1.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a83ec98ae12d51c252be61521aa5731f5512231d0b738b4cb2498344f0b840cd"}, {file = "mypy-1.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b868d3bcff720dd7217c383474008ddabaf048fad8d78ed948bb4b624870a417"},
{file = "mypy-1.11.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c7b73a856522417beb78e0fb6d33ef89474e7a622db2653bc1285af36e2e3e3d"}, {file = "mypy-1.11.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a707ec1527ffcdd1c784d0924bf5cb15cd7f22683b919668a04d2b9c34549d2e"},
{file = "mypy-1.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:f2268d9fcd9686b61ab64f077be7ffbc6fbcdfb4103e5dd0cc5eaab53a8886c2"}, {file = "mypy-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:64f4a90e3ea07f590c5bcf9029035cf0efeae5ba8be511a8caada1a4893f5525"},
{file = "mypy-1.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:940bfff7283c267ae6522ef926a7887305945f716a7704d3344d6d07f02df850"}, {file = "mypy-1.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:749fd3213916f1751fff995fccf20c6195cae941dc968f3aaadf9bb4e430e5a2"},
{file = "mypy-1.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:14f9294528b5f5cf96c721f231c9f5b2733164e02c1c018ed1a0eff8a18005ac"}, {file = "mypy-1.11.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b639dce63a0b19085213ec5fdd8cffd1d81988f47a2dec7100e93564f3e8fb3b"},
{file = "mypy-1.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7b54c27783991399046837df5c7c9d325d921394757d09dbcbf96aee4649fe9"}, {file = "mypy-1.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c956b49c5d865394d62941b109728c5c596a415e9c5b2be663dd26a1ff07bc0"},
{file = "mypy-1.11.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:65f190a6349dec29c8d1a1cd4aa71284177aee5949e0502e6379b42873eddbe7"}, {file = "mypy-1.11.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45df906e8b6804ef4b666af29a87ad9f5921aad091c79cc38e12198e220beabd"},
{file = "mypy-1.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:dbe286303241fea8c2ea5466f6e0e6a046a135a7e7609167b07fd4e7baf151bf"}, {file = "mypy-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:d44be7551689d9d47b7abc27c71257adfdb53f03880841a5db15ddb22dc63edb"},
{file = "mypy-1.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:104e9c1620c2675420abd1f6c44bab7dd33cc85aea751c985006e83dcd001095"}, {file = "mypy-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2684d3f693073ab89d76da8e3921883019ea8a3ec20fa5d8ecca6a2db4c54bbe"},
{file = "mypy-1.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f006e955718ecd8d159cee9932b64fba8f86ee6f7728ca3ac66c3a54b0062abe"}, {file = "mypy-1.11.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:79c07eb282cb457473add5052b63925e5cc97dfab9812ee65a7c7ab5e3cb551c"},
{file = "mypy-1.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:becc9111ca572b04e7e77131bc708480cc88a911adf3d0239f974c034b78085c"}, {file = "mypy-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11965c2f571ded6239977b14deebd3f4c3abd9a92398712d6da3a772974fad69"},
{file = "mypy-1.11.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6801319fe76c3f3a3833f2b5af7bd2c17bb93c00026a2a1b924e6762f5b19e13"}, {file = "mypy-1.11.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a2b43895a0f8154df6519706d9bca8280cda52d3d9d1514b2d9c3e26792a0b74"},
{file = "mypy-1.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:c1a184c64521dc549324ec6ef7cbaa6b351912be9cb5edb803c2808a0d7e85ac"}, {file = "mypy-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:1a81cf05975fd61aec5ae16501a091cfb9f605dc3e3c878c0da32f250b74760b"},
{file = "mypy-1.11.0-py3-none-any.whl", hash = "sha256:56913ec8c7638b0091ef4da6fcc9136896914a9d60d54670a75880c3e5b99ace"}, {file = "mypy-1.11.1-py3-none-any.whl", hash = "sha256:0624bdb940255d2dd24e829d99a13cfeb72e4e9031f9492148f410ed30bcab54"},
{file = "mypy-1.11.0.tar.gz", hash = "sha256:93743608c7348772fdc717af4aeee1997293a1ad04bc0ea6efa15bf65385c538"}, {file = "mypy-1.11.1.tar.gz", hash = "sha256:f404a0b069709f18bbdb702eb3dcfe51910602995de00bd39cea3050b5772d08"},
] ]
[package.dependencies] [package.dependencies]
@@ -2117,6 +2128,8 @@ files = [
{file = "orjson-3.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:960db0e31c4e52fa0fc3ecbaea5b2d3b58f379e32a95ae6b0ebeaa25b93dfd34"}, {file = "orjson-3.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:960db0e31c4e52fa0fc3ecbaea5b2d3b58f379e32a95ae6b0ebeaa25b93dfd34"},
{file = "orjson-3.10.6-cp312-none-win32.whl", hash = "sha256:a6ea7afb5b30b2317e0bee03c8d34c8181bc5a36f2afd4d0952f378972c4efd5"}, {file = "orjson-3.10.6-cp312-none-win32.whl", hash = "sha256:a6ea7afb5b30b2317e0bee03c8d34c8181bc5a36f2afd4d0952f378972c4efd5"},
{file = "orjson-3.10.6-cp312-none-win_amd64.whl", hash = "sha256:874ce88264b7e655dde4aeaacdc8fd772a7962faadfb41abe63e2a4861abc3dc"}, {file = "orjson-3.10.6-cp312-none-win_amd64.whl", hash = "sha256:874ce88264b7e655dde4aeaacdc8fd772a7962faadfb41abe63e2a4861abc3dc"},
{file = "orjson-3.10.6-cp313-none-win32.whl", hash = "sha256:efdf2c5cde290ae6b83095f03119bdc00303d7a03b42b16c54517baa3c4ca3d0"},
{file = "orjson-3.10.6-cp313-none-win_amd64.whl", hash = "sha256:8e190fe7888e2e4392f52cafb9626113ba135ef53aacc65cd13109eb9746c43e"},
{file = "orjson-3.10.6-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:66680eae4c4e7fc193d91cfc1353ad6d01b4801ae9b5314f17e11ba55e934183"}, {file = "orjson-3.10.6-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:66680eae4c4e7fc193d91cfc1353ad6d01b4801ae9b5314f17e11ba55e934183"},
{file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:caff75b425db5ef8e8f23af93c80f072f97b4fb3afd4af44482905c9f588da28"}, {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:caff75b425db5ef8e8f23af93c80f072f97b4fb3afd4af44482905c9f588da28"},
{file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3722fddb821b6036fd2a3c814f6bd9b57a89dc6337b9924ecd614ebce3271394"}, {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3722fddb821b6036fd2a3c814f6bd9b57a89dc6337b9924ecd614ebce3271394"},
@@ -2367,62 +2380,126 @@ files = [
[[package]] [[package]]
name = "pydantic" name = "pydantic"
version = "1.10.17" version = "2.8.2"
description = "Data validation and settings management using python type hints" description = "Data validation using Python type hints"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.8"
files = [ files = [
{file = "pydantic-1.10.17-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0fa51175313cc30097660b10eec8ca55ed08bfa07acbfe02f7a42f6c242e9a4b"}, {file = "pydantic-2.8.2-py3-none-any.whl", hash = "sha256:73ee9fddd406dc318b885c7a2eab8a6472b68b8fb5ba8150949fc3db939f23c8"},
{file = "pydantic-1.10.17-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7e8988bb16988890c985bd2093df9dd731bfb9d5e0860db054c23034fab8f7a"}, {file = "pydantic-2.8.2.tar.gz", hash = "sha256:6f62c13d067b0755ad1c21a34bdd06c0c12625a22b0fc09c6b149816604f7c2a"},
{file = "pydantic-1.10.17-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:371dcf1831f87c9e217e2b6a0c66842879a14873114ebb9d0861ab22e3b5bb1e"},
{file = "pydantic-1.10.17-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4866a1579c0c3ca2c40575398a24d805d4db6cb353ee74df75ddeee3c657f9a7"},
{file = "pydantic-1.10.17-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:543da3c6914795b37785703ffc74ba4d660418620cc273490d42c53949eeeca6"},
{file = "pydantic-1.10.17-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7623b59876f49e61c2e283551cc3647616d2fbdc0b4d36d3d638aae8547ea681"},
{file = "pydantic-1.10.17-cp310-cp310-win_amd64.whl", hash = "sha256:409b2b36d7d7d19cd8310b97a4ce6b1755ef8bd45b9a2ec5ec2b124db0a0d8f3"},
{file = "pydantic-1.10.17-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fa43f362b46741df8f201bf3e7dff3569fa92069bcc7b4a740dea3602e27ab7a"},
{file = "pydantic-1.10.17-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2a72d2a5ff86a3075ed81ca031eac86923d44bc5d42e719d585a8eb547bf0c9b"},
{file = "pydantic-1.10.17-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4ad32aed3bf5eea5ca5decc3d1bbc3d0ec5d4fbcd72a03cdad849458decbc63"},
{file = "pydantic-1.10.17-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aeb4e741782e236ee7dc1fb11ad94dc56aabaf02d21df0e79e0c21fe07c95741"},
{file = "pydantic-1.10.17-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d2f89a719411cb234105735a520b7c077158a81e0fe1cb05a79c01fc5eb59d3c"},
{file = "pydantic-1.10.17-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db3b48d9283d80a314f7a682f7acae8422386de659fffaba454b77a083c3937d"},
{file = "pydantic-1.10.17-cp311-cp311-win_amd64.whl", hash = "sha256:9c803a5113cfab7bbb912f75faa4fc1e4acff43e452c82560349fff64f852e1b"},
{file = "pydantic-1.10.17-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:820ae12a390c9cbb26bb44913c87fa2ff431a029a785642c1ff11fed0a095fcb"},
{file = "pydantic-1.10.17-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c1e51d1af306641b7d1574d6d3307eaa10a4991542ca324f0feb134fee259815"},
{file = "pydantic-1.10.17-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e53fb834aae96e7b0dadd6e92c66e7dd9cdf08965340ed04c16813102a47fab"},
{file = "pydantic-1.10.17-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e2495309b1266e81d259a570dd199916ff34f7f51f1b549a0d37a6d9b17b4dc"},
{file = "pydantic-1.10.17-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:098ad8de840c92ea586bf8efd9e2e90c6339d33ab5c1cfbb85be66e4ecf8213f"},
{file = "pydantic-1.10.17-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:525bbef620dac93c430d5d6bdbc91bdb5521698d434adf4434a7ef6ffd5c4b7f"},
{file = "pydantic-1.10.17-cp312-cp312-win_amd64.whl", hash = "sha256:6654028d1144df451e1da69a670083c27117d493f16cf83da81e1e50edce72ad"},
{file = "pydantic-1.10.17-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c87cedb4680d1614f1d59d13fea353faf3afd41ba5c906a266f3f2e8c245d655"},
{file = "pydantic-1.10.17-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11289fa895bcbc8f18704efa1d8020bb9a86314da435348f59745473eb042e6b"},
{file = "pydantic-1.10.17-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94833612d6fd18b57c359a127cbfd932d9150c1b72fea7c86ab58c2a77edd7c7"},
{file = "pydantic-1.10.17-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d4ecb515fa7cb0e46e163ecd9d52f9147ba57bc3633dca0e586cdb7a232db9e3"},
{file = "pydantic-1.10.17-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7017971ffa7fd7808146880aa41b266e06c1e6e12261768a28b8b41ba55c8076"},
{file = "pydantic-1.10.17-cp37-cp37m-win_amd64.whl", hash = "sha256:e840e6b2026920fc3f250ea8ebfdedf6ea7a25b77bf04c6576178e681942ae0f"},
{file = "pydantic-1.10.17-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bfbb18b616abc4df70591b8c1ff1b3eabd234ddcddb86b7cac82657ab9017e33"},
{file = "pydantic-1.10.17-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ebb249096d873593e014535ab07145498957091aa6ae92759a32d40cb9998e2e"},
{file = "pydantic-1.10.17-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8c209af63ccd7b22fba94b9024e8b7fd07feffee0001efae50dd99316b27768"},
{file = "pydantic-1.10.17-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d4b40c9e13a0b61583e5599e7950490c700297b4a375b55b2b592774332798b7"},
{file = "pydantic-1.10.17-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c31d281c7485223caf6474fc2b7cf21456289dbaa31401844069b77160cab9c7"},
{file = "pydantic-1.10.17-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ae5184e99a060a5c80010a2d53c99aee76a3b0ad683d493e5f0620b5d86eeb75"},
{file = "pydantic-1.10.17-cp38-cp38-win_amd64.whl", hash = "sha256:ad1e33dc6b9787a6f0f3fd132859aa75626528b49cc1f9e429cdacb2608ad5f0"},
{file = "pydantic-1.10.17-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7e17c0ee7192e54a10943f245dc79e36d9fe282418ea05b886e1c666063a7b54"},
{file = "pydantic-1.10.17-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cafb9c938f61d1b182dfc7d44a7021326547b7b9cf695db5b68ec7b590214773"},
{file = "pydantic-1.10.17-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95ef534e3c22e5abbdbdd6f66b6ea9dac3ca3e34c5c632894f8625d13d084cbe"},
{file = "pydantic-1.10.17-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62d96b8799ae3d782df7ec9615cb59fc32c32e1ed6afa1b231b0595f6516e8ab"},
{file = "pydantic-1.10.17-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ab2f976336808fd5d539fdc26eb51f9aafc1f4b638e212ef6b6f05e753c8011d"},
{file = "pydantic-1.10.17-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8ad363330557beac73159acfbeed220d5f1bfcd6b930302a987a375e02f74fd"},
{file = "pydantic-1.10.17-cp39-cp39-win_amd64.whl", hash = "sha256:48db882e48575ce4b39659558b2f9f37c25b8d348e37a2b4e32971dd5a7d6227"},
{file = "pydantic-1.10.17-py3-none-any.whl", hash = "sha256:e41b5b973e5c64f674b3b4720286ded184dcc26a691dd55f34391c62c6934688"},
{file = "pydantic-1.10.17.tar.gz", hash = "sha256:f434160fb14b353caf634149baaf847206406471ba70e64657c1e8330277a991"},
] ]
[package.dependencies] [package.dependencies]
typing-extensions = ">=4.2.0" annotated-types = ">=0.4.0"
pydantic-core = "2.20.1"
typing-extensions = [
{version = ">=4.12.2", markers = "python_version >= \"3.13\""},
{version = ">=4.6.1", markers = "python_version < \"3.13\""},
]
[package.extras] [package.extras]
dotenv = ["python-dotenv (>=0.10.4)"] email = ["email-validator (>=2.0.0)"]
email = ["email-validator (>=1.0.3)"]
[[package]]
name = "pydantic-core"
version = "2.20.1"
description = "Core functionality for Pydantic validation and serialization"
optional = false
python-versions = ">=3.8"
files = [
{file = "pydantic_core-2.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3acae97ffd19bf091c72df4d726d552c473f3576409b2a7ca36b2f535ffff4a3"},
{file = "pydantic_core-2.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41f4c96227a67a013e7de5ff8f20fb496ce573893b7f4f2707d065907bffdbd6"},
{file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f239eb799a2081495ea659d8d4a43a8f42cd1fe9ff2e7e436295c38a10c286a"},
{file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53e431da3fc53360db73eedf6f7124d1076e1b4ee4276b36fb25514544ceb4a3"},
{file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1f62b2413c3a0e846c3b838b2ecd6c7a19ec6793b2a522745b0869e37ab5bc1"},
{file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d41e6daee2813ecceea8eda38062d69e280b39df793f5a942fa515b8ed67953"},
{file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d482efec8b7dc6bfaedc0f166b2ce349df0011f5d2f1f25537ced4cfc34fd98"},
{file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e93e1a4b4b33daed65d781a57a522ff153dcf748dee70b40c7258c5861e1768a"},
{file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7c4ea22b6739b162c9ecaaa41d718dfad48a244909fe7ef4b54c0b530effc5a"},
{file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4f2790949cf385d985a31984907fecb3896999329103df4e4983a4a41e13e840"},
{file = "pydantic_core-2.20.1-cp310-none-win32.whl", hash = "sha256:5e999ba8dd90e93d57410c5e67ebb67ffcaadcea0ad973240fdfd3a135506250"},
{file = "pydantic_core-2.20.1-cp310-none-win_amd64.whl", hash = "sha256:512ecfbefef6dac7bc5eaaf46177b2de58cdf7acac8793fe033b24ece0b9566c"},
{file = "pydantic_core-2.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d2a8fa9d6d6f891f3deec72f5cc668e6f66b188ab14bb1ab52422fe8e644f312"},
{file = "pydantic_core-2.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:175873691124f3d0da55aeea1d90660a6ea7a3cfea137c38afa0a5ffabe37b88"},
{file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37eee5b638f0e0dcd18d21f59b679686bbd18917b87db0193ae36f9c23c355fc"},
{file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25e9185e2d06c16ee438ed39bf62935ec436474a6ac4f9358524220f1b236e43"},
{file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:150906b40ff188a3260cbee25380e7494ee85048584998c1e66df0c7a11c17a6"},
{file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ad4aeb3e9a97286573c03df758fc7627aecdd02f1da04516a86dc159bf70121"},
{file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3f3ed29cd9f978c604708511a1f9c2fdcb6c38b9aae36a51905b8811ee5cbf1"},
{file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0dae11d8f5ded51699c74d9548dcc5938e0804cc8298ec0aa0da95c21fff57b"},
{file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:faa6b09ee09433b87992fb5a2859efd1c264ddc37280d2dd5db502126d0e7f27"},
{file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9dc1b507c12eb0481d071f3c1808f0529ad41dc415d0ca11f7ebfc666e66a18b"},
{file = "pydantic_core-2.20.1-cp311-none-win32.whl", hash = "sha256:fa2fddcb7107e0d1808086ca306dcade7df60a13a6c347a7acf1ec139aa6789a"},
{file = "pydantic_core-2.20.1-cp311-none-win_amd64.whl", hash = "sha256:40a783fb7ee353c50bd3853e626f15677ea527ae556429453685ae32280c19c2"},
{file = "pydantic_core-2.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:595ba5be69b35777474fa07f80fc260ea71255656191adb22a8c53aba4479231"},
{file = "pydantic_core-2.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a4f55095ad087474999ee28d3398bae183a66be4823f753cd7d67dd0153427c9"},
{file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9aa05d09ecf4c75157197f27cdc9cfaeb7c5f15021c6373932bf3e124af029f"},
{file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e97fdf088d4b31ff4ba35db26d9cc472ac7ef4a2ff2badeabf8d727b3377fc52"},
{file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc633a9fe1eb87e250b5c57d389cf28998e4292336926b0b6cdaee353f89a237"},
{file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d573faf8eb7e6b1cbbcb4f5b247c60ca8be39fe2c674495df0eb4318303137fe"},
{file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26dc97754b57d2fd00ac2b24dfa341abffc380b823211994c4efac7f13b9e90e"},
{file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33499e85e739a4b60c9dac710c20a08dc73cb3240c9a0e22325e671b27b70d24"},
{file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bebb4d6715c814597f85297c332297c6ce81e29436125ca59d1159b07f423eb1"},
{file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:516d9227919612425c8ef1c9b869bbbee249bc91912c8aaffb66116c0b447ebd"},
{file = "pydantic_core-2.20.1-cp312-none-win32.whl", hash = "sha256:469f29f9093c9d834432034d33f5fe45699e664f12a13bf38c04967ce233d688"},
{file = "pydantic_core-2.20.1-cp312-none-win_amd64.whl", hash = "sha256:035ede2e16da7281041f0e626459bcae33ed998cca6a0a007a5ebb73414ac72d"},
{file = "pydantic_core-2.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0827505a5c87e8aa285dc31e9ec7f4a17c81a813d45f70b1d9164e03a813a686"},
{file = "pydantic_core-2.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19c0fa39fa154e7e0b7f82f88ef85faa2a4c23cc65aae2f5aea625e3c13c735a"},
{file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa223cd1e36b642092c326d694d8bf59b71ddddc94cdb752bbbb1c5c91d833b"},
{file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c336a6d235522a62fef872c6295a42ecb0c4e1d0f1a3e500fe949415761b8a19"},
{file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7eb6a0587eded33aeefea9f916899d42b1799b7b14b8f8ff2753c0ac1741edac"},
{file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70c8daf4faca8da5a6d655f9af86faf6ec2e1768f4b8b9d0226c02f3d6209703"},
{file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9fa4c9bf273ca41f940bceb86922a7667cd5bf90e95dbb157cbb8441008482c"},
{file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:11b71d67b4725e7e2a9f6e9c0ac1239bbc0c48cce3dc59f98635efc57d6dac83"},
{file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:270755f15174fb983890c49881e93f8f1b80f0b5e3a3cc1394a255706cabd203"},
{file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c81131869240e3e568916ef4c307f8b99583efaa60a8112ef27a366eefba8ef0"},
{file = "pydantic_core-2.20.1-cp313-none-win32.whl", hash = "sha256:b91ced227c41aa29c672814f50dbb05ec93536abf8f43cd14ec9521ea09afe4e"},
{file = "pydantic_core-2.20.1-cp313-none-win_amd64.whl", hash = "sha256:65db0f2eefcaad1a3950f498aabb4875c8890438bc80b19362cf633b87a8ab20"},
{file = "pydantic_core-2.20.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4745f4ac52cc6686390c40eaa01d48b18997cb130833154801a442323cc78f91"},
{file = "pydantic_core-2.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a8ad4c766d3f33ba8fd692f9aa297c9058970530a32c728a2c4bfd2616d3358b"},
{file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41e81317dd6a0127cabce83c0c9c3fbecceae981c8391e6f1dec88a77c8a569a"},
{file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04024d270cf63f586ad41fff13fde4311c4fc13ea74676962c876d9577bcc78f"},
{file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eaad4ff2de1c3823fddf82f41121bdf453d922e9a238642b1dedb33c4e4f98ad"},
{file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:26ab812fa0c845df815e506be30337e2df27e88399b985d0bb4e3ecfe72df31c"},
{file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c5ebac750d9d5f2706654c638c041635c385596caf68f81342011ddfa1e5598"},
{file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2aafc5a503855ea5885559eae883978c9b6d8c8993d67766ee73d82e841300dd"},
{file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4868f6bd7c9d98904b748a2653031fc9c2f85b6237009d475b1008bfaeb0a5aa"},
{file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa2f457b4af386254372dfa78a2eda2563680d982422641a85f271c859df1987"},
{file = "pydantic_core-2.20.1-cp38-none-win32.whl", hash = "sha256:225b67a1f6d602de0ce7f6c1c3ae89a4aa25d3de9be857999e9124f15dab486a"},
{file = "pydantic_core-2.20.1-cp38-none-win_amd64.whl", hash = "sha256:6b507132dcfc0dea440cce23ee2182c0ce7aba7054576efc65634f080dbe9434"},
{file = "pydantic_core-2.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b03f7941783b4c4a26051846dea594628b38f6940a2fdc0df00b221aed39314c"},
{file = "pydantic_core-2.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1eedfeb6089ed3fad42e81a67755846ad4dcc14d73698c120a82e4ccf0f1f9f6"},
{file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:635fee4e041ab9c479e31edda27fcf966ea9614fff1317e280d99eb3e5ab6fe2"},
{file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:77bf3ac639c1ff567ae3b47f8d4cc3dc20f9966a2a6dd2311dcc055d3d04fb8a"},
{file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ed1b0132f24beeec5a78b67d9388656d03e6a7c837394f99257e2d55b461611"},
{file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6514f963b023aeee506678a1cf821fe31159b925c4b76fe2afa94cc70b3222b"},
{file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10d4204d8ca33146e761c79f83cc861df20e7ae9f6487ca290a97702daf56006"},
{file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d036c7187b9422ae5b262badb87a20a49eb6c5238b2004e96d4da1231badef1"},
{file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ebfef07dbe1d93efb94b4700f2d278494e9162565a54f124c404a5656d7ff09"},
{file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6b9d9bb600328a1ce523ab4f454859e9d439150abb0906c5a1983c146580ebab"},
{file = "pydantic_core-2.20.1-cp39-none-win32.whl", hash = "sha256:784c1214cb6dd1e3b15dd8b91b9a53852aed16671cc3fbe4786f4f1db07089e2"},
{file = "pydantic_core-2.20.1-cp39-none-win_amd64.whl", hash = "sha256:d2fe69c5434391727efa54b47a1e7986bb0186e72a41b203df8f5b0a19a4f669"},
{file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a45f84b09ac9c3d35dfcf6a27fd0634d30d183205230a0ebe8373a0e8cfa0906"},
{file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d02a72df14dfdbaf228424573a07af10637bd490f0901cee872c4f434a735b94"},
{file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2b27e6af28f07e2f195552b37d7d66b150adbaa39a6d327766ffd695799780f"},
{file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084659fac3c83fd674596612aeff6041a18402f1e1bc19ca39e417d554468482"},
{file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:242b8feb3c493ab78be289c034a1f659e8826e2233786e36f2893a950a719bb6"},
{file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:38cf1c40a921d05c5edc61a785c0ddb4bed67827069f535d794ce6bcded919fc"},
{file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e0bbdd76ce9aa5d4209d65f2b27fc6e5ef1312ae6c5333c26db3f5ade53a1e99"},
{file = "pydantic_core-2.20.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:254ec27fdb5b1ee60684f91683be95e5133c994cc54e86a0b0963afa25c8f8a6"},
{file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:407653af5617f0757261ae249d3fba09504d7a71ab36ac057c938572d1bc9331"},
{file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c693e916709c2465b02ca0ad7b387c4f8423d1db7b4649c551f27a529181c5ad"},
{file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b5ff4911aea936a47d9376fd3ab17e970cc543d1b68921886e7f64bd28308d1"},
{file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177f55a886d74f1808763976ac4efd29b7ed15c69f4d838bbd74d9d09cf6fa86"},
{file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:964faa8a861d2664f0c7ab0c181af0bea66098b1919439815ca8803ef136fc4e"},
{file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4dd484681c15e6b9a977c785a345d3e378d72678fd5f1f3c0509608da24f2ac0"},
{file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f6d6cff3538391e8486a431569b77921adfcdef14eb18fbf19b7c0a5294d4e6a"},
{file = "pydantic_core-2.20.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a6d511cc297ff0883bc3708b465ff82d7560193169a8b93260f74ecb0a5e08a7"},
{file = "pydantic_core-2.20.1.tar.gz", hash = "sha256:26ca695eeee5f9f1aeeb211ffc12f10bcb6f71e2989988fda61dabd65db878d4"},
]
[package.dependencies]
typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
[[package]] [[package]]
name = "pygments" name = "pygments"
@@ -2466,13 +2543,13 @@ files = [
[[package]] [[package]]
name = "pytest" name = "pytest"
version = "8.2.2" version = "8.3.2"
description = "pytest: simple powerful testing with Python" description = "pytest: simple powerful testing with Python"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
{file = "pytest-8.2.2-py3-none-any.whl", hash = "sha256:c434598117762e2bd304e526244f67bf66bbd7b5d6cf22138be51ff661980343"}, {file = "pytest-8.3.2-py3-none-any.whl", hash = "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5"},
{file = "pytest-8.2.2.tar.gz", hash = "sha256:de4bb8104e201939ccdc688b27a89a7be2079b22e2bd2b07f806b6ba71117977"}, {file = "pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce"},
] ]
[package.dependencies] [package.dependencies]
@@ -2480,7 +2557,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""}
exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""}
iniconfig = "*" iniconfig = "*"
packaging = "*" packaging = "*"
pluggy = ">=1.5,<2.0" pluggy = ">=1.5,<2"
tomli = {version = ">=1", markers = "python_version < \"3.11\""} tomli = {version = ">=1", markers = "python_version < \"3.11\""}
[package.extras] [package.extras]
@@ -2827,29 +2904,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"]
[[package]] [[package]]
name = "ruff" name = "ruff"
version = "0.5.4" version = "0.5.6"
description = "An extremely fast Python linter and code formatter, written in Rust." description = "An extremely fast Python linter and code formatter, written in Rust."
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
{file = "ruff-0.5.4-py3-none-linux_armv6l.whl", hash = "sha256:82acef724fc639699b4d3177ed5cc14c2a5aacd92edd578a9e846d5b5ec18ddf"}, {file = "ruff-0.5.6-py3-none-linux_armv6l.whl", hash = "sha256:a0ef5930799a05522985b9cec8290b185952f3fcd86c1772c3bdbd732667fdcd"},
{file = "ruff-0.5.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:da62e87637c8838b325e65beee485f71eb36202ce8e3cdbc24b9fcb8b99a37be"}, {file = "ruff-0.5.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b652dc14f6ef5d1552821e006f747802cc32d98d5509349e168f6bf0ee9f8f42"},
{file = "ruff-0.5.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e98ad088edfe2f3b85a925ee96da652028f093d6b9b56b76fc242d8abb8e2059"}, {file = "ruff-0.5.6-py3-none-macosx_11_0_arm64.whl", hash = "sha256:80521b88d26a45e871f31e4b88938fd87db7011bb961d8afd2664982dfc3641a"},
{file = "ruff-0.5.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c55efbecc3152d614cfe6c2247a3054cfe358cefbf794f8c79c8575456efe19"}, {file = "ruff-0.5.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9bc8f328a9f1309ae80e4d392836e7dbc77303b38ed4a7112699e63d3b066ab"},
{file = "ruff-0.5.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9b85eaa1f653abd0a70603b8b7008d9e00c9fa1bbd0bf40dad3f0c0bdd06793"}, {file = "ruff-0.5.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4d394940f61f7720ad371ddedf14722ee1d6250fd8d020f5ea5a86e7be217daf"},
{file = "ruff-0.5.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0cf497a47751be8c883059c4613ba2f50dd06ec672692de2811f039432875278"}, {file = "ruff-0.5.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111a99cdb02f69ddb2571e2756e017a1496c2c3a2aeefe7b988ddab38b416d36"},
{file = "ruff-0.5.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:09c14ed6a72af9ccc8d2e313d7acf7037f0faff43cde4b507e66f14e812e37f7"}, {file = "ruff-0.5.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e395daba77a79f6dc0d07311f94cc0560375ca20c06f354c7c99af3bf4560c5d"},
{file = "ruff-0.5.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:628f6b8f97b8bad2490240aa84f3e68f390e13fabc9af5c0d3b96b485921cd60"}, {file = "ruff-0.5.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c476acb43c3c51e3c614a2e878ee1589655fa02dab19fe2db0423a06d6a5b1b6"},
{file = "ruff-0.5.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3520a00c0563d7a7a7c324ad7e2cde2355733dafa9592c671fb2e9e3cd8194c1"}, {file = "ruff-0.5.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2ff8003f5252fd68425fd53d27c1f08b201d7ed714bb31a55c9ac1d4c13e2eb"},
{file = "ruff-0.5.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93789f14ca2244fb91ed481456f6d0bb8af1f75a330e133b67d08f06ad85b516"}, {file = "ruff-0.5.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c94e084ba3eaa80c2172918c2ca2eb2230c3f15925f4ed8b6297260c6ef179ad"},
{file = "ruff-0.5.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:029454e2824eafa25b9df46882f7f7844d36fd8ce51c1b7f6d97e2615a57bbcc"}, {file = "ruff-0.5.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1f77c1c3aa0669fb230b06fb24ffa3e879391a3ba3f15e3d633a752da5a3e670"},
{file = "ruff-0.5.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:9492320eed573a13a0bc09a2957f17aa733fff9ce5bf00e66e6d4a88ec33813f"}, {file = "ruff-0.5.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f908148c93c02873210a52cad75a6eda856b2cbb72250370ce3afef6fb99b1ed"},
{file = "ruff-0.5.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a6e1f62a92c645e2919b65c02e79d1f61e78a58eddaebca6c23659e7c7cb4ac7"}, {file = "ruff-0.5.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:563a7ae61ad284187d3071d9041c08019975693ff655438d8d4be26e492760bd"},
{file = "ruff-0.5.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:768fa9208df2bec4b2ce61dbc7c2ddd6b1be9fb48f1f8d3b78b3332c7d71c1ff"}, {file = "ruff-0.5.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:94fe60869bfbf0521e04fd62b74cbca21cbc5beb67cbb75ab33fe8c174f54414"},
{file = "ruff-0.5.4-py3-none-win32.whl", hash = "sha256:e1e7393e9c56128e870b233c82ceb42164966f25b30f68acbb24ed69ce9c3a4e"}, {file = "ruff-0.5.6-py3-none-win32.whl", hash = "sha256:e6a584c1de6f8591c2570e171cc7ce482bb983d49c70ddf014393cd39e9dfaed"},
{file = "ruff-0.5.4-py3-none-win_amd64.whl", hash = "sha256:58b54459221fd3f661a7329f177f091eb35cf7a603f01d9eb3eb11cc348d38c4"}, {file = "ruff-0.5.6-py3-none-win_amd64.whl", hash = "sha256:d7fe7dccb1a89dc66785d7aa0ac283b2269712d8ed19c63af908fdccca5ccc1a"},
{file = "ruff-0.5.4-py3-none-win_arm64.whl", hash = "sha256:bd53da65f1085fb5b307c38fd3c0829e76acf7b2a912d8d79cadcdb4875c1eb7"}, {file = "ruff-0.5.6-py3-none-win_arm64.whl", hash = "sha256:57c6c0dd997b31b536bff49b9eee5ed3194d60605a4427f735eeb1f9c1b8d264"},
{file = "ruff-0.5.4.tar.gz", hash = "sha256:2795726d5f71c4f4e70653273d1c23a8182f07dd8e48c12de5d867bfb7557eed"}, {file = "ruff-0.5.6.tar.gz", hash = "sha256:07c9e3c2a8e1fe377dd460371c3462671a728c981c3205a5217291422209f642"},
] ]
[[package]] [[package]]
@@ -2991,19 +3068,18 @@ test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeo
[[package]] [[package]]
name = "setuptools" name = "setuptools"
version = "68.2.2" version = "70.3.0"
description = "Easily download, build, install, upgrade, and uninstall Python packages" description = "Easily download, build, install, upgrade, and uninstall Python packages"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
{file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, {file = "setuptools-70.3.0-py3-none-any.whl", hash = "sha256:fe384da74336c398e0d956d1cae0669bc02eed936cdb1d49b57de1990dc11ffc"},
{file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, {file = "setuptools-70.3.0.tar.gz", hash = "sha256:f171bab1dfbc86b132997f26a119f6056a57950d058587841a0082e8830f9dc5"},
] ]
[package.extras] [package.extras]
docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "mypy (==1.10.0)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.3.2)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]
[[package]] [[package]]
name = "six" name = "six"
@@ -3245,6 +3321,17 @@ files = [
{file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"},
] ]
[[package]]
name = "typing-extensions"
version = "4.12.2"
description = "Backported and Experimental Type Hints for Python 3.8+"
optional = false
python-versions = ">=3.8"
files = [
{file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"},
{file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"},
]
[[package]] [[package]]
name = "urllib3" name = "urllib3"
version = "2.1.0" version = "2.1.0"
@@ -3263,13 +3350,13 @@ zstd = ["zstandard (>=0.18.0)"]
[[package]] [[package]]
name = "uvicorn" name = "uvicorn"
version = "0.30.1" version = "0.30.5"
description = "The lightning-fast ASGI server." description = "The lightning-fast ASGI server."
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
{file = "uvicorn-0.30.1-py3-none-any.whl", hash = "sha256:cd17daa7f3b9d7a24de3617820e634d0933b69eed8e33a516071174427238c81"}, {file = "uvicorn-0.30.5-py3-none-any.whl", hash = "sha256:b2d86de274726e9878188fa07576c9ceeff90a839e2b6e25c917fe05f5a6c835"},
{file = "uvicorn-0.30.1.tar.gz", hash = "sha256:d46cd8e0fd80240baffbcd9ec1012a712938754afcf81bce56c024c1656aece8"}, {file = "uvicorn-0.30.5.tar.gz", hash = "sha256:ac6fdbd4425c5fd17a9fe39daf4d4d075da6fdc80f653e5894cdc2fd98752bee"},
] ]
[package.dependencies] [package.dependencies]
@@ -3601,4 +3688,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"]
[metadata] [metadata]
lock-version = "2.0" lock-version = "2.0"
python-versions = ">=3.10,<4.0" python-versions = ">=3.10,<4.0"
content-hash = "df9afeda50e05cb62b322a047028a9b0851db197c4f379903c70adab3a98777a" content-hash = "187485f19267f2d0a01e38fc0c1f8911c07a29aee11080179a96a127abb9c11b"
+3 -3
View File
@@ -1,6 +1,6 @@
[tool.poetry] [tool.poetry]
name = "machine-learning" name = "machine-learning"
version = "1.110.0" version = "1.111.0"
description = "" description = ""
authors = ["Hau Tran <alex.tran1502@gmail.com>"] authors = ["Hau Tran <alex.tran1502@gmail.com>"]
readme = "README.md" readme = "README.md"
@@ -13,11 +13,11 @@ opencv-python-headless = ">=4.7.0.72,<5.0"
pillow = ">=9.5.0,<11.0" pillow = ">=9.5.0,<11.0"
fastapi-slim = ">=0.95.2,<1.0" fastapi-slim = ">=0.95.2,<1.0"
uvicorn = {extras = ["standard"], version = ">=0.22.0,<1.0"} uvicorn = {extras = ["standard"], version = ">=0.22.0,<1.0"}
pydantic = "^1.10.8" pydantic = "^2.8.2"
aiocache = ">=0.12.1,<1.0" aiocache = ">=0.12.1,<1.0"
rich = ">=13.4.2" rich = ">=13.4.2"
ftfy = ">=6.1.1" ftfy = ">=6.1.1"
setuptools = "^68.0.0" setuptools = "^70.0.0"
python-multipart = ">=0.0.6,<1.0" python-multipart = ">=0.0.6,<1.0"
orjson = ">=3.9.5" orjson = ">=3.9.5"
gunicorn = ">=21.1.0" gunicorn = ">=21.1.0"
+1 -1
View File
@@ -1,3 +1,3 @@
{ {
"flutter": "3.22.2" "flutter": "3.22.3"
} }
+1 -1
View File
@@ -1,5 +1,5 @@
{ {
"dart.flutterSdkPath": ".fvm/versions/3.22.1", "dart.flutterSdkPath": ".fvm/versions/3.22.3",
"search.exclude": { "search.exclude": {
"**/.fvm": true "**/.fvm": true
}, },
@@ -1,7 +1,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="app.alextran.immich" <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="app.alextran.immich"
xmlns:tools="http://schemas.android.com/tools"> xmlns:tools="http://schemas.android.com/tools">
<application android:label="Immich" android:name=".ImmichApp" android:usesCleartextTraffic="true" <application android:label="Immich" android:name=".ImmichApp" android:usesCleartextTraffic="true"
android:icon="@mipmap/ic_launcher" android:requestLegacyExternalStorage="true" android:largeHeap="true"> android:icon="@mipmap/ic_launcher" android:requestLegacyExternalStorage="true"
android:largeHeap="true">
<meta-data <meta-data
android:name="io.flutter.embedding.android.EnableImpeller" android:name="io.flutter.embedding.android.EnableImpeller"
@@ -55,7 +56,8 @@
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
<uses-permission android:name="android.permission.MANAGE_MEDIA" /> <uses-permission android:name="android.permission.MANAGE_MEDIA" />
@@ -65,6 +67,7 @@
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<queries> <queries>
<intent> <intent>
@@ -76,4 +79,4 @@
<data android:scheme="geo" /> <data android:scheme="geo" />
</intent> </intent>
</queries> </queries>
</manifest> </manifest>
+2
View File
@@ -8,9 +8,11 @@ allprojects {
} }
rootProject.buildDir = '../build' rootProject.buildDir = '../build'
subprojects { subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}" project.buildDir = "${rootProject.buildDir}/${project.name}"
} }
subprojects { subprojects {
project.evaluationDependsOn(':app') project.evaluationDependsOn(':app')
} }
+2 -2
View File
@@ -35,8 +35,8 @@ platform :android do
task: 'bundle', task: 'bundle',
build_type: 'Release', build_type: 'Release',
properties: { properties: {
"android.injected.version.code" => 151, "android.injected.version.code" => 152,
"android.injected.version.name" => "1.110.0", "android.injected.version.name" => "1.111.0",
} }
) )
upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab') upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab')
+2 -2
View File
@@ -19,8 +19,8 @@ pluginManagement {
plugins { plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0" id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "7.4.2" apply false id "com.android.application" version "7.4.2" apply false
id "org.jetbrains.kotlin.android" version "1.9.24" apply false id "org.jetbrains.kotlin.android" version "1.9.0" apply false
id "org.jetbrains.kotlin.kapt" version "1.9.24" apply false id "org.jetbrains.kotlin.kapt" version "1.9.0" apply false
} }
include ":app" include ":app"
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "يلغي", "action_common_cancel": "يلغي",
"action_common_clear": "مسح", "action_common_clear": "مسح",
"action_common_confirm": "تأكيد", "action_common_confirm": "تأكيد",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "تحديث", "action_common_update": "تحديث",
"add_to_album_bottom_sheet_added": "تمت الاضافة{album}", "add_to_album_bottom_sheet_added": "تمت الاضافة{album}",
"add_to_album_bottom_sheet_already_exists": "موجودة مسبقا {album}", "add_to_album_bottom_sheet_already_exists": "موجودة مسبقا {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "كلمة المرور الجديدة", "change_password_form_new_password": "كلمة المرور الجديدة",
"change_password_form_password_mismatch": "كلمة المرور غير مطابقة", "change_password_form_password_mismatch": "كلمة المرور غير مطابقة",
"change_password_form_reenter_new_password": "أعد إدخال كلمة مرور جديدة", "change_password_form_reenter_new_password": "أعد إدخال كلمة مرور جديدة",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "أضف إلى الألبوم", "common_add_to_album": "أضف إلى الألبوم",
"common_change_password": "تغيير كلمة المرور", "common_change_password": "تغيير كلمة المرور",
"common_create_new_album": "إنشاء ألبوم جديد", "common_create_new_album": "إنشاء ألبوم جديد",
"common_server_error": "يرجى التحقق من اتصال الشبكة الخاص بك ، والتأكد من أن الجهاز قابل للوصول وإصدارات التطبيق/الجهاز متوافقة.", "common_server_error": "يرجى التحقق من اتصال الشبكة الخاص بك ، والتأكد من أن الجهاز قابل للوصول وإصدارات التطبيق/الجهاز متوافقة.",
"common_shared": "مشترك", "common_shared": "مشترك",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "أضف إلى الألبوم", "control_bottom_app_bar_add_to_album": "أضف إلى الألبوم",
"control_bottom_app_bar_album_info": "{} items", "control_bottom_app_bar_album_info": "{} items",
"control_bottom_app_bar_album_info_shared": "{} items · Shared", "control_bottom_app_bar_album_info_shared": "{} items · Shared",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "يمسح", "control_bottom_app_bar_delete": "يمسح",
"control_bottom_app_bar_delete_from_immich": " حذف منال تطبيق", "control_bottom_app_bar_delete_from_immich": " حذف منال تطبيق",
"control_bottom_app_bar_delete_from_local": "حذف من الجهاز", "control_bottom_app_bar_delete_from_local": "حذف من الجهاز",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "تحديد الوجهة", "control_bottom_app_bar_edit_location": "تحديد الوجهة",
"control_bottom_app_bar_edit_time": "تحرير التاريخ والوقت", "control_bottom_app_bar_edit_time": "تحرير التاريخ والوقت",
"control_bottom_app_bar_favorite": "مفضل", "control_bottom_app_bar_favorite": "مفضل",
@@ -203,6 +216,7 @@
"experimental_settings_title": "تجريبي", "experimental_settings_title": "تجريبي",
"favorites_page_no_favorites": "لم يتم العثور على الأصول المفضلة", "favorites_page_no_favorites": "لم يتم العثور على الأصول المفضلة",
"favorites_page_title": "المفضلة", "favorites_page_title": "المفضلة",
"filename_search": "File name or extension",
"haptic_feedback_switch": "تمكين ردود الفعل اللمسية", "haptic_feedback_switch": "تمكين ردود الفعل اللمسية",
"haptic_feedback_title": "ردود فعل لمسية", "haptic_feedback_title": "ردود فعل لمسية",
"header_settings_add_header_tip": "Add Header", "header_settings_add_header_tip": "Add Header",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "بدأ التنزيل", "image_viewer_page_state_provider_download_started": "بدأ التنزيل",
"image_viewer_page_state_provider_download_success": "تم التنزيل بنجاح", "image_viewer_page_state_provider_download_success": "تم التنزيل بنجاح",
"image_viewer_page_state_provider_share_error": "خطأ في المشاركة", "image_viewer_page_state_provider_share_error": "خطأ في المشاركة",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "ألبومات", "library_page_albums": "ألبومات",
"library_page_archive": "أرشيف", "library_page_archive": "أرشيف",
"library_page_device_albums": "ألبومات على الجهاز", "library_page_device_albums": "ألبومات على الجهاز",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "لا يمكن تعديل تاريخ الأصول (المواد) للقراءة فقط، سوف يتخطى", "multiselect_grid_edit_date_time_err_read_only": "لا يمكن تعديل تاريخ الأصول (المواد) للقراءة فقط، سوف يتخطى",
"multiselect_grid_edit_gps_err_read_only": "لا يمكن تعديل موقع الأصول (المواد) للقراءة فقط، سوف يتخطى", "multiselect_grid_edit_gps_err_read_only": "لا يمكن تعديل موقع الأصول (المواد) للقراءة فقط، سوف يتخطى",
"no_assets_to_show": "لا توجد أصول لعرضها", "no_assets_to_show": "لا توجد أصول لعرضها",
"no_name": "No name",
"notification_permission_dialog_cancel": "يلغي", "notification_permission_dialog_cancel": "يلغي",
"notification_permission_dialog_content": "لتمكين الإخطارات ، انتقل إلى الإعدادات و اختار السماح.", "notification_permission_dialog_content": "لتمكين الإخطارات ، انتقل إلى الإعدادات و اختار السماح.",
"notification_permission_dialog_settings": "إعدادات", "notification_permission_dialog_settings": "إعدادات",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "حدث خطأ", "scaffold_body_error_occurred": "حدث خطأ",
"search_bar_hint": "ابحث عن صورك", "search_bar_hint": "ابحث عن صورك",
"search_filter_apply": "اختار الفلتر ", "search_filter_apply": "اختار الفلتر ",
"search_filter_camera": "Camera",
"search_filter_camera_make": "صنع", "search_filter_camera_make": "صنع",
"search_filter_camera_model": "نموذج", "search_filter_camera_model": "نموذج",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "أرشيف", "search_filter_display_option_archive": "أرشيف",
"search_filter_display_option_favorite": "مفضل", "search_filter_display_option_favorite": "مفضل",
"search_filter_display_option_not_in_album": "ليس في الألبوم", "search_filter_display_option_not_in_album": "ليس في الألبوم",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "مدينة", "search_filter_location_city": "مدينة",
"search_filter_location_country": "دولة", "search_filter_location_country": "دولة",
"search_filter_location_state": "ولاية", "search_filter_location_state": "ولاية",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "الجميع", "search_filter_media_type_all": "الجميع",
"search_filter_media_type_image": "صورة", "search_filter_media_type_image": "صورة",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "شريط فيديو", "search_filter_media_type_video": "شريط فيديو",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "فئات", "search_page_categories": "فئات",
"search_page_favorites": "المفضلة", "search_page_favorites": "المفضلة",
"search_page_motion_photos": "الصور المتحركه", "search_page_motion_photos": "الصور المتحركه",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Zrušit", "action_common_cancel": "Zrušit",
"action_common_clear": "Vyčistit", "action_common_clear": "Vyčistit",
"action_common_confirm": "Potvrdit", "action_common_confirm": "Potvrdit",
"action_common_save": "Uložit",
"action_common_select": "Vybrat",
"action_common_update": "Aktualizovat", "action_common_update": "Aktualizovat",
"add_to_album_bottom_sheet_added": "Přidáno do {album}", "add_to_album_bottom_sheet_added": "Přidáno do {album}",
"add_to_album_bottom_sheet_already_exists": "Je již v {album}", "add_to_album_bottom_sheet_already_exists": "Je již v {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "Nové heslo", "change_password_form_new_password": "Nové heslo",
"change_password_form_password_mismatch": "Hesla se neshodují", "change_password_form_password_mismatch": "Hesla se neshodují",
"change_password_form_reenter_new_password": "Znovu zadejte nové heslo", "change_password_form_reenter_new_password": "Znovu zadejte nové heslo",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Zadejte heslo",
"client_cert_import": "Importovat",
"client_cert_import_success_msg": "Klientský certifikát je importován",
"client_cert_invalid_msg": "Neplatný soubor certifikátu nebo špatné heslo",
"client_cert_remove": "Odstranit",
"client_cert_remove_msg": "Klientský certifikát je odstraněn",
"client_cert_subtitle": "Podpora pouze formátu PKCS12 (.p12, .pfx). Import/odstranění certifikátu je možné pouze před přihlášením",
"client_cert_title": "Klientský SSL certifikát",
"common_add_to_album": "Přidat do alba", "common_add_to_album": "Přidat do alba",
"common_change_password": "Změnit heslo", "common_change_password": "Změnit heslo",
"common_create_new_album": "Vytvořit nové album", "common_create_new_album": "Vytvořit nové album",
"common_server_error": "Zkontrolujte připojení k internetu. Ujistěte se, že server je dostupný a aplikace/server jsou v kompatibilní verzi.", "common_server_error": "Zkontrolujte připojení k internetu. Ujistěte se, že server je dostupný a aplikace/server jsou v kompatibilní verzi.",
"common_shared": "Sdílené", "common_shared": "Sdílené",
"contextual_search": "Východ slunce na pláži",
"control_bottom_app_bar_add_to_album": "Přidat do alba", "control_bottom_app_bar_add_to_album": "Přidat do alba",
"control_bottom_app_bar_album_info": "{} položek", "control_bottom_app_bar_album_info": "{} položek",
"control_bottom_app_bar_album_info_shared": "{} položky sdílené", "control_bottom_app_bar_album_info_shared": "{} položky sdílené",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Smazat", "control_bottom_app_bar_delete": "Smazat",
"control_bottom_app_bar_delete_from_immich": "Smazat ze serveru Immich", "control_bottom_app_bar_delete_from_immich": "Smazat ze serveru Immich",
"control_bottom_app_bar_delete_from_local": "Smazat ze zařízení", "control_bottom_app_bar_delete_from_local": "Smazat ze zařízení",
"control_bottom_app_bar_edit": "Upravit",
"control_bottom_app_bar_edit_location": "Upravit polohu", "control_bottom_app_bar_edit_location": "Upravit polohu",
"control_bottom_app_bar_edit_time": "Upravit datum a čas", "control_bottom_app_bar_edit_time": "Upravit datum a čas",
"control_bottom_app_bar_favorite": "Oblíbené", "control_bottom_app_bar_favorite": "Oblíbené",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Experimentální", "experimental_settings_title": "Experimentální",
"favorites_page_no_favorites": "Nebyla nalezena žádná oblíbená média", "favorites_page_no_favorites": "Nebyla nalezena žádná oblíbená média",
"favorites_page_title": "Oblíbené", "favorites_page_title": "Oblíbené",
"filename_search": "Název nebo přípona souboru",
"haptic_feedback_switch": "Povolit dotykovou zpětnou vazbu", "haptic_feedback_switch": "Povolit dotykovou zpětnou vazbu",
"haptic_feedback_title": "Dotyková zpětná vazba", "haptic_feedback_title": "Dotyková zpětná vazba",
"header_settings_add_header_tip": "Přidat hlavičku", "header_settings_add_header_tip": "Přidat hlavičku",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Stahování zahájeno", "image_viewer_page_state_provider_download_started": "Stahování zahájeno",
"image_viewer_page_state_provider_download_success": "Stahování bylo úspěšné", "image_viewer_page_state_provider_download_success": "Stahování bylo úspěšné",
"image_viewer_page_state_provider_share_error": "Chyba sdílení", "image_viewer_page_state_provider_share_error": "Chyba sdílení",
"invalid_date": "Chybné datum",
"invalid_date_format": "Chybný formát data",
"library_page_albums": "Alba", "library_page_albums": "Alba",
"library_page_archive": "Archív", "library_page_archive": "Archív",
"library_page_device_albums": "Alba v zařízení", "library_page_device_albums": "Alba v zařízení",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "Nelze upravit datum položek pouze pro čtení, přeskakuji", "multiselect_grid_edit_date_time_err_read_only": "Nelze upravit datum položek pouze pro čtení, přeskakuji",
"multiselect_grid_edit_gps_err_read_only": "Nelze upravit polohu položek pouze pro čtení, přeskakuji", "multiselect_grid_edit_gps_err_read_only": "Nelze upravit polohu položek pouze pro čtení, přeskakuji",
"no_assets_to_show": "Žádné položky k zobrazení", "no_assets_to_show": "Žádné položky k zobrazení",
"no_name": "Bez jména",
"notification_permission_dialog_cancel": "Zrušit", "notification_permission_dialog_cancel": "Zrušit",
"notification_permission_dialog_content": "Chcete-li povolit oznámení, přejděte do nastavení a vyberte možnost povolit.", "notification_permission_dialog_content": "Chcete-li povolit oznámení, přejděte do nastavení a vyberte možnost povolit.",
"notification_permission_dialog_settings": "Nastavení", "notification_permission_dialog_settings": "Nastavení",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Došlo k chybě", "scaffold_body_error_occurred": "Došlo k chybě",
"search_bar_hint": "Prohledejte své fotky", "search_bar_hint": "Prohledejte své fotky",
"search_filter_apply": "Použít filtr", "search_filter_apply": "Použít filtr",
"search_filter_camera": "Fotoaparát",
"search_filter_camera_make": "Výrobce", "search_filter_camera_make": "Výrobce",
"search_filter_camera_model": "Model", "search_filter_camera_model": "Model",
"search_filter_camera_title": "Výběr typu fotoaparátu",
"search_filter_date": "Datum",
"search_filter_date_interval": "{start} až {end}",
"search_filter_date_title": "Výběr rozmezí dat",
"search_filter_display_option_archive": "Archiv", "search_filter_display_option_archive": "Archiv",
"search_filter_display_option_favorite": "Oblíbené", "search_filter_display_option_favorite": "Oblíbené",
"search_filter_display_option_not_in_album": "Není v albu", "search_filter_display_option_not_in_album": "Není v albu",
"search_filter_display_options": "Možnost zobrazení",
"search_filter_display_options_title": "Možnosti zobrazení",
"search_filter_location": "Poloha",
"search_filter_location_city": "Město", "search_filter_location_city": "Město",
"search_filter_location_country": "Země", "search_filter_location_country": "Země",
"search_filter_location_state": "Stát", "search_filter_location_state": "Stát",
"search_filter_location_title": "Výběr polohy",
"search_filter_media_type": "Typ média",
"search_filter_media_type_all": "Všechny", "search_filter_media_type_all": "Všechny",
"search_filter_media_type_image": "Obrázek", "search_filter_media_type_image": "Obrázek",
"search_filter_media_type_title": "Výběr typu média",
"search_filter_media_type_video": "Video", "search_filter_media_type_video": "Video",
"search_filter_people": "Lidé",
"search_filter_people_title": "Výběr lidí",
"search_page_categories": "Kategorie", "search_page_categories": "Kategorie",
"search_page_favorites": "Oblíbené", "search_page_favorites": "Oblíbené",
"search_page_motion_photos": "Pohyblivé fotky", "search_page_motion_photos": "Pohyblivé fotky",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Annuller", "action_common_cancel": "Annuller",
"action_common_clear": "Ryd", "action_common_clear": "Ryd",
"action_common_confirm": "Bekræft", "action_common_confirm": "Bekræft",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "Opdater", "action_common_update": "Opdater",
"add_to_album_bottom_sheet_added": "Tilføjet til {album}", "add_to_album_bottom_sheet_added": "Tilføjet til {album}",
"add_to_album_bottom_sheet_already_exists": "Allerede i {album}", "add_to_album_bottom_sheet_already_exists": "Allerede i {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "Nyt kodeord", "change_password_form_new_password": "Nyt kodeord",
"change_password_form_password_mismatch": "Kodeord er ikke ens", "change_password_form_password_mismatch": "Kodeord er ikke ens",
"change_password_form_reenter_new_password": "Gentag nyt kodeord", "change_password_form_reenter_new_password": "Gentag nyt kodeord",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "Tilføj til album", "common_add_to_album": "Tilføj til album",
"common_change_password": "Skift kodeord", "common_change_password": "Skift kodeord",
"common_create_new_album": "Opret et nyt album", "common_create_new_album": "Opret et nyt album",
"common_server_error": "Tjek din internetforbindelse, sørg for at serveren er tilgængelig og at app- og serversioner er kompatible.", "common_server_error": "Tjek din internetforbindelse, sørg for at serveren er tilgængelig og at app- og serversioner er kompatible.",
"common_shared": "Delt", "common_shared": "Delt",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "Tilføj til album", "control_bottom_app_bar_add_to_album": "Tilføj til album",
"control_bottom_app_bar_album_info": "{} genstande", "control_bottom_app_bar_album_info": "{} genstande",
"control_bottom_app_bar_album_info_shared": "{} genstande • Delt", "control_bottom_app_bar_album_info_shared": "{} genstande • Delt",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Slet", "control_bottom_app_bar_delete": "Slet",
"control_bottom_app_bar_delete_from_immich": "Slet fra Immich", "control_bottom_app_bar_delete_from_immich": "Slet fra Immich",
"control_bottom_app_bar_delete_from_local": "Slet fra enhed", "control_bottom_app_bar_delete_from_local": "Slet fra enhed",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "Rediger placering", "control_bottom_app_bar_edit_location": "Rediger placering",
"control_bottom_app_bar_edit_time": "Rediger tid og dato", "control_bottom_app_bar_edit_time": "Rediger tid og dato",
"control_bottom_app_bar_favorite": "Favorit", "control_bottom_app_bar_favorite": "Favorit",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Eksperimentelle", "experimental_settings_title": "Eksperimentelle",
"favorites_page_no_favorites": "Ingen favoritter blev fundet", "favorites_page_no_favorites": "Ingen favoritter blev fundet",
"favorites_page_title": "Favoritter", "favorites_page_title": "Favoritter",
"filename_search": "File name or extension",
"haptic_feedback_switch": "Slå haptisk feedback til", "haptic_feedback_switch": "Slå haptisk feedback til",
"haptic_feedback_title": "Haptisk feedback", "haptic_feedback_title": "Haptisk feedback",
"header_settings_add_header_tip": "Add Header", "header_settings_add_header_tip": "Add Header",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Download startet", "image_viewer_page_state_provider_download_started": "Download startet",
"image_viewer_page_state_provider_download_success": "Download succesfuld", "image_viewer_page_state_provider_download_success": "Download succesfuld",
"image_viewer_page_state_provider_share_error": "Delingsfejl", "image_viewer_page_state_provider_share_error": "Delingsfejl",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "Albummer", "library_page_albums": "Albummer",
"library_page_archive": "Arkiv", "library_page_archive": "Arkiv",
"library_page_device_albums": "Albummer på enhed", "library_page_device_albums": "Albummer på enhed",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "Kan ikke redigere datoen på kun læselige elementer. Springer over", "multiselect_grid_edit_date_time_err_read_only": "Kan ikke redigere datoen på kun læselige elementer. Springer over",
"multiselect_grid_edit_gps_err_read_only": "Kan ikke redigere lokation af kun læselige elementer. Springer over", "multiselect_grid_edit_gps_err_read_only": "Kan ikke redigere lokation af kun læselige elementer. Springer over",
"no_assets_to_show": "Ingen elementer at vise", "no_assets_to_show": "Ingen elementer at vise",
"no_name": "No name",
"notification_permission_dialog_cancel": "Annuller", "notification_permission_dialog_cancel": "Annuller",
"notification_permission_dialog_content": "Gå til indstillinger for at slå notifikationer til.", "notification_permission_dialog_content": "Gå til indstillinger for at slå notifikationer til.",
"notification_permission_dialog_settings": "Indstillinger", "notification_permission_dialog_settings": "Indstillinger",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Der opstod en fejl", "scaffold_body_error_occurred": "Der opstod en fejl",
"search_bar_hint": "Søg i dine billeder", "search_bar_hint": "Søg i dine billeder",
"search_filter_apply": "Tilføj filter", "search_filter_apply": "Tilføj filter",
"search_filter_camera": "Camera",
"search_filter_camera_make": "Producent", "search_filter_camera_make": "Producent",
"search_filter_camera_model": "Model", "search_filter_camera_model": "Model",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "Arkiv", "search_filter_display_option_archive": "Arkiv",
"search_filter_display_option_favorite": "Favorit", "search_filter_display_option_favorite": "Favorit",
"search_filter_display_option_not_in_album": "Ikke i album", "search_filter_display_option_not_in_album": "Ikke i album",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "By", "search_filter_location_city": "By",
"search_filter_location_country": "Land", "search_filter_location_country": "Land",
"search_filter_location_state": "Stat", "search_filter_location_state": "Stat",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "Alle", "search_filter_media_type_all": "Alle",
"search_filter_media_type_image": "Billede", "search_filter_media_type_image": "Billede",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "Video", "search_filter_media_type_video": "Video",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "Kategorier", "search_page_categories": "Kategorier",
"search_page_favorites": "Favoritter", "search_page_favorites": "Favoritter",
"search_page_motion_photos": "Bevægelsesbilleder", "search_page_motion_photos": "Bevægelsesbilleder",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Abbrechen", "action_common_cancel": "Abbrechen",
"action_common_clear": "Leeren", "action_common_clear": "Leeren",
"action_common_confirm": "Bestätigen", "action_common_confirm": "Bestätigen",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "Aktualisieren", "action_common_update": "Aktualisieren",
"add_to_album_bottom_sheet_added": "Zu {album} hinzugefügt", "add_to_album_bottom_sheet_added": "Zu {album} hinzugefügt",
"add_to_album_bottom_sheet_already_exists": "Bereits in {album}", "add_to_album_bottom_sheet_already_exists": "Bereits in {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "Neues Passwort", "change_password_form_new_password": "Neues Passwort",
"change_password_form_password_mismatch": "Passwörter stimmen nicht überein", "change_password_form_password_mismatch": "Passwörter stimmen nicht überein",
"change_password_form_reenter_new_password": "Passwort erneut eingeben", "change_password_form_reenter_new_password": "Passwort erneut eingeben",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "Zu Album hinzufügen", "common_add_to_album": "Zu Album hinzufügen",
"common_change_password": "Passwort ändern", "common_change_password": "Passwort ändern",
"common_create_new_album": "Neues Album erstellen", "common_create_new_album": "Neues Album erstellen",
"common_server_error": "Bitte überprüfe Deine Netzwerkverbindung und stelle sicher, dass die App und Server Versionen kompatibel sind.", "common_server_error": "Bitte überprüfe Deine Netzwerkverbindung und stelle sicher, dass die App und Server Versionen kompatibel sind.",
"common_shared": "Geteilt", "common_shared": "Geteilt",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "Zu Album hinzufügen", "control_bottom_app_bar_add_to_album": "Zu Album hinzufügen",
"control_bottom_app_bar_album_info": "{} Elemente", "control_bottom_app_bar_album_info": "{} Elemente",
"control_bottom_app_bar_album_info_shared": "{} Elemente · Geteilt", "control_bottom_app_bar_album_info_shared": "{} Elemente · Geteilt",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Löschen", "control_bottom_app_bar_delete": "Löschen",
"control_bottom_app_bar_delete_from_immich": "Aus Immich löschen", "control_bottom_app_bar_delete_from_immich": "Aus Immich löschen",
"control_bottom_app_bar_delete_from_local": "Vom Gerät löschen", "control_bottom_app_bar_delete_from_local": "Vom Gerät löschen",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "Ort bearbeiten", "control_bottom_app_bar_edit_location": "Ort bearbeiten",
"control_bottom_app_bar_edit_time": "Datum und Uhrzeit bearbeiten", "control_bottom_app_bar_edit_time": "Datum und Uhrzeit bearbeiten",
"control_bottom_app_bar_favorite": "Favorit", "control_bottom_app_bar_favorite": "Favorit",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Experimentell", "experimental_settings_title": "Experimentell",
"favorites_page_no_favorites": "Keine favorisierten Inhalte gefunden", "favorites_page_no_favorites": "Keine favorisierten Inhalte gefunden",
"favorites_page_title": "Favoriten", "favorites_page_title": "Favoriten",
"filename_search": "File name or extension",
"haptic_feedback_switch": "Haptisches Feedback aktivieren", "haptic_feedback_switch": "Haptisches Feedback aktivieren",
"haptic_feedback_title": "Haptisches Feedback", "haptic_feedback_title": "Haptisches Feedback",
"header_settings_add_header_tip": "Header hinzufügen", "header_settings_add_header_tip": "Header hinzufügen",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Download gestartet", "image_viewer_page_state_provider_download_started": "Download gestartet",
"image_viewer_page_state_provider_download_success": "Erfolgreich heruntergeladen", "image_viewer_page_state_provider_download_success": "Erfolgreich heruntergeladen",
"image_viewer_page_state_provider_share_error": "Fehler beim Teilen", "image_viewer_page_state_provider_share_error": "Fehler beim Teilen",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "Alben", "library_page_albums": "Alben",
"library_page_archive": "Archiv", "library_page_archive": "Archiv",
"library_page_device_albums": "Alben auf dem Gerät", "library_page_device_albums": "Alben auf dem Gerät",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "Das Datum und die Uhrzeit von schreibgeschützten Inhalten kann nicht verändert werden, überspringen...", "multiselect_grid_edit_date_time_err_read_only": "Das Datum und die Uhrzeit von schreibgeschützten Inhalten kann nicht verändert werden, überspringen...",
"multiselect_grid_edit_gps_err_read_only": "Der Aufnahmeort von schreibgeschützten Inhalten kann nicht verändert werden, überspringen...", "multiselect_grid_edit_gps_err_read_only": "Der Aufnahmeort von schreibgeschützten Inhalten kann nicht verändert werden, überspringen...",
"no_assets_to_show": "Keine Vorschau vorhanden", "no_assets_to_show": "Keine Vorschau vorhanden",
"no_name": "No name",
"notification_permission_dialog_cancel": "Abbrechen", "notification_permission_dialog_cancel": "Abbrechen",
"notification_permission_dialog_content": "Um Benachrichtigungen zu aktivieren, navigiere zu Einstellungen und klicke \"Erlauben\"", "notification_permission_dialog_content": "Um Benachrichtigungen zu aktivieren, navigiere zu Einstellungen und klicke \"Erlauben\"",
"notification_permission_dialog_settings": "Einstellungen", "notification_permission_dialog_settings": "Einstellungen",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Ein Fehler ist aufgetreten", "scaffold_body_error_occurred": "Ein Fehler ist aufgetreten",
"search_bar_hint": "Durchsuche deine Fotos", "search_bar_hint": "Durchsuche deine Fotos",
"search_filter_apply": "Filter anwenden", "search_filter_apply": "Filter anwenden",
"search_filter_camera": "Camera",
"search_filter_camera_make": "Marke", "search_filter_camera_make": "Marke",
"search_filter_camera_model": "Modell", "search_filter_camera_model": "Modell",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "Archiv", "search_filter_display_option_archive": "Archiv",
"search_filter_display_option_favorite": "Favorit", "search_filter_display_option_favorite": "Favorit",
"search_filter_display_option_not_in_album": "Nicht im Album", "search_filter_display_option_not_in_album": "Nicht im Album",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "Stadt", "search_filter_location_city": "Stadt",
"search_filter_location_country": "Land", "search_filter_location_country": "Land",
"search_filter_location_state": "Bundesland", "search_filter_location_state": "Bundesland",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "Alle", "search_filter_media_type_all": "Alle",
"search_filter_media_type_image": "Bild", "search_filter_media_type_image": "Bild",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "Video", "search_filter_media_type_video": "Video",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "Kategorien", "search_page_categories": "Kategorien",
"search_page_favorites": "Favoriten", "search_page_favorites": "Favoriten",
"search_page_motion_photos": "Live-Fotos", "search_page_motion_photos": "Live-Fotos",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Ακύρωση", "action_common_cancel": "Ακύρωση",
"action_common_clear": "Clear", "action_common_clear": "Clear",
"action_common_confirm": "Confirm", "action_common_confirm": "Confirm",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "Ενημέρωση", "action_common_update": "Ενημέρωση",
"add_to_album_bottom_sheet_added": "Προστέθηκε στο {album}", "add_to_album_bottom_sheet_added": "Προστέθηκε στο {album}",
"add_to_album_bottom_sheet_already_exists": "Ήδη στο {album}", "add_to_album_bottom_sheet_already_exists": "Ήδη στο {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "Νέος Κωδικός", "change_password_form_new_password": "Νέος Κωδικός",
"change_password_form_password_mismatch": "Οι κωδικοί δεν ταιριάζουν", "change_password_form_password_mismatch": "Οι κωδικοί δεν ταιριάζουν",
"change_password_form_reenter_new_password": "Επανεισαγωγή Νέου Κωδικού", "change_password_form_reenter_new_password": "Επανεισαγωγή Νέου Κωδικού",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "Προσθήκη στο άλμπουμ", "common_add_to_album": "Προσθήκη στο άλμπουμ",
"common_change_password": "Αλλαγή Κωδικού", "common_change_password": "Αλλαγή Κωδικού",
"common_create_new_album": "Δημιουργία νέου άλμπουμ", "common_create_new_album": "Δημιουργία νέου άλμπουμ",
"common_server_error": "Ελέγξτε τη σύνδεσή σας, βεβαιωθείτε ότι ο διακομιστής είναι προσβάσιμος και ότι οι εκδόσεις της εφαρμογής/διακομιστή είναι συμβατές.", "common_server_error": "Ελέγξτε τη σύνδεσή σας, βεβαιωθείτε ότι ο διακομιστής είναι προσβάσιμος και ότι οι εκδόσεις της εφαρμογής/διακομιστή είναι συμβατές.",
"common_shared": "Κοινόχρηστο", "common_shared": "Κοινόχρηστο",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "Προσθήκη στο άλμπουμ", "control_bottom_app_bar_add_to_album": "Προσθήκη στο άλμπουμ",
"control_bottom_app_bar_album_info": "{} αντικείμενα", "control_bottom_app_bar_album_info": "{} αντικείμενα",
"control_bottom_app_bar_album_info_shared": "{} αντικείμενα · Κοινόχρηστα", "control_bottom_app_bar_album_info_shared": "{} αντικείμενα · Κοινόχρηστα",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Διαγραφή", "control_bottom_app_bar_delete": "Διαγραφή",
"control_bottom_app_bar_delete_from_immich": "Διαγραφή από το Immich", "control_bottom_app_bar_delete_from_immich": "Διαγραφή από το Immich",
"control_bottom_app_bar_delete_from_local": "Διαγραφή από τη συσκευή", "control_bottom_app_bar_delete_from_local": "Διαγραφή από τη συσκευή",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "Επεξεργασία Τοποθεσίας", "control_bottom_app_bar_edit_location": "Επεξεργασία Τοποθεσίας",
"control_bottom_app_bar_edit_time": "Επεξεργασία Ημερομηνίας & Ώρας", "control_bottom_app_bar_edit_time": "Επεξεργασία Ημερομηνίας & Ώρας",
"control_bottom_app_bar_favorite": "Προσθήκη στα αγαπημένα", "control_bottom_app_bar_favorite": "Προσθήκη στα αγαπημένα",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Πειραματικό", "experimental_settings_title": "Πειραματικό",
"favorites_page_no_favorites": "Δεν βρέθηκαν αγαπημένα στοιχεία", "favorites_page_no_favorites": "Δεν βρέθηκαν αγαπημένα στοιχεία",
"favorites_page_title": "Αγαπημένα", "favorites_page_title": "Αγαπημένα",
"filename_search": "File name or extension",
"haptic_feedback_switch": "Enable haptic feedback", "haptic_feedback_switch": "Enable haptic feedback",
"haptic_feedback_title": "Haptic Feedback", "haptic_feedback_title": "Haptic Feedback",
"header_settings_add_header_tip": "Add Header", "header_settings_add_header_tip": "Add Header",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Download Started", "image_viewer_page_state_provider_download_started": "Download Started",
"image_viewer_page_state_provider_download_success": "Download Success", "image_viewer_page_state_provider_download_success": "Download Success",
"image_viewer_page_state_provider_share_error": "Share Error", "image_viewer_page_state_provider_share_error": "Share Error",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "Albums", "library_page_albums": "Albums",
"library_page_archive": "Archive", "library_page_archive": "Archive",
"library_page_device_albums": "Albums on Device", "library_page_device_albums": "Albums on Device",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping", "multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping", "multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
"no_assets_to_show": "No assets to show", "no_assets_to_show": "No assets to show",
"no_name": "No name",
"notification_permission_dialog_cancel": "Cancel", "notification_permission_dialog_cancel": "Cancel",
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.", "notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
"notification_permission_dialog_settings": "Settings", "notification_permission_dialog_settings": "Settings",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Error occurred", "scaffold_body_error_occurred": "Error occurred",
"search_bar_hint": "Search your photos", "search_bar_hint": "Search your photos",
"search_filter_apply": "Apply filter", "search_filter_apply": "Apply filter",
"search_filter_camera": "Camera",
"search_filter_camera_make": "Make", "search_filter_camera_make": "Make",
"search_filter_camera_model": "Model", "search_filter_camera_model": "Model",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "Archive", "search_filter_display_option_archive": "Archive",
"search_filter_display_option_favorite": "Favorite", "search_filter_display_option_favorite": "Favorite",
"search_filter_display_option_not_in_album": "Not in album", "search_filter_display_option_not_in_album": "Not in album",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "City", "search_filter_location_city": "City",
"search_filter_location_country": "Country", "search_filter_location_country": "Country",
"search_filter_location_state": "State", "search_filter_location_state": "State",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "All", "search_filter_media_type_all": "All",
"search_filter_media_type_image": "Image", "search_filter_media_type_image": "Image",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "Video", "search_filter_media_type_video": "Video",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "Categories", "search_page_categories": "Categories",
"search_page_favorites": "Favorites", "search_page_favorites": "Favorites",
"search_page_motion_photos": "Motion Photos", "search_page_motion_photos": "Motion Photos",
+37 -16
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Cancel", "action_common_cancel": "Cancel",
"action_common_clear": "Clear", "action_common_clear": "Clear",
"action_common_confirm": "Confirm", "action_common_confirm": "Confirm",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "Update", "action_common_update": "Update",
"add_to_album_bottom_sheet_added": "Added to {album}", "add_to_album_bottom_sheet_added": "Added to {album}",
"add_to_album_bottom_sheet_already_exists": "Already in {album}", "add_to_album_bottom_sheet_already_exists": "Already in {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "New Password", "change_password_form_new_password": "New Password",
"change_password_form_password_mismatch": "Passwords do not match", "change_password_form_password_mismatch": "Passwords do not match",
"change_password_form_reenter_new_password": "Re-enter New Password", "change_password_form_reenter_new_password": "Re-enter New Password",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "Add to album", "common_add_to_album": "Add to album",
"common_change_password": "Change Password", "common_change_password": "Change Password",
"common_create_new_album": "Create new album", "common_create_new_album": "Create new album",
"common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.", "common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.",
"common_shared": "Shared", "common_shared": "Shared",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "Add to album", "control_bottom_app_bar_add_to_album": "Add to album",
"control_bottom_app_bar_album_info": "{} items", "control_bottom_app_bar_album_info": "{} items",
"control_bottom_app_bar_album_info_shared": "{} items · Shared", "control_bottom_app_bar_album_info_shared": "{} items · Shared",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Delete", "control_bottom_app_bar_delete": "Delete",
"control_bottom_app_bar_delete_from_immich": "Delete from Immich", "control_bottom_app_bar_delete_from_immich": "Delete from Immich",
"control_bottom_app_bar_delete_from_local": "Delete from device", "control_bottom_app_bar_delete_from_local": "Delete from device",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "Edit Location", "control_bottom_app_bar_edit_location": "Edit Location",
"control_bottom_app_bar_edit_time": "Edit Date & Time", "control_bottom_app_bar_edit_time": "Edit Date & Time",
"control_bottom_app_bar_favorite": "Favorite", "control_bottom_app_bar_favorite": "Favorite",
@@ -188,7 +201,7 @@
"delete_shared_link_dialog_title": "Delete Shared Link", "delete_shared_link_dialog_title": "Delete Shared Link",
"description_input_hint_text": "Add description...", "description_input_hint_text": "Add description...",
"description_input_submit_error": "Error updating description, check the log for more details", "description_input_submit_error": "Error updating description, check the log for more details",
"edit_date_time_dialog_date_time": "Date and Time", "edit_date_time_dialog_date_time": "Edit date and time",
"edit_date_time_dialog_timezone": "Timezone", "edit_date_time_dialog_timezone": "Timezone",
"edit_location_dialog_title": "Location", "edit_location_dialog_title": "Location",
"exif_bottom_sheet_description": "Add Description...", "exif_bottom_sheet_description": "Add Description...",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Experimental", "experimental_settings_title": "Experimental",
"favorites_page_no_favorites": "No favorite assets found", "favorites_page_no_favorites": "No favorite assets found",
"favorites_page_title": "Favorites", "favorites_page_title": "Favorites",
"filename_search": "File name or extension",
"haptic_feedback_switch": "Enable haptic feedback", "haptic_feedback_switch": "Enable haptic feedback",
"haptic_feedback_title": "Haptic Feedback", "haptic_feedback_title": "Haptic Feedback",
"header_settings_add_header_tip": "Add Header", "header_settings_add_header_tip": "Add Header",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Download Started", "image_viewer_page_state_provider_download_started": "Download Started",
"image_viewer_page_state_provider_download_success": "Download Success", "image_viewer_page_state_provider_download_success": "Download Success",
"image_viewer_page_state_provider_share_error": "Share Error", "image_viewer_page_state_provider_share_error": "Share Error",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "Albums", "library_page_albums": "Albums",
"library_page_archive": "Archive", "library_page_archive": "Archive",
"library_page_device_albums": "Albums on Device", "library_page_device_albums": "Albums on Device",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping", "multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping", "multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
"no_assets_to_show": "No assets to show", "no_assets_to_show": "No assets to show",
"no_name": "No name",
"notification_permission_dialog_cancel": "Cancel", "notification_permission_dialog_cancel": "Cancel",
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.", "notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
"notification_permission_dialog_settings": "Settings", "notification_permission_dialog_settings": "Settings",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Error occurred", "scaffold_body_error_occurred": "Error occurred",
"search_bar_hint": "Search your photos", "search_bar_hint": "Search your photos",
"search_filter_apply": "Apply filter", "search_filter_apply": "Apply filter",
"search_filter_camera": "Camera",
"search_filter_camera_make": "Make", "search_filter_camera_make": "Make",
"search_filter_camera_model": "Model", "search_filter_camera_model": "Model",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "Archive", "search_filter_display_option_archive": "Archive",
"search_filter_display_option_favorite": "Favorite", "search_filter_display_option_favorite": "Favorite",
"search_filter_display_option_not_in_album": "Not in album", "search_filter_display_option_not_in_album": "Not in album",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "City", "search_filter_location_city": "City",
"search_filter_location_country": "Country", "search_filter_location_country": "Country",
"search_filter_location_state": "State", "search_filter_location_state": "State",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "All", "search_filter_media_type_all": "All",
"search_filter_media_type_image": "Image", "search_filter_media_type_image": "Image",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "Video", "search_filter_media_type_video": "Video",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "Categories", "search_page_categories": "Categories",
"search_page_favorites": "Favorites", "search_page_favorites": "Favorites",
"search_page_motion_photos": "Motion Photos", "search_page_motion_photos": "Motion Photos",
@@ -501,6 +531,11 @@
"theme_setting_dark_mode_switch": "Dark mode", "theme_setting_dark_mode_switch": "Dark mode",
"theme_setting_image_viewer_quality_subtitle": "Adjust the quality of the detail image viewer", "theme_setting_image_viewer_quality_subtitle": "Adjust the quality of the detail image viewer",
"theme_setting_image_viewer_quality_title": "Image viewer quality", "theme_setting_image_viewer_quality_title": "Image viewer quality",
"theme_setting_primary_color_title": "Primary color",
"theme_setting_primary_color_subtitle": "Pick a color for primary actions and accents.",
"theme_setting_colorful_interface_title": "Colorful interface",
"theme_setting_colorful_interface_subtitle": "Apply primary color to background surfaces.",
"theme_setting_system_primary_color_title": "Use system color",
"theme_setting_system_theme_switch": "Automatic (Follow system setting)", "theme_setting_system_theme_switch": "Automatic (Follow system setting)",
"theme_setting_theme_subtitle": "Choose the app's theme setting", "theme_setting_theme_subtitle": "Choose the app's theme setting",
"theme_setting_theme_title": "Theme", "theme_setting_theme_title": "Theme",
@@ -531,19 +566,5 @@
"version_announcement_overlay_title": "New Server Version Available \uD83C\uDF89", "version_announcement_overlay_title": "New Server Version Available \uD83C\uDF89",
"viewer_remove_from_stack": "Remove from Stack", "viewer_remove_from_stack": "Remove from Stack",
"viewer_stack_use_as_main_asset": "Use as Main Asset", "viewer_stack_use_as_main_asset": "Use as Main Asset",
"viewer_unstack": "Un-Stack", "viewer_unstack": "Un-Stack"
"header_settings_header_name_input": "Header name",
"header_settings_header_value_input": "Header value",
"header_settings_page_title": "Proxy Headers",
"header_settings_add_header_tip": "Add Header",
"header_settings_field_validator_msg": "Value cannot be empty",
"client_cert_title": "SSL Client Certificate",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_import": "Import",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password"
} }
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Cancelar", "action_common_cancel": "Cancelar",
"action_common_clear": "Limpiar", "action_common_clear": "Limpiar",
"action_common_confirm": "Confirmar", "action_common_confirm": "Confirmar",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "Actualizar", "action_common_update": "Actualizar",
"add_to_album_bottom_sheet_added": "Agregado a {album}", "add_to_album_bottom_sheet_added": "Agregado a {album}",
"add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}", "add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "Nueva Contraseña", "change_password_form_new_password": "Nueva Contraseña",
"change_password_form_password_mismatch": "Las contraseñas no coinciden", "change_password_form_password_mismatch": "Las contraseñas no coinciden",
"change_password_form_reenter_new_password": "Vuelve a ingresar la nueva contraseña", "change_password_form_reenter_new_password": "Vuelve a ingresar la nueva contraseña",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "Agregar al álbum", "common_add_to_album": "Agregar al álbum",
"common_change_password": "Cambiar Contraseña", "common_change_password": "Cambiar Contraseña",
"common_create_new_album": "Crear nuevo álbum", "common_create_new_album": "Crear nuevo álbum",
"common_server_error": "Por favor, verifica tu conexión de red, asegúrate de que el servidor esté accesible y las versiones de la aplicación y del servidor sean compatibles.", "common_server_error": "Por favor, verifica tu conexión de red, asegúrate de que el servidor esté accesible y las versiones de la aplicación y del servidor sean compatibles.",
"common_shared": "Compartido", "common_shared": "Compartido",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "Agregar al álbum", "control_bottom_app_bar_add_to_album": "Agregar al álbum",
"control_bottom_app_bar_album_info": "{} elementos", "control_bottom_app_bar_album_info": "{} elementos",
"control_bottom_app_bar_album_info_shared": "{} elementos · Compartidos", "control_bottom_app_bar_album_info_shared": "{} elementos · Compartidos",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Eliminar", "control_bottom_app_bar_delete": "Eliminar",
"control_bottom_app_bar_delete_from_immich": "Borrar de Immich", "control_bottom_app_bar_delete_from_immich": "Borrar de Immich",
"control_bottom_app_bar_delete_from_local": "Borrar del dispositivo", "control_bottom_app_bar_delete_from_local": "Borrar del dispositivo",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "Editar ubicación", "control_bottom_app_bar_edit_location": "Editar ubicación",
"control_bottom_app_bar_edit_time": "Editar fecha y hora", "control_bottom_app_bar_edit_time": "Editar fecha y hora",
"control_bottom_app_bar_favorite": "Favorito", "control_bottom_app_bar_favorite": "Favorito",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Experimental", "experimental_settings_title": "Experimental",
"favorites_page_no_favorites": "No se encontraron elementos marcados como favoritos", "favorites_page_no_favorites": "No se encontraron elementos marcados como favoritos",
"favorites_page_title": "Favoritos", "favorites_page_title": "Favoritos",
"filename_search": "File name or extension",
"haptic_feedback_switch": "Activar respuesta háptica", "haptic_feedback_switch": "Activar respuesta háptica",
"haptic_feedback_title": "Respuesta Háptica", "haptic_feedback_title": "Respuesta Háptica",
"header_settings_add_header_tip": "Añadir cabecera", "header_settings_add_header_tip": "Añadir cabecera",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Descarga Iniciada", "image_viewer_page_state_provider_download_started": "Descarga Iniciada",
"image_viewer_page_state_provider_download_success": "Descarga exitosa", "image_viewer_page_state_provider_download_success": "Descarga exitosa",
"image_viewer_page_state_provider_share_error": "Error al compartir", "image_viewer_page_state_provider_share_error": "Error al compartir",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "Álbumes", "library_page_albums": "Álbumes",
"library_page_archive": "Archivo", "library_page_archive": "Archivo",
"library_page_device_albums": "Álbumes en el dispositivo", "library_page_device_albums": "Álbumes en el dispositivo",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "No se puede cambiar la fecha del archivo(s) de solo lectura, omitiendo", "multiselect_grid_edit_date_time_err_read_only": "No se puede cambiar la fecha del archivo(s) de solo lectura, omitiendo",
"multiselect_grid_edit_gps_err_read_only": "No se puede cambiar la localización de archivos de solo lectura. Saltando.", "multiselect_grid_edit_gps_err_read_only": "No se puede cambiar la localización de archivos de solo lectura. Saltando.",
"no_assets_to_show": "No hay elementos a mostrar", "no_assets_to_show": "No hay elementos a mostrar",
"no_name": "No name",
"notification_permission_dialog_cancel": "Cancelar", "notification_permission_dialog_cancel": "Cancelar",
"notification_permission_dialog_content": "Para activar las notificaciones, ve a Configuración y selecciona permitir.", "notification_permission_dialog_content": "Para activar las notificaciones, ve a Configuración y selecciona permitir.",
"notification_permission_dialog_settings": "Ajustes", "notification_permission_dialog_settings": "Ajustes",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Ha ocurrido un error", "scaffold_body_error_occurred": "Ha ocurrido un error",
"search_bar_hint": "Busca tus fotos", "search_bar_hint": "Busca tus fotos",
"search_filter_apply": "Aplicar filtros", "search_filter_apply": "Aplicar filtros",
"search_filter_camera": "Camera",
"search_filter_camera_make": "Marca", "search_filter_camera_make": "Marca",
"search_filter_camera_model": "Modelo", "search_filter_camera_model": "Modelo",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "Archivado", "search_filter_display_option_archive": "Archivado",
"search_filter_display_option_favorite": "Favorito", "search_filter_display_option_favorite": "Favorito",
"search_filter_display_option_not_in_album": "No en álbum", "search_filter_display_option_not_in_album": "No en álbum",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "Ciudad", "search_filter_location_city": "Ciudad",
"search_filter_location_country": "País", "search_filter_location_country": "País",
"search_filter_location_state": "Estado", "search_filter_location_state": "Estado",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "Todos", "search_filter_media_type_all": "Todos",
"search_filter_media_type_image": "Imagen", "search_filter_media_type_image": "Imagen",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "Vídeo", "search_filter_media_type_video": "Vídeo",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "Categorías", "search_page_categories": "Categorías",
"search_page_favorites": "Favoritos", "search_page_favorites": "Favoritos",
"search_page_motion_photos": "Foto en Movimiento", "search_page_motion_photos": "Foto en Movimiento",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Cancel", "action_common_cancel": "Cancel",
"action_common_clear": "Clear", "action_common_clear": "Clear",
"action_common_confirm": "Confirm", "action_common_confirm": "Confirm",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "Update", "action_common_update": "Update",
"add_to_album_bottom_sheet_added": "Agregado a {album}", "add_to_album_bottom_sheet_added": "Agregado a {album}",
"add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}", "add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "Nueva Contraseña", "change_password_form_new_password": "Nueva Contraseña",
"change_password_form_password_mismatch": "Las contraseñas no coinciden", "change_password_form_password_mismatch": "Las contraseñas no coinciden",
"change_password_form_reenter_new_password": "Vuelve a ingresar la nueva contraseña", "change_password_form_reenter_new_password": "Vuelve a ingresar la nueva contraseña",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "Agregar al álbum", "common_add_to_album": "Agregar al álbum",
"common_change_password": "Cambiar Contraseña", "common_change_password": "Cambiar Contraseña",
"common_create_new_album": "Crear nuevo álbum", "common_create_new_album": "Crear nuevo álbum",
"common_server_error": "Por favor, verifica tu conexión de red, asegúrate de que el servidor esté accesible y las versiones de la aplicación y del servidor sean compatibles.", "common_server_error": "Por favor, verifica tu conexión de red, asegúrate de que el servidor esté accesible y las versiones de la aplicación y del servidor sean compatibles.",
"common_shared": "Compartido", "common_shared": "Compartido",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "Agregar al álbum", "control_bottom_app_bar_add_to_album": "Agregar al álbum",
"control_bottom_app_bar_album_info": "{} elementos", "control_bottom_app_bar_album_info": "{} elementos",
"control_bottom_app_bar_album_info_shared": "{} elementos · Compartidos", "control_bottom_app_bar_album_info_shared": "{} elementos · Compartidos",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Eliminar", "control_bottom_app_bar_delete": "Eliminar",
"control_bottom_app_bar_delete_from_immich": "Delete from Immich", "control_bottom_app_bar_delete_from_immich": "Delete from Immich",
"control_bottom_app_bar_delete_from_local": "Delete from device", "control_bottom_app_bar_delete_from_local": "Delete from device",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "Edit Location", "control_bottom_app_bar_edit_location": "Edit Location",
"control_bottom_app_bar_edit_time": "Edit Date & Time", "control_bottom_app_bar_edit_time": "Edit Date & Time",
"control_bottom_app_bar_favorite": "Favorito", "control_bottom_app_bar_favorite": "Favorito",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Experimental", "experimental_settings_title": "Experimental",
"favorites_page_no_favorites": "No se encontraron recursos marcados como favoritos", "favorites_page_no_favorites": "No se encontraron recursos marcados como favoritos",
"favorites_page_title": "Favoritos", "favorites_page_title": "Favoritos",
"filename_search": "File name or extension",
"haptic_feedback_switch": "Enable haptic feedback", "haptic_feedback_switch": "Enable haptic feedback",
"haptic_feedback_title": "Haptic Feedback", "haptic_feedback_title": "Haptic Feedback",
"header_settings_add_header_tip": "Add Header", "header_settings_add_header_tip": "Add Header",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Download Started", "image_viewer_page_state_provider_download_started": "Download Started",
"image_viewer_page_state_provider_download_success": "Descarga exitosa", "image_viewer_page_state_provider_download_success": "Descarga exitosa",
"image_viewer_page_state_provider_share_error": "Error al compartir", "image_viewer_page_state_provider_share_error": "Error al compartir",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "Álbumes", "library_page_albums": "Álbumes",
"library_page_archive": "Archivo", "library_page_archive": "Archivo",
"library_page_device_albums": "Álbumes en el dispositivo", "library_page_device_albums": "Álbumes en el dispositivo",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping", "multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping", "multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
"no_assets_to_show": "No assets to show", "no_assets_to_show": "No assets to show",
"no_name": "No name",
"notification_permission_dialog_cancel": "Cancelar", "notification_permission_dialog_cancel": "Cancelar",
"notification_permission_dialog_content": "Para activar las notificaciones, ve a Configuración y selecciona permitir.", "notification_permission_dialog_content": "Para activar las notificaciones, ve a Configuración y selecciona permitir.",
"notification_permission_dialog_settings": "Ajustes", "notification_permission_dialog_settings": "Ajustes",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Error occurred", "scaffold_body_error_occurred": "Error occurred",
"search_bar_hint": "Busca tus fotos", "search_bar_hint": "Busca tus fotos",
"search_filter_apply": "Apply filter", "search_filter_apply": "Apply filter",
"search_filter_camera": "Camera",
"search_filter_camera_make": "Make", "search_filter_camera_make": "Make",
"search_filter_camera_model": "Model", "search_filter_camera_model": "Model",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "Archive", "search_filter_display_option_archive": "Archive",
"search_filter_display_option_favorite": "Favorite", "search_filter_display_option_favorite": "Favorite",
"search_filter_display_option_not_in_album": "Not in album", "search_filter_display_option_not_in_album": "Not in album",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "City", "search_filter_location_city": "City",
"search_filter_location_country": "Country", "search_filter_location_country": "Country",
"search_filter_location_state": "State", "search_filter_location_state": "State",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "All", "search_filter_media_type_all": "All",
"search_filter_media_type_image": "Image", "search_filter_media_type_image": "Image",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "Video", "search_filter_media_type_video": "Video",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "Categorías", "search_page_categories": "Categorías",
"search_page_favorites": "Favoritos", "search_page_favorites": "Favoritos",
"search_page_motion_photos": "Foto en Movimiento", "search_page_motion_photos": "Foto en Movimiento",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Cancel", "action_common_cancel": "Cancel",
"action_common_clear": "Clear", "action_common_clear": "Clear",
"action_common_confirm": "Confirm", "action_common_confirm": "Confirm",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "Update", "action_common_update": "Update",
"add_to_album_bottom_sheet_added": "Agregado a {album}", "add_to_album_bottom_sheet_added": "Agregado a {album}",
"add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}", "add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "Nueva Contraseña", "change_password_form_new_password": "Nueva Contraseña",
"change_password_form_password_mismatch": "Las contraseñas no coinciden", "change_password_form_password_mismatch": "Las contraseñas no coinciden",
"change_password_form_reenter_new_password": "Vuelve a ingresar la nueva contraseña", "change_password_form_reenter_new_password": "Vuelve a ingresar la nueva contraseña",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "Agregar al álbum", "common_add_to_album": "Agregar al álbum",
"common_change_password": "Cambiar Contraseña", "common_change_password": "Cambiar Contraseña",
"common_create_new_album": "Crear nuevo álbum", "common_create_new_album": "Crear nuevo álbum",
"common_server_error": "Por favor, verifica tu conexión de red, asegúrate de que el servidor esté accesible y las versiones de la aplicación y del servidor sean compatibles.", "common_server_error": "Por favor, verifica tu conexión de red, asegúrate de que el servidor esté accesible y las versiones de la aplicación y del servidor sean compatibles.",
"common_shared": "Compartido", "common_shared": "Compartido",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "Agregar al álbum", "control_bottom_app_bar_add_to_album": "Agregar al álbum",
"control_bottom_app_bar_album_info": "{} elementos", "control_bottom_app_bar_album_info": "{} elementos",
"control_bottom_app_bar_album_info_shared": "{} elementos · Compartidos", "control_bottom_app_bar_album_info_shared": "{} elementos · Compartidos",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Eliminar", "control_bottom_app_bar_delete": "Eliminar",
"control_bottom_app_bar_delete_from_immich": "Delete from Immich", "control_bottom_app_bar_delete_from_immich": "Delete from Immich",
"control_bottom_app_bar_delete_from_local": "Delete from device", "control_bottom_app_bar_delete_from_local": "Delete from device",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "Edit Location", "control_bottom_app_bar_edit_location": "Edit Location",
"control_bottom_app_bar_edit_time": "Edit Date & Time", "control_bottom_app_bar_edit_time": "Edit Date & Time",
"control_bottom_app_bar_favorite": "Favorito", "control_bottom_app_bar_favorite": "Favorito",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Experimental", "experimental_settings_title": "Experimental",
"favorites_page_no_favorites": "No se encontraron recursos marcados como favoritos", "favorites_page_no_favorites": "No se encontraron recursos marcados como favoritos",
"favorites_page_title": "Favoritos", "favorites_page_title": "Favoritos",
"filename_search": "File name or extension",
"haptic_feedback_switch": "Enable haptic feedback", "haptic_feedback_switch": "Enable haptic feedback",
"haptic_feedback_title": "Haptic Feedback", "haptic_feedback_title": "Haptic Feedback",
"header_settings_add_header_tip": "Add Header", "header_settings_add_header_tip": "Add Header",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Download Started", "image_viewer_page_state_provider_download_started": "Download Started",
"image_viewer_page_state_provider_download_success": "Descarga exitosa", "image_viewer_page_state_provider_download_success": "Descarga exitosa",
"image_viewer_page_state_provider_share_error": "Error al compartir", "image_viewer_page_state_provider_share_error": "Error al compartir",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "Álbumes", "library_page_albums": "Álbumes",
"library_page_archive": "Archivo", "library_page_archive": "Archivo",
"library_page_device_albums": "Álbumes en el dispositivo", "library_page_device_albums": "Álbumes en el dispositivo",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping", "multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping", "multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
"no_assets_to_show": "No assets to show", "no_assets_to_show": "No assets to show",
"no_name": "No name",
"notification_permission_dialog_cancel": "Cancelar", "notification_permission_dialog_cancel": "Cancelar",
"notification_permission_dialog_content": "Para activar las notificaciones, ve a Configuración y selecciona permitir.", "notification_permission_dialog_content": "Para activar las notificaciones, ve a Configuración y selecciona permitir.",
"notification_permission_dialog_settings": "Ajustes", "notification_permission_dialog_settings": "Ajustes",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Error occurred", "scaffold_body_error_occurred": "Error occurred",
"search_bar_hint": "Busca tus fotos", "search_bar_hint": "Busca tus fotos",
"search_filter_apply": "Apply filter", "search_filter_apply": "Apply filter",
"search_filter_camera": "Camera",
"search_filter_camera_make": "Make", "search_filter_camera_make": "Make",
"search_filter_camera_model": "Model", "search_filter_camera_model": "Model",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "Archive", "search_filter_display_option_archive": "Archive",
"search_filter_display_option_favorite": "Favorite", "search_filter_display_option_favorite": "Favorite",
"search_filter_display_option_not_in_album": "Not in album", "search_filter_display_option_not_in_album": "Not in album",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "City", "search_filter_location_city": "City",
"search_filter_location_country": "Country", "search_filter_location_country": "Country",
"search_filter_location_state": "State", "search_filter_location_state": "State",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "All", "search_filter_media_type_all": "All",
"search_filter_media_type_image": "Image", "search_filter_media_type_image": "Image",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "Video", "search_filter_media_type_video": "Video",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "Categorías", "search_page_categories": "Categorías",
"search_page_favorites": "Favoritos", "search_page_favorites": "Favoritos",
"search_page_motion_photos": "Foto en Movimiento", "search_page_motion_photos": "Foto en Movimiento",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Cancel", "action_common_cancel": "Cancel",
"action_common_clear": "Clear", "action_common_clear": "Clear",
"action_common_confirm": "Confirm", "action_common_confirm": "Confirm",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "Update", "action_common_update": "Update",
"add_to_album_bottom_sheet_added": "Agregado a {album}", "add_to_album_bottom_sheet_added": "Agregado a {album}",
"add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}", "add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "Nueva Contraseña", "change_password_form_new_password": "Nueva Contraseña",
"change_password_form_password_mismatch": "Las contraseñas no coinciden", "change_password_form_password_mismatch": "Las contraseñas no coinciden",
"change_password_form_reenter_new_password": "Vuelve a ingresar la nueva contraseña", "change_password_form_reenter_new_password": "Vuelve a ingresar la nueva contraseña",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "Agregar al álbum", "common_add_to_album": "Agregar al álbum",
"common_change_password": "Cambiar Contraseña", "common_change_password": "Cambiar Contraseña",
"common_create_new_album": "Crear nuevo álbum", "common_create_new_album": "Crear nuevo álbum",
"common_server_error": "Por favor, verifica tu conexión de red, asegúrate de que el servidor esté accesible y las versiones de la aplicación y del servidor sean compatibles.", "common_server_error": "Por favor, verifica tu conexión de red, asegúrate de que el servidor esté accesible y las versiones de la aplicación y del servidor sean compatibles.",
"common_shared": "Compartido", "common_shared": "Compartido",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "Agregar al álbum", "control_bottom_app_bar_add_to_album": "Agregar al álbum",
"control_bottom_app_bar_album_info": "{} elementos", "control_bottom_app_bar_album_info": "{} elementos",
"control_bottom_app_bar_album_info_shared": "{} elementos · Compartido", "control_bottom_app_bar_album_info_shared": "{} elementos · Compartido",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Eliminar", "control_bottom_app_bar_delete": "Eliminar",
"control_bottom_app_bar_delete_from_immich": "Delete from Immich", "control_bottom_app_bar_delete_from_immich": "Delete from Immich",
"control_bottom_app_bar_delete_from_local": "Delete from device", "control_bottom_app_bar_delete_from_local": "Delete from device",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "Edit Location", "control_bottom_app_bar_edit_location": "Edit Location",
"control_bottom_app_bar_edit_time": "Edit Date & Time", "control_bottom_app_bar_edit_time": "Edit Date & Time",
"control_bottom_app_bar_favorite": "Favorito", "control_bottom_app_bar_favorite": "Favorito",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Experimental", "experimental_settings_title": "Experimental",
"favorites_page_no_favorites": "No se encontraron recursos marcados como favoritos", "favorites_page_no_favorites": "No se encontraron recursos marcados como favoritos",
"favorites_page_title": "Favoritos", "favorites_page_title": "Favoritos",
"filename_search": "File name or extension",
"haptic_feedback_switch": "Enable haptic feedback", "haptic_feedback_switch": "Enable haptic feedback",
"haptic_feedback_title": "Haptic Feedback", "haptic_feedback_title": "Haptic Feedback",
"header_settings_add_header_tip": "Add Header", "header_settings_add_header_tip": "Add Header",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Download Started", "image_viewer_page_state_provider_download_started": "Download Started",
"image_viewer_page_state_provider_download_success": "Descarga exitosa", "image_viewer_page_state_provider_download_success": "Descarga exitosa",
"image_viewer_page_state_provider_share_error": "Error al compartir", "image_viewer_page_state_provider_share_error": "Error al compartir",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "Álbumes", "library_page_albums": "Álbumes",
"library_page_archive": "Archivo", "library_page_archive": "Archivo",
"library_page_device_albums": "Álbumes en el dispositivo", "library_page_device_albums": "Álbumes en el dispositivo",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping", "multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping", "multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
"no_assets_to_show": "No assets to show", "no_assets_to_show": "No assets to show",
"no_name": "No name",
"notification_permission_dialog_cancel": "Cancelar", "notification_permission_dialog_cancel": "Cancelar",
"notification_permission_dialog_content": "Para activar las notificaciones, ve a Configuración y selecciona permitir.", "notification_permission_dialog_content": "Para activar las notificaciones, ve a Configuración y selecciona permitir.",
"notification_permission_dialog_settings": "Configuración", "notification_permission_dialog_settings": "Configuración",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Error occurred", "scaffold_body_error_occurred": "Error occurred",
"search_bar_hint": "Busca tus fotos", "search_bar_hint": "Busca tus fotos",
"search_filter_apply": "Apply filter", "search_filter_apply": "Apply filter",
"search_filter_camera": "Camera",
"search_filter_camera_make": "Make", "search_filter_camera_make": "Make",
"search_filter_camera_model": "Model", "search_filter_camera_model": "Model",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "Archive", "search_filter_display_option_archive": "Archive",
"search_filter_display_option_favorite": "Favorite", "search_filter_display_option_favorite": "Favorite",
"search_filter_display_option_not_in_album": "Not in album", "search_filter_display_option_not_in_album": "Not in album",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "City", "search_filter_location_city": "City",
"search_filter_location_country": "Country", "search_filter_location_country": "Country",
"search_filter_location_state": "State", "search_filter_location_state": "State",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "All", "search_filter_media_type_all": "All",
"search_filter_media_type_image": "Image", "search_filter_media_type_image": "Image",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "Video", "search_filter_media_type_video": "Video",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "Categorías", "search_page_categories": "Categorías",
"search_page_favorites": "Favoritos", "search_page_favorites": "Favoritos",
"search_page_motion_photos": "Fotos en .ovimiento", "search_page_motion_photos": "Fotos en .ovimiento",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Peruuta", "action_common_cancel": "Peruuta",
"action_common_clear": "Tyhjennä", "action_common_clear": "Tyhjennä",
"action_common_confirm": "Vahvista", "action_common_confirm": "Vahvista",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "Päivitä", "action_common_update": "Päivitä",
"add_to_album_bottom_sheet_added": "Lisätty albumiin {album}", "add_to_album_bottom_sheet_added": "Lisätty albumiin {album}",
"add_to_album_bottom_sheet_already_exists": "Kohde on jo albumissa {album}", "add_to_album_bottom_sheet_already_exists": "Kohde on jo albumissa {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "Uusi salasana", "change_password_form_new_password": "Uusi salasana",
"change_password_form_password_mismatch": "Salasanat eivät täsmää", "change_password_form_password_mismatch": "Salasanat eivät täsmää",
"change_password_form_reenter_new_password": "Uusi salasana uudelleen", "change_password_form_reenter_new_password": "Uusi salasana uudelleen",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "Lisää albumiin", "common_add_to_album": "Lisää albumiin",
"common_change_password": "Vaihda salasana", "common_change_password": "Vaihda salasana",
"common_create_new_album": "Luo uusi albumi", "common_create_new_album": "Luo uusi albumi",
"common_server_error": "Tarkista internet-yhteytesi. Varmista että palvelin on saavutettavissa ja sovellus-/palvelinversiot ovat yhteensopivia.", "common_server_error": "Tarkista internet-yhteytesi. Varmista että palvelin on saavutettavissa ja sovellus-/palvelinversiot ovat yhteensopivia.",
"common_shared": "Jaettu", "common_shared": "Jaettu",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "Lisää albumiin", "control_bottom_app_bar_add_to_album": "Lisää albumiin",
"control_bottom_app_bar_album_info": "{} kohdetta", "control_bottom_app_bar_album_info": "{} kohdetta",
"control_bottom_app_bar_album_info_shared": "{} kohdetta · Jaettu", "control_bottom_app_bar_album_info_shared": "{} kohdetta · Jaettu",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Poista", "control_bottom_app_bar_delete": "Poista",
"control_bottom_app_bar_delete_from_immich": "Poista Immichistä", "control_bottom_app_bar_delete_from_immich": "Poista Immichistä",
"control_bottom_app_bar_delete_from_local": "Poista laitteelta", "control_bottom_app_bar_delete_from_local": "Poista laitteelta",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "Muokkaa sijaintia", "control_bottom_app_bar_edit_location": "Muokkaa sijaintia",
"control_bottom_app_bar_edit_time": "Muokkaa aikaa", "control_bottom_app_bar_edit_time": "Muokkaa aikaa",
"control_bottom_app_bar_favorite": "Suosikki", "control_bottom_app_bar_favorite": "Suosikki",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Kokeellinen", "experimental_settings_title": "Kokeellinen",
"favorites_page_no_favorites": "Suosikkikohteita ei löytynyt", "favorites_page_no_favorites": "Suosikkikohteita ei löytynyt",
"favorites_page_title": "Suosikit", "favorites_page_title": "Suosikit",
"filename_search": "File name or extension",
"haptic_feedback_switch": "Ota haptinen palaute käyttöön", "haptic_feedback_switch": "Ota haptinen palaute käyttöön",
"haptic_feedback_title": "Haptinen palaute", "haptic_feedback_title": "Haptinen palaute",
"header_settings_add_header_tip": "Add Header", "header_settings_add_header_tip": "Add Header",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Lataaminen aloitettu", "image_viewer_page_state_provider_download_started": "Lataaminen aloitettu",
"image_viewer_page_state_provider_download_success": "Lataus onnistui", "image_viewer_page_state_provider_download_success": "Lataus onnistui",
"image_viewer_page_state_provider_share_error": "Jakovirhe", "image_viewer_page_state_provider_share_error": "Jakovirhe",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "Albumit", "library_page_albums": "Albumit",
"library_page_archive": "Arkisto", "library_page_archive": "Arkisto",
"library_page_device_albums": "Laitteen albumit", "library_page_device_albums": "Laitteen albumit",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "Vain luku -tilassa olevien kohteiden päivämäärää ei voitu muokata, ohitetaan", "multiselect_grid_edit_date_time_err_read_only": "Vain luku -tilassa olevien kohteiden päivämäärää ei voitu muokata, ohitetaan",
"multiselect_grid_edit_gps_err_read_only": "Vain luku-tilassa olevien kohteiden sijantitietoja ei voitu muokata, ohitetaan", "multiselect_grid_edit_gps_err_read_only": "Vain luku-tilassa olevien kohteiden sijantitietoja ei voitu muokata, ohitetaan",
"no_assets_to_show": "Ei näytettäviä kohteita", "no_assets_to_show": "Ei näytettäviä kohteita",
"no_name": "No name",
"notification_permission_dialog_cancel": "Peruuta", "notification_permission_dialog_cancel": "Peruuta",
"notification_permission_dialog_content": "Ottaaksesi ilmoitukset käyttöön, siirry asetuksiin ja valitse 'salli'.", "notification_permission_dialog_content": "Ottaaksesi ilmoitukset käyttöön, siirry asetuksiin ja valitse 'salli'.",
"notification_permission_dialog_settings": "Asetukset", "notification_permission_dialog_settings": "Asetukset",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Tapahtui virhe", "scaffold_body_error_occurred": "Tapahtui virhe",
"search_bar_hint": "Etsi kuvia", "search_bar_hint": "Etsi kuvia",
"search_filter_apply": "Käytä", "search_filter_apply": "Käytä",
"search_filter_camera": "Camera",
"search_filter_camera_make": "Valmistaja", "search_filter_camera_make": "Valmistaja",
"search_filter_camera_model": "Malli", "search_filter_camera_model": "Malli",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "Arkisto", "search_filter_display_option_archive": "Arkisto",
"search_filter_display_option_favorite": "Suosikki", "search_filter_display_option_favorite": "Suosikki",
"search_filter_display_option_not_in_album": "Ei kuulu albumiin", "search_filter_display_option_not_in_album": "Ei kuulu albumiin",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "Kaupunki", "search_filter_location_city": "Kaupunki",
"search_filter_location_country": "Maa", "search_filter_location_country": "Maa",
"search_filter_location_state": "Maakunta/osavaltio", "search_filter_location_state": "Maakunta/osavaltio",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "Kaikki", "search_filter_media_type_all": "Kaikki",
"search_filter_media_type_image": "Kuva", "search_filter_media_type_image": "Kuva",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "Video", "search_filter_media_type_video": "Video",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "Kategoriat", "search_page_categories": "Kategoriat",
"search_page_favorites": "Suosikit", "search_page_favorites": "Suosikit",
"search_page_motion_photos": "Liikekuvat", "search_page_motion_photos": "Liikekuvat",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Cancel", "action_common_cancel": "Cancel",
"action_common_clear": "Clear", "action_common_clear": "Clear",
"action_common_confirm": "Confirm", "action_common_confirm": "Confirm",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "Update", "action_common_update": "Update",
"add_to_album_bottom_sheet_added": "Ajouté à {album}", "add_to_album_bottom_sheet_added": "Ajouté à {album}",
"add_to_album_bottom_sheet_already_exists": "Déjà dans {album}", "add_to_album_bottom_sheet_already_exists": "Déjà dans {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "Nouveau mot de passe", "change_password_form_new_password": "Nouveau mot de passe",
"change_password_form_password_mismatch": "Les mots de passe ne correspondent pas", "change_password_form_password_mismatch": "Les mots de passe ne correspondent pas",
"change_password_form_reenter_new_password": "Saisissez à nouveau le nouveau mot de passe", "change_password_form_reenter_new_password": "Saisissez à nouveau le nouveau mot de passe",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "Ajouter à l'album", "common_add_to_album": "Ajouter à l'album",
"common_change_password": "Modifier le mot de passe", "common_change_password": "Modifier le mot de passe",
"common_create_new_album": "Créer un nouvel album", "common_create_new_album": "Créer un nouvel album",
"common_server_error": "Veuillez vérifier votre connexion réseau, vous assurer que le serveur est accessible et que les versions de l'application et du serveur sont compatibles.", "common_server_error": "Veuillez vérifier votre connexion réseau, vous assurer que le serveur est accessible et que les versions de l'application et du serveur sont compatibles.",
"common_shared": "Partagé", "common_shared": "Partagé",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "Ajouter à l'album", "control_bottom_app_bar_add_to_album": "Ajouter à l'album",
"control_bottom_app_bar_album_info": "{} éléments", "control_bottom_app_bar_album_info": "{} éléments",
"control_bottom_app_bar_album_info_shared": "{} éléments - Partagés", "control_bottom_app_bar_album_info_shared": "{} éléments - Partagés",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Supprimer", "control_bottom_app_bar_delete": "Supprimer",
"control_bottom_app_bar_delete_from_immich": "Delete from Immich", "control_bottom_app_bar_delete_from_immich": "Delete from Immich",
"control_bottom_app_bar_delete_from_local": "Delete from device", "control_bottom_app_bar_delete_from_local": "Delete from device",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "Edit Location", "control_bottom_app_bar_edit_location": "Edit Location",
"control_bottom_app_bar_edit_time": "Edit Date & Time", "control_bottom_app_bar_edit_time": "Edit Date & Time",
"control_bottom_app_bar_favorite": "Favoris", "control_bottom_app_bar_favorite": "Favoris",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Expérimental", "experimental_settings_title": "Expérimental",
"favorites_page_no_favorites": "Aucun élément favori n'a été trouvé", "favorites_page_no_favorites": "Aucun élément favori n'a été trouvé",
"favorites_page_title": "Favoris", "favorites_page_title": "Favoris",
"filename_search": "File name or extension",
"haptic_feedback_switch": "Enable haptic feedback", "haptic_feedback_switch": "Enable haptic feedback",
"haptic_feedback_title": "Haptic Feedback", "haptic_feedback_title": "Haptic Feedback",
"header_settings_add_header_tip": "Add Header", "header_settings_add_header_tip": "Add Header",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Download Started", "image_viewer_page_state_provider_download_started": "Download Started",
"image_viewer_page_state_provider_download_success": "Téléchargement réussi", "image_viewer_page_state_provider_download_success": "Téléchargement réussi",
"image_viewer_page_state_provider_share_error": "Erreur de partage", "image_viewer_page_state_provider_share_error": "Erreur de partage",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "Albums", "library_page_albums": "Albums",
"library_page_archive": "Archive", "library_page_archive": "Archive",
"library_page_device_albums": "Albums sur l'appareil", "library_page_device_albums": "Albums sur l'appareil",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping", "multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping", "multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
"no_assets_to_show": "No assets to show", "no_assets_to_show": "No assets to show",
"no_name": "No name",
"notification_permission_dialog_cancel": "Annuler", "notification_permission_dialog_cancel": "Annuler",
"notification_permission_dialog_content": "Pour activer les notifications, allez dans Paramètres et sélectionnez Autoriser.", "notification_permission_dialog_content": "Pour activer les notifications, allez dans Paramètres et sélectionnez Autoriser.",
"notification_permission_dialog_settings": "Paramètres", "notification_permission_dialog_settings": "Paramètres",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Error occurred", "scaffold_body_error_occurred": "Error occurred",
"search_bar_hint": "Rechercher vos photos", "search_bar_hint": "Rechercher vos photos",
"search_filter_apply": "Apply filter", "search_filter_apply": "Apply filter",
"search_filter_camera": "Camera",
"search_filter_camera_make": "Make", "search_filter_camera_make": "Make",
"search_filter_camera_model": "Model", "search_filter_camera_model": "Model",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "Archive", "search_filter_display_option_archive": "Archive",
"search_filter_display_option_favorite": "Favorite", "search_filter_display_option_favorite": "Favorite",
"search_filter_display_option_not_in_album": "Not in album", "search_filter_display_option_not_in_album": "Not in album",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "City", "search_filter_location_city": "City",
"search_filter_location_country": "Country", "search_filter_location_country": "Country",
"search_filter_location_state": "State", "search_filter_location_state": "State",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "All", "search_filter_media_type_all": "All",
"search_filter_media_type_image": "Image", "search_filter_media_type_image": "Image",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "Video", "search_filter_media_type_video": "Video",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "Catégories", "search_page_categories": "Catégories",
"search_page_favorites": "Favoris", "search_page_favorites": "Favoris",
"search_page_motion_photos": "Photos avec mouvement", "search_page_motion_photos": "Photos avec mouvement",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Annuler", "action_common_cancel": "Annuler",
"action_common_clear": "Vider", "action_common_clear": "Vider",
"action_common_confirm": "Confirmer", "action_common_confirm": "Confirmer",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "Mise à jour", "action_common_update": "Mise à jour",
"add_to_album_bottom_sheet_added": "Ajouté à {album}", "add_to_album_bottom_sheet_added": "Ajouté à {album}",
"add_to_album_bottom_sheet_already_exists": "Déjà dans {album}", "add_to_album_bottom_sheet_already_exists": "Déjà dans {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "Nouveau mot de passe", "change_password_form_new_password": "Nouveau mot de passe",
"change_password_form_password_mismatch": "Les mots de passe ne correspondent pas", "change_password_form_password_mismatch": "Les mots de passe ne correspondent pas",
"change_password_form_reenter_new_password": "Saisissez à nouveau le nouveau mot de passe", "change_password_form_reenter_new_password": "Saisissez à nouveau le nouveau mot de passe",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "Ajouter à l'album", "common_add_to_album": "Ajouter à l'album",
"common_change_password": "Modifier le mot de passe", "common_change_password": "Modifier le mot de passe",
"common_create_new_album": "Créer un nouvel album", "common_create_new_album": "Créer un nouvel album",
"common_server_error": "Veuillez vérifier votre connexion réseau, vous assurer que le serveur est accessible et que les versions de l'application et du serveur sont compatibles.", "common_server_error": "Veuillez vérifier votre connexion réseau, vous assurer que le serveur est accessible et que les versions de l'application et du serveur sont compatibles.",
"common_shared": "Partagé", "common_shared": "Partagé",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "Ajouter à l'album", "control_bottom_app_bar_add_to_album": "Ajouter à l'album",
"control_bottom_app_bar_album_info": "{} éléments", "control_bottom_app_bar_album_info": "{} éléments",
"control_bottom_app_bar_album_info_shared": "{} éléments - Partagés", "control_bottom_app_bar_album_info_shared": "{} éléments - Partagés",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Supprimer", "control_bottom_app_bar_delete": "Supprimer",
"control_bottom_app_bar_delete_from_immich": "Supprimer de Immich", "control_bottom_app_bar_delete_from_immich": "Supprimer de Immich",
"control_bottom_app_bar_delete_from_local": "Supprimer de l'appareil", "control_bottom_app_bar_delete_from_local": "Supprimer de l'appareil",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "Modifier la localisation", "control_bottom_app_bar_edit_location": "Modifier la localisation",
"control_bottom_app_bar_edit_time": "Modifier la date et l'heure", "control_bottom_app_bar_edit_time": "Modifier la date et l'heure",
"control_bottom_app_bar_favorite": "Favoris", "control_bottom_app_bar_favorite": "Favoris",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Expérimental", "experimental_settings_title": "Expérimental",
"favorites_page_no_favorites": "Aucun élément favori n'a été trouvé", "favorites_page_no_favorites": "Aucun élément favori n'a été trouvé",
"favorites_page_title": "Favoris", "favorites_page_title": "Favoris",
"filename_search": "File name or extension",
"haptic_feedback_switch": "Activer le retour haptique", "haptic_feedback_switch": "Activer le retour haptique",
"haptic_feedback_title": "Retour haptique", "haptic_feedback_title": "Retour haptique",
"header_settings_add_header_tip": "Add Header", "header_settings_add_header_tip": "Add Header",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Téléchargement Démarré", "image_viewer_page_state_provider_download_started": "Téléchargement Démarré",
"image_viewer_page_state_provider_download_success": "Téléchargement réussi", "image_viewer_page_state_provider_download_success": "Téléchargement réussi",
"image_viewer_page_state_provider_share_error": "Erreur de partage", "image_viewer_page_state_provider_share_error": "Erreur de partage",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "Albums", "library_page_albums": "Albums",
"library_page_archive": "Archive", "library_page_archive": "Archive",
"library_page_device_albums": "Albums sur l'appareil", "library_page_device_albums": "Albums sur l'appareil",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "Impossible de modifier la date d'un élément d'actif en lecture seule.", "multiselect_grid_edit_date_time_err_read_only": "Impossible de modifier la date d'un élément d'actif en lecture seule.",
"multiselect_grid_edit_gps_err_read_only": "Impossible de modifier l'emplacement d'un élément en lecture seule.", "multiselect_grid_edit_gps_err_read_only": "Impossible de modifier l'emplacement d'un élément en lecture seule.",
"no_assets_to_show": "Aucuns éléments à afficher", "no_assets_to_show": "Aucuns éléments à afficher",
"no_name": "No name",
"notification_permission_dialog_cancel": "Annuler", "notification_permission_dialog_cancel": "Annuler",
"notification_permission_dialog_content": "Pour activer les notifications, allez dans Paramètres et sélectionnez Autoriser.", "notification_permission_dialog_content": "Pour activer les notifications, allez dans Paramètres et sélectionnez Autoriser.",
"notification_permission_dialog_settings": "Paramètres", "notification_permission_dialog_settings": "Paramètres",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Une erreur s'est produite", "scaffold_body_error_occurred": "Une erreur s'est produite",
"search_bar_hint": "Rechercher vos photos", "search_bar_hint": "Rechercher vos photos",
"search_filter_apply": "Appliquer le filtre", "search_filter_apply": "Appliquer le filtre",
"search_filter_camera": "Camera",
"search_filter_camera_make": "Fabricant", "search_filter_camera_make": "Fabricant",
"search_filter_camera_model": "Modéle", "search_filter_camera_model": "Modéle",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "Achive", "search_filter_display_option_archive": "Achive",
"search_filter_display_option_favorite": "Favoris", "search_filter_display_option_favorite": "Favoris",
"search_filter_display_option_not_in_album": "Pas dans un album", "search_filter_display_option_not_in_album": "Pas dans un album",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "Ville", "search_filter_location_city": "Ville",
"search_filter_location_country": "Pays", "search_filter_location_country": "Pays",
"search_filter_location_state": "Région", "search_filter_location_state": "Région",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "Tous", "search_filter_media_type_all": "Tous",
"search_filter_media_type_image": "Image", "search_filter_media_type_image": "Image",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "Vidéo", "search_filter_media_type_video": "Vidéo",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "Catégories", "search_page_categories": "Catégories",
"search_page_favorites": "Favoris", "search_page_favorites": "Favoris",
"search_page_motion_photos": "Photos animées", "search_page_motion_photos": "Photos animées",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "ביטול", "action_common_cancel": "ביטול",
"action_common_clear": "נקה", "action_common_clear": "נקה",
"action_common_confirm": "אישור", "action_common_confirm": "אישור",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "עדכון", "action_common_update": "עדכון",
"add_to_album_bottom_sheet_added": "נוסף ל {album}", "add_to_album_bottom_sheet_added": "נוסף ל {album}",
"add_to_album_bottom_sheet_already_exists": "כבר ב {album}", "add_to_album_bottom_sheet_already_exists": "כבר ב {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "סיסמה חדשה", "change_password_form_new_password": "סיסמה חדשה",
"change_password_form_password_mismatch": "סיסמאות לא תואמות", "change_password_form_password_mismatch": "סיסמאות לא תואמות",
"change_password_form_reenter_new_password": "הכנס שוב סיסמה חדשה", "change_password_form_reenter_new_password": "הכנס שוב סיסמה חדשה",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "הוסף לאלבום", "common_add_to_album": "הוסף לאלבום",
"common_change_password": "שנה סיסמה", "common_change_password": "שנה סיסמה",
"common_create_new_album": "צור אלבום חדש", "common_create_new_album": "צור אלבום חדש",
"common_server_error": "נא לבדוק את חיבור הרשת שלך, תוודא/י שהשרת נגיש ושגרסאות אפליקציה/שרת תואמות", "common_server_error": "נא לבדוק את חיבור הרשת שלך, תוודא/י שהשרת נגיש ושגרסאות אפליקציה/שרת תואמות",
"common_shared": "משותף", "common_shared": "משותף",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "הוסף לאלבום", "control_bottom_app_bar_add_to_album": "הוסף לאלבום",
"control_bottom_app_bar_album_info": "{} פריטים", "control_bottom_app_bar_album_info": "{} פריטים",
"control_bottom_app_bar_album_info_shared": "{} פריטים · משותפים", "control_bottom_app_bar_album_info_shared": "{} פריטים · משותפים",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "מחק", "control_bottom_app_bar_delete": "מחק",
"control_bottom_app_bar_delete_from_immich": "מחק מהשרת", "control_bottom_app_bar_delete_from_immich": "מחק מהשרת",
"control_bottom_app_bar_delete_from_local": "מחק מהמכשיר", "control_bottom_app_bar_delete_from_local": "מחק מהמכשיר",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "ערוך מיקום", "control_bottom_app_bar_edit_location": "ערוך מיקום",
"control_bottom_app_bar_edit_time": "ערוך תאריך & זמן", "control_bottom_app_bar_edit_time": "ערוך תאריך & זמן",
"control_bottom_app_bar_favorite": "הוסף למועדפים", "control_bottom_app_bar_favorite": "הוסף למועדפים",
@@ -203,6 +216,7 @@
"experimental_settings_title": "נסיוני", "experimental_settings_title": "נסיוני",
"favorites_page_no_favorites": "לא נמצאו נכסים מועדפים", "favorites_page_no_favorites": "לא נמצאו נכסים מועדפים",
"favorites_page_title": "מועדפים", "favorites_page_title": "מועדפים",
"filename_search": "File name or extension",
"haptic_feedback_switch": "אפשר משוב ברטט", "haptic_feedback_switch": "אפשר משוב ברטט",
"haptic_feedback_title": "משוב ברטט", "haptic_feedback_title": "משוב ברטט",
"header_settings_add_header_tip": "הוסף כותרת", "header_settings_add_header_tip": "הוסף כותרת",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "ההורדה החלה", "image_viewer_page_state_provider_download_started": "ההורדה החלה",
"image_viewer_page_state_provider_download_success": "הצלחת הורדה", "image_viewer_page_state_provider_download_success": "הצלחת הורדה",
"image_viewer_page_state_provider_share_error": "שיתוף שגיאה", "image_viewer_page_state_provider_share_error": "שיתוף שגיאה",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "אלבומים", "library_page_albums": "אלבומים",
"library_page_archive": "ארכיון", "library_page_archive": "ארכיון",
"library_page_device_albums": "אלבומים במכשיר", "library_page_device_albums": "אלבומים במכשיר",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "לא ניתן לערוך תאריך של נכס(ים) לקריאה בלבד, מדלג", "multiselect_grid_edit_date_time_err_read_only": "לא ניתן לערוך תאריך של נכס(ים) לקריאה בלבד, מדלג",
"multiselect_grid_edit_gps_err_read_only": "לא ניתן לערוך מיקום של נכס(ים) לקריאה בלבד, מדלג", "multiselect_grid_edit_gps_err_read_only": "לא ניתן לערוך מיקום של נכס(ים) לקריאה בלבד, מדלג",
"no_assets_to_show": "אין נכסים להציג", "no_assets_to_show": "אין נכסים להציג",
"no_name": "No name",
"notification_permission_dialog_cancel": "ביטול", "notification_permission_dialog_cancel": "ביטול",
"notification_permission_dialog_content": "כדי לאפשר התראות, לך להגדרות ובחר התר", "notification_permission_dialog_content": "כדי לאפשר התראות, לך להגדרות ובחר התר",
"notification_permission_dialog_settings": "הגדרות", "notification_permission_dialog_settings": "הגדרות",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "אירעה שגיאה", "scaffold_body_error_occurred": "אירעה שגיאה",
"search_bar_hint": "חפש/י בתמונות שלך", "search_bar_hint": "חפש/י בתמונות שלך",
"search_filter_apply": "החל סינון", "search_filter_apply": "החל סינון",
"search_filter_camera": "Camera",
"search_filter_camera_make": "תוצרת", "search_filter_camera_make": "תוצרת",
"search_filter_camera_model": "דגם", "search_filter_camera_model": "דגם",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "ארכיון", "search_filter_display_option_archive": "ארכיון",
"search_filter_display_option_favorite": "מועדף", "search_filter_display_option_favorite": "מועדף",
"search_filter_display_option_not_in_album": "לא באלבום", "search_filter_display_option_not_in_album": "לא באלבום",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "עיר", "search_filter_location_city": "עיר",
"search_filter_location_country": "ארץ", "search_filter_location_country": "ארץ",
"search_filter_location_state": "מדינה", "search_filter_location_state": "מדינה",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "הכל", "search_filter_media_type_all": "הכל",
"search_filter_media_type_image": "תמונה", "search_filter_media_type_image": "תמונה",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "סרטון", "search_filter_media_type_video": "סרטון",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "קטגוריות", "search_page_categories": "קטגוריות",
"search_page_favorites": "מועדפים", "search_page_favorites": "מועדפים",
"search_page_motion_photos": "תמונות עם תנועה", "search_page_motion_photos": "תמונות עם תנועה",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Cancel", "action_common_cancel": "Cancel",
"action_common_clear": "Clear", "action_common_clear": "Clear",
"action_common_confirm": "Confirm", "action_common_confirm": "Confirm",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "Update", "action_common_update": "Update",
"add_to_album_bottom_sheet_added": "Added to {album}", "add_to_album_bottom_sheet_added": "Added to {album}",
"add_to_album_bottom_sheet_already_exists": "Already in {album}", "add_to_album_bottom_sheet_already_exists": "Already in {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "New Password", "change_password_form_new_password": "New Password",
"change_password_form_password_mismatch": "Passwords do not match", "change_password_form_password_mismatch": "Passwords do not match",
"change_password_form_reenter_new_password": "Re-enter New Password", "change_password_form_reenter_new_password": "Re-enter New Password",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "Add to album", "common_add_to_album": "Add to album",
"common_change_password": "Change Password", "common_change_password": "Change Password",
"common_create_new_album": "Create new album", "common_create_new_album": "Create new album",
"common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.", "common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.",
"common_shared": "Shared", "common_shared": "Shared",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "Add to album", "control_bottom_app_bar_add_to_album": "Add to album",
"control_bottom_app_bar_album_info": "{} items", "control_bottom_app_bar_album_info": "{} items",
"control_bottom_app_bar_album_info_shared": "{} items · Shared", "control_bottom_app_bar_album_info_shared": "{} items · Shared",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Delete", "control_bottom_app_bar_delete": "Delete",
"control_bottom_app_bar_delete_from_immich": "Delete from Immich", "control_bottom_app_bar_delete_from_immich": "Delete from Immich",
"control_bottom_app_bar_delete_from_local": "Delete from device", "control_bottom_app_bar_delete_from_local": "Delete from device",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "Edit Location", "control_bottom_app_bar_edit_location": "Edit Location",
"control_bottom_app_bar_edit_time": "Edit Date & Time", "control_bottom_app_bar_edit_time": "Edit Date & Time",
"control_bottom_app_bar_favorite": "Favorite", "control_bottom_app_bar_favorite": "Favorite",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Experimental", "experimental_settings_title": "Experimental",
"favorites_page_no_favorites": "No favorite assets found", "favorites_page_no_favorites": "No favorite assets found",
"favorites_page_title": "Favorites", "favorites_page_title": "Favorites",
"filename_search": "File name or extension",
"haptic_feedback_switch": "Enable haptic feedback", "haptic_feedback_switch": "Enable haptic feedback",
"haptic_feedback_title": "Haptic Feedback", "haptic_feedback_title": "Haptic Feedback",
"header_settings_add_header_tip": "Add Header", "header_settings_add_header_tip": "Add Header",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Download Started", "image_viewer_page_state_provider_download_started": "Download Started",
"image_viewer_page_state_provider_download_success": "Download Success", "image_viewer_page_state_provider_download_success": "Download Success",
"image_viewer_page_state_provider_share_error": "Share Error", "image_viewer_page_state_provider_share_error": "Share Error",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "Albums", "library_page_albums": "Albums",
"library_page_archive": "Archive", "library_page_archive": "Archive",
"library_page_device_albums": "Albums on Device", "library_page_device_albums": "Albums on Device",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping", "multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping", "multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
"no_assets_to_show": "No assets to show", "no_assets_to_show": "No assets to show",
"no_name": "No name",
"notification_permission_dialog_cancel": "Cancel", "notification_permission_dialog_cancel": "Cancel",
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.", "notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
"notification_permission_dialog_settings": "Settings", "notification_permission_dialog_settings": "Settings",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Error occurred", "scaffold_body_error_occurred": "Error occurred",
"search_bar_hint": "Search your photos", "search_bar_hint": "Search your photos",
"search_filter_apply": "Apply filter", "search_filter_apply": "Apply filter",
"search_filter_camera": "Camera",
"search_filter_camera_make": "Make", "search_filter_camera_make": "Make",
"search_filter_camera_model": "Model", "search_filter_camera_model": "Model",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "Archive", "search_filter_display_option_archive": "Archive",
"search_filter_display_option_favorite": "Favorite", "search_filter_display_option_favorite": "Favorite",
"search_filter_display_option_not_in_album": "Not in album", "search_filter_display_option_not_in_album": "Not in album",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "City", "search_filter_location_city": "City",
"search_filter_location_country": "Country", "search_filter_location_country": "Country",
"search_filter_location_state": "State", "search_filter_location_state": "State",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "All", "search_filter_media_type_all": "All",
"search_filter_media_type_image": "Image", "search_filter_media_type_image": "Image",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "Video", "search_filter_media_type_video": "Video",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "Categories", "search_page_categories": "Categories",
"search_page_favorites": "Favorites", "search_page_favorites": "Favorites",
"search_page_motion_photos": "Motion Photos", "search_page_motion_photos": "Motion Photos",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Mégsem", "action_common_cancel": "Mégsem",
"action_common_clear": "Kitöröl", "action_common_clear": "Kitöröl",
"action_common_confirm": "Jóváhagy", "action_common_confirm": "Jóváhagy",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "Frissít", "action_common_update": "Frissít",
"add_to_album_bottom_sheet_added": "Hozzáadva a(z) \"{album}\" albumhoz", "add_to_album_bottom_sheet_added": "Hozzáadva a(z) \"{album}\" albumhoz",
"add_to_album_bottom_sheet_already_exists": "Már benne van a(z) \"{album}\" albumban", "add_to_album_bottom_sheet_already_exists": "Már benne van a(z) \"{album}\" albumban",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "Új Jelszó", "change_password_form_new_password": "Új Jelszó",
"change_password_form_password_mismatch": "A beírt jelszavak nem egyeznek", "change_password_form_password_mismatch": "A beírt jelszavak nem egyeznek",
"change_password_form_reenter_new_password": "Jelszó (még egyszer)", "change_password_form_reenter_new_password": "Jelszó (még egyszer)",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "Albumhoz ad", "common_add_to_album": "Albumhoz ad",
"common_change_password": "Jelszócsere", "common_change_password": "Jelszócsere",
"common_create_new_album": "Új album létrehozása", "common_create_new_album": "Új album létrehozása",
"common_server_error": "Kérjük, ellenőrizd a hálózati kapcsolatot, gondoskodj róla, hogy a szerver elérhető legyen, valamint az alkalmazás és a szerver kompatibilis verziójú legyen.", "common_server_error": "Kérjük, ellenőrizd a hálózati kapcsolatot, gondoskodj róla, hogy a szerver elérhető legyen, valamint az alkalmazás és a szerver kompatibilis verziójú legyen.",
"common_shared": "Megosztva", "common_shared": "Megosztva",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "Albumhoz ad", "control_bottom_app_bar_add_to_album": "Albumhoz ad",
"control_bottom_app_bar_album_info": "{} elem", "control_bottom_app_bar_album_info": "{} elem",
"control_bottom_app_bar_album_info_shared": "{} elemek · Megosztva", "control_bottom_app_bar_album_info_shared": "{} elemek · Megosztva",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Törlés", "control_bottom_app_bar_delete": "Törlés",
"control_bottom_app_bar_delete_from_immich": "Törlés az Immich-ből", "control_bottom_app_bar_delete_from_immich": "Törlés az Immich-ből",
"control_bottom_app_bar_delete_from_local": "Törlés az eszközről", "control_bottom_app_bar_delete_from_local": "Törlés az eszközről",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "Hely Módosítása", "control_bottom_app_bar_edit_location": "Hely Módosítása",
"control_bottom_app_bar_edit_time": "Dátum és Idő Módosítása", "control_bottom_app_bar_edit_time": "Dátum és Idő Módosítása",
"control_bottom_app_bar_favorite": "Kedvenc", "control_bottom_app_bar_favorite": "Kedvenc",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Kísérleti", "experimental_settings_title": "Kísérleti",
"favorites_page_no_favorites": "Nem található kedvencnek jelölt elem", "favorites_page_no_favorites": "Nem található kedvencnek jelölt elem",
"favorites_page_title": "Kedvencek", "favorites_page_title": "Kedvencek",
"filename_search": "File name or extension",
"haptic_feedback_switch": "Rezgéses visszajelzés engedélyezése", "haptic_feedback_switch": "Rezgéses visszajelzés engedélyezése",
"haptic_feedback_title": "Rezgéses Visszajelzés", "haptic_feedback_title": "Rezgéses Visszajelzés",
"header_settings_add_header_tip": "Add Header", "header_settings_add_header_tip": "Add Header",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Letöltés Megkezdődött", "image_viewer_page_state_provider_download_started": "Letöltés Megkezdődött",
"image_viewer_page_state_provider_download_success": "Letöltés Sikeres", "image_viewer_page_state_provider_download_success": "Letöltés Sikeres",
"image_viewer_page_state_provider_share_error": "Megosztási Hiba", "image_viewer_page_state_provider_share_error": "Megosztási Hiba",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "Albumok", "library_page_albums": "Albumok",
"library_page_archive": "Archívum", "library_page_archive": "Archívum",
"library_page_device_albums": "Albumok az Eszközön", "library_page_device_albums": "Albumok az Eszközön",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "Csak-olvasható elem(ek) dátuma nem módosítható, ezért kihagyjuk", "multiselect_grid_edit_date_time_err_read_only": "Csak-olvasható elem(ek) dátuma nem módosítható, ezért kihagyjuk",
"multiselect_grid_edit_gps_err_read_only": "Csak-olvasható elem(ek) helyszíne nem módosítható, ezért kihagyjuk", "multiselect_grid_edit_gps_err_read_only": "Csak-olvasható elem(ek) helyszíne nem módosítható, ezért kihagyjuk",
"no_assets_to_show": "Nincs megjeleníthető elem", "no_assets_to_show": "Nincs megjeleníthető elem",
"no_name": "No name",
"notification_permission_dialog_cancel": "Mégsem", "notification_permission_dialog_cancel": "Mégsem",
"notification_permission_dialog_content": "Az értesítések bekapcsolásához a Beállítások menüben válaszd ki az Engedélyezés-t.", "notification_permission_dialog_content": "Az értesítések bekapcsolásához a Beállítások menüben válaszd ki az Engedélyezés-t.",
"notification_permission_dialog_settings": "Beállítások", "notification_permission_dialog_settings": "Beállítások",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Hiba történt", "scaffold_body_error_occurred": "Hiba történt",
"search_bar_hint": "Fotók keresése", "search_bar_hint": "Fotók keresése",
"search_filter_apply": "Szűrő alkalmazása", "search_filter_apply": "Szűrő alkalmazása",
"search_filter_camera": "Camera",
"search_filter_camera_make": "Gyártó", "search_filter_camera_make": "Gyártó",
"search_filter_camera_model": "Modell", "search_filter_camera_model": "Modell",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "Archivált", "search_filter_display_option_archive": "Archivált",
"search_filter_display_option_favorite": "Kedvenc", "search_filter_display_option_favorite": "Kedvenc",
"search_filter_display_option_not_in_album": "Nincs albumban", "search_filter_display_option_not_in_album": "Nincs albumban",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "Város", "search_filter_location_city": "Város",
"search_filter_location_country": "Ország", "search_filter_location_country": "Ország",
"search_filter_location_state": "Állam", "search_filter_location_state": "Állam",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "Összes", "search_filter_media_type_all": "Összes",
"search_filter_media_type_image": "Kép", "search_filter_media_type_image": "Kép",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "Videó", "search_filter_media_type_video": "Videó",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "Kategóriák", "search_page_categories": "Kategóriák",
"search_page_favorites": "Kedvencek", "search_page_favorites": "Kedvencek",
"search_page_motion_photos": "Mozgó Fotók", "search_page_motion_photos": "Mozgó Fotók",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Annulla", "action_common_cancel": "Annulla",
"action_common_clear": "Pulisci", "action_common_clear": "Pulisci",
"action_common_confirm": "Conferma", "action_common_confirm": "Conferma",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "Aggiorna", "action_common_update": "Aggiorna",
"add_to_album_bottom_sheet_added": "Aggiunto in {album}", "add_to_album_bottom_sheet_added": "Aggiunto in {album}",
"add_to_album_bottom_sheet_already_exists": "Già presente in {album}", "add_to_album_bottom_sheet_already_exists": "Già presente in {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "Nuova Password", "change_password_form_new_password": "Nuova Password",
"change_password_form_password_mismatch": "Le password non coincidono", "change_password_form_password_mismatch": "Le password non coincidono",
"change_password_form_reenter_new_password": "Inserisci ancora la nuova password ", "change_password_form_reenter_new_password": "Inserisci ancora la nuova password ",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "Aggiungi all'album", "common_add_to_album": "Aggiungi all'album",
"common_change_password": "Cambia Password", "common_change_password": "Cambia Password",
"common_create_new_album": "Crea nuovo Album", "common_create_new_album": "Crea nuovo Album",
"common_server_error": "Si prega di controllare la connessione network, che il server sia raggiungibile e che le versione del server e app sono gli stessi", "common_server_error": "Si prega di controllare la connessione network, che il server sia raggiungibile e che le versione del server e app sono gli stessi",
"common_shared": "Condivisi", "common_shared": "Condivisi",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "Aggiungi all'album", "control_bottom_app_bar_add_to_album": "Aggiungi all'album",
"control_bottom_app_bar_album_info": "{} elementi", "control_bottom_app_bar_album_info": "{} elementi",
"control_bottom_app_bar_album_info_shared": "{} elementi · Condivisi", "control_bottom_app_bar_album_info_shared": "{} elementi · Condivisi",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Elimina", "control_bottom_app_bar_delete": "Elimina",
"control_bottom_app_bar_delete_from_immich": "Elimina da Immich", "control_bottom_app_bar_delete_from_immich": "Elimina da Immich",
"control_bottom_app_bar_delete_from_local": "Elimina dal dispositivo", "control_bottom_app_bar_delete_from_local": "Elimina dal dispositivo",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "Modifica posizione", "control_bottom_app_bar_edit_location": "Modifica posizione",
"control_bottom_app_bar_edit_time": "Modifica data e ora", "control_bottom_app_bar_edit_time": "Modifica data e ora",
"control_bottom_app_bar_favorite": "Preferito", "control_bottom_app_bar_favorite": "Preferito",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Sperimentale", "experimental_settings_title": "Sperimentale",
"favorites_page_no_favorites": "Nessun preferito", "favorites_page_no_favorites": "Nessun preferito",
"favorites_page_title": "Preferiti", "favorites_page_title": "Preferiti",
"filename_search": "File name or extension",
"haptic_feedback_switch": "Abilita feedback aptico", "haptic_feedback_switch": "Abilita feedback aptico",
"haptic_feedback_title": "Feedback aptico", "haptic_feedback_title": "Feedback aptico",
"header_settings_add_header_tip": "Add Header", "header_settings_add_header_tip": "Add Header",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Download Started", "image_viewer_page_state_provider_download_started": "Download Started",
"image_viewer_page_state_provider_download_success": "Download con successo", "image_viewer_page_state_provider_download_success": "Download con successo",
"image_viewer_page_state_provider_share_error": "Errore di condivisione", "image_viewer_page_state_provider_share_error": "Errore di condivisione",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "Album", "library_page_albums": "Album",
"library_page_archive": "Archivia", "library_page_archive": "Archivia",
"library_page_device_albums": "Album sul dispositivo", "library_page_device_albums": "Album sul dispositivo",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "Non puoi modificare la data di risorse in sola lettura, azione ignorata", "multiselect_grid_edit_date_time_err_read_only": "Non puoi modificare la data di risorse in sola lettura, azione ignorata",
"multiselect_grid_edit_gps_err_read_only": "Non puoi modificare la posizione di risorse in sola lettura, azione ignorata", "multiselect_grid_edit_gps_err_read_only": "Non puoi modificare la posizione di risorse in sola lettura, azione ignorata",
"no_assets_to_show": "Nessuna risorsa da mostrare", "no_assets_to_show": "Nessuna risorsa da mostrare",
"no_name": "No name",
"notification_permission_dialog_cancel": "Annulla", "notification_permission_dialog_cancel": "Annulla",
"notification_permission_dialog_content": "Per attivare le notifiche, vai alle Impostazioni e seleziona concedi", "notification_permission_dialog_content": "Per attivare le notifiche, vai alle Impostazioni e seleziona concedi",
"notification_permission_dialog_settings": "Impostazioni", "notification_permission_dialog_settings": "Impostazioni",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Si è verificato un errore.", "scaffold_body_error_occurred": "Si è verificato un errore.",
"search_bar_hint": "Cerca le tue foto", "search_bar_hint": "Cerca le tue foto",
"search_filter_apply": "Applica filtro", "search_filter_apply": "Applica filtro",
"search_filter_camera": "Camera",
"search_filter_camera_make": "Produttore", "search_filter_camera_make": "Produttore",
"search_filter_camera_model": "Modello", "search_filter_camera_model": "Modello",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "Archivia", "search_filter_display_option_archive": "Archivia",
"search_filter_display_option_favorite": "Preferito", "search_filter_display_option_favorite": "Preferito",
"search_filter_display_option_not_in_album": "Non nell'album", "search_filter_display_option_not_in_album": "Non nell'album",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "Città", "search_filter_location_city": "Città",
"search_filter_location_country": "Nazione", "search_filter_location_country": "Nazione",
"search_filter_location_state": "Provincia", "search_filter_location_state": "Provincia",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "Tutto", "search_filter_media_type_all": "Tutto",
"search_filter_media_type_image": "Immagine", "search_filter_media_type_image": "Immagine",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "VIdeo", "search_filter_media_type_video": "VIdeo",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "Categoria", "search_page_categories": "Categoria",
"search_page_favorites": "Preferiti", "search_page_favorites": "Preferiti",
"search_page_motion_photos": "Foto in movimento", "search_page_motion_photos": "Foto in movimento",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "キャンセル", "action_common_cancel": "キャンセル",
"action_common_clear": "クリア", "action_common_clear": "クリア",
"action_common_confirm": "了解", "action_common_confirm": "了解",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "更新", "action_common_update": "更新",
"add_to_album_bottom_sheet_added": "{album}に追加", "add_to_album_bottom_sheet_added": "{album}に追加",
"add_to_album_bottom_sheet_already_exists": "{album}に追加済み", "add_to_album_bottom_sheet_already_exists": "{album}に追加済み",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "新しいパスワード", "change_password_form_new_password": "新しいパスワード",
"change_password_form_password_mismatch": "パスワードが一致しません", "change_password_form_password_mismatch": "パスワードが一致しません",
"change_password_form_reenter_new_password": "再度パスワードを入力してください", "change_password_form_reenter_new_password": "再度パスワードを入力してください",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "アルバムに追加", "common_add_to_album": "アルバムに追加",
"common_change_password": "パスワードを変更", "common_change_password": "パスワードを変更",
"common_create_new_album": "アルバムを作成", "common_create_new_album": "アルバムを作成",
"common_server_error": "ネットワーク接続を確認し、サーバーが接続できる状態にあるか確認してください。アプリとサーバーのバージョンが一致しているかも確認してください。", "common_server_error": "ネットワーク接続を確認し、サーバーが接続できる状態にあるか確認してください。アプリとサーバーのバージョンが一致しているかも確認してください。",
"common_shared": "共有済み", "common_shared": "共有済み",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "アルバムに追加", "control_bottom_app_bar_add_to_album": "アルバムに追加",
"control_bottom_app_bar_album_info": "{}枚", "control_bottom_app_bar_album_info": "{}枚",
"control_bottom_app_bar_album_info_shared": "{}枚 · 共有済", "control_bottom_app_bar_album_info_shared": "{}枚 · 共有済",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "削除", "control_bottom_app_bar_delete": "削除",
"control_bottom_app_bar_delete_from_immich": "Immichから削除", "control_bottom_app_bar_delete_from_immich": "Immichから削除",
"control_bottom_app_bar_delete_from_local": "デバイスから削除", "control_bottom_app_bar_delete_from_local": "デバイスから削除",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "位置情報を編集", "control_bottom_app_bar_edit_location": "位置情報を編集",
"control_bottom_app_bar_edit_time": "日時を変更", "control_bottom_app_bar_edit_time": "日時を変更",
"control_bottom_app_bar_favorite": "お気に入り", "control_bottom_app_bar_favorite": "お気に入り",
@@ -203,6 +216,7 @@
"experimental_settings_title": "試験的機能", "experimental_settings_title": "試験的機能",
"favorites_page_no_favorites": "お気に入り登録された写真またはビデオがありません", "favorites_page_no_favorites": "お気に入り登録された写真またはビデオがありません",
"favorites_page_title": "お気に入り", "favorites_page_title": "お気に入り",
"filename_search": "File name or extension",
"haptic_feedback_switch": "ハプティックフィードバック", "haptic_feedback_switch": "ハプティックフィードバック",
"haptic_feedback_title": "ハプティックフィードバックを有効にする", "haptic_feedback_title": "ハプティックフィードバックを有効にする",
"header_settings_add_header_tip": "Add Header", "header_settings_add_header_tip": "Add Header",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "ダウンロードが始まります", "image_viewer_page_state_provider_download_started": "ダウンロードが始まります",
"image_viewer_page_state_provider_download_success": "ダウンロード成功", "image_viewer_page_state_provider_download_success": "ダウンロード成功",
"image_viewer_page_state_provider_share_error": "共有エラー", "image_viewer_page_state_provider_share_error": "共有エラー",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "アルバム", "library_page_albums": "アルバム",
"library_page_archive": "アーカイブ", "library_page_archive": "アーカイブ",
"library_page_device_albums": "デバイス上のアルバム", "library_page_device_albums": "デバイス上のアルバム",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "読み取り専用の項目の日付を変更できません", "multiselect_grid_edit_date_time_err_read_only": "読み取り専用の項目の日付を変更できません",
"multiselect_grid_edit_gps_err_read_only": "読み取り専用の項目の位置情報を変更できません", "multiselect_grid_edit_gps_err_read_only": "読み取り専用の項目の位置情報を変更できません",
"no_assets_to_show": "表示する項目がありません", "no_assets_to_show": "表示する項目がありません",
"no_name": "No name",
"notification_permission_dialog_cancel": "キャンセル", "notification_permission_dialog_cancel": "キャンセル",
"notification_permission_dialog_content": "通知を許可するには設定を開いてオンにしてください", "notification_permission_dialog_content": "通知を許可するには設定を開いてオンにしてください",
"notification_permission_dialog_settings": "設定", "notification_permission_dialog_settings": "設定",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "エラーが発生しました", "scaffold_body_error_occurred": "エラーが発生しました",
"search_bar_hint": "写真を検索", "search_bar_hint": "写真を検索",
"search_filter_apply": "フィルターを適用する", "search_filter_apply": "フィルターを適用する",
"search_filter_camera": "Camera",
"search_filter_camera_make": "メーカー", "search_filter_camera_make": "メーカー",
"search_filter_camera_model": "モデル", "search_filter_camera_model": "モデル",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "アーカイブ", "search_filter_display_option_archive": "アーカイブ",
"search_filter_display_option_favorite": "お気に入り", "search_filter_display_option_favorite": "お気に入り",
"search_filter_display_option_not_in_album": "アルバムにありません", "search_filter_display_option_not_in_album": "アルバムにありません",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "市町村", "search_filter_location_city": "市町村",
"search_filter_location_country": "国", "search_filter_location_country": "国",
"search_filter_location_state": "都道府県", "search_filter_location_state": "都道府県",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "すべて", "search_filter_media_type_all": "すべて",
"search_filter_media_type_image": "写真", "search_filter_media_type_image": "写真",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "動画", "search_filter_media_type_video": "動画",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "カテゴリ", "search_page_categories": "カテゴリ",
"search_page_favorites": "お気に入り", "search_page_favorites": "お気に入り",
"search_page_motion_photos": "モーションフォト", "search_page_motion_photos": "モーションフォト",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "취소", "action_common_cancel": "취소",
"action_common_clear": "지우기", "action_common_clear": "지우기",
"action_common_confirm": "확인", "action_common_confirm": "확인",
"action_common_save": "저장",
"action_common_select": "선택",
"action_common_update": "업데이트", "action_common_update": "업데이트",
"add_to_album_bottom_sheet_added": "{album}에 추가되었습니다.", "add_to_album_bottom_sheet_added": "{album}에 추가되었습니다.",
"add_to_album_bottom_sheet_already_exists": "{album}에 이미 존재하는 항목입니다.", "add_to_album_bottom_sheet_already_exists": "{album}에 이미 존재하는 항목입니다.",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "새 비밀번호 입력", "change_password_form_new_password": "새 비밀번호 입력",
"change_password_form_password_mismatch": "비밀번호가 일치하지 않습니다.", "change_password_form_password_mismatch": "비밀번호가 일치하지 않습니다.",
"change_password_form_reenter_new_password": "새 비밀번호 확인", "change_password_form_reenter_new_password": "새 비밀번호 확인",
"client_cert_dialog_msg_confirm": "확인",
"client_cert_enter_password": "비밀번호 입력",
"client_cert_import": "가져오기",
"client_cert_import_success_msg": "클라이언트 인증서를 가져왔습니다.",
"client_cert_invalid_msg": "올바르지 않은 인증서이거나 비밀번호가 일치하지 않습니다.",
"client_cert_remove": "제거",
"client_cert_remove_msg": "클라이언트 인증서가 제거되었습니다.",
"client_cert_subtitle": "인증서 가져오기/제거는 로그인 전에만 가능합니다. PKCS12 (.p12, .pfx) 형식을 지원합니다.",
"client_cert_title": "SSL 클라이언트 인증서",
"common_add_to_album": "앨범에 추가", "common_add_to_album": "앨범에 추가",
"common_change_password": "비밀번호 변경", "common_change_password": "비밀번호 변경",
"common_create_new_album": "앨범 생성", "common_create_new_album": "앨범 생성",
"common_server_error": "네트워크 연결 상태를 확인하고, 서버에 접속할 수 있는지, 앱/서버 버전이 호환되는지 확인해주세요.", "common_server_error": "네트워크 연결 상태를 확인하고, 서버에 접속할 수 있는지, 앱/서버 버전이 호환되는지 확인해주세요.",
"common_shared": "공유됨", "common_shared": "공유됨",
"contextual_search": "동해안에서 맞이하는 새해 일출",
"control_bottom_app_bar_add_to_album": "앨범에 추가", "control_bottom_app_bar_add_to_album": "앨범에 추가",
"control_bottom_app_bar_album_info": "{}개 항목", "control_bottom_app_bar_album_info": "{}개 항목",
"control_bottom_app_bar_album_info_shared": "{}개 항목 · 공유됨", "control_bottom_app_bar_album_info_shared": "{}개 항목 · 공유됨",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "삭제", "control_bottom_app_bar_delete": "삭제",
"control_bottom_app_bar_delete_from_immich": "Immich에서 삭제", "control_bottom_app_bar_delete_from_immich": "Immich에서 삭제",
"control_bottom_app_bar_delete_from_local": "기기에서 삭제", "control_bottom_app_bar_delete_from_local": "기기에서 삭제",
"control_bottom_app_bar_edit": "편집",
"control_bottom_app_bar_edit_location": "위치 편집", "control_bottom_app_bar_edit_location": "위치 편집",
"control_bottom_app_bar_edit_time": "날짜 및 시간 변경", "control_bottom_app_bar_edit_time": "날짜 및 시간 변경",
"control_bottom_app_bar_favorite": "즐겨찾기", "control_bottom_app_bar_favorite": "즐겨찾기",
@@ -203,6 +216,7 @@
"experimental_settings_title": "실험적", "experimental_settings_title": "실험적",
"favorites_page_no_favorites": "즐겨찾기된 항목 없음", "favorites_page_no_favorites": "즐겨찾기된 항목 없음",
"favorites_page_title": "즐겨찾기", "favorites_page_title": "즐겨찾기",
"filename_search": "파일 이름 또는 확장자",
"haptic_feedback_switch": "햅틱 피드백 활성화", "haptic_feedback_switch": "햅틱 피드백 활성화",
"haptic_feedback_title": "햅틱 피드백", "haptic_feedback_title": "햅틱 피드백",
"header_settings_add_header_tip": "헤더 추가", "header_settings_add_header_tip": "헤더 추가",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "다운로드 시작됨", "image_viewer_page_state_provider_download_started": "다운로드 시작됨",
"image_viewer_page_state_provider_download_success": "다운로드 완료", "image_viewer_page_state_provider_download_success": "다운로드 완료",
"image_viewer_page_state_provider_share_error": "공유 오류", "image_viewer_page_state_provider_share_error": "공유 오류",
"invalid_date": "올바르지 않은 날짜입니다.",
"invalid_date_format": "올바르지 않은 날짜 형식입니다.",
"library_page_albums": "앨범", "library_page_albums": "앨범",
"library_page_archive": "보관함", "library_page_archive": "보관함",
"library_page_device_albums": "기기의 앨범", "library_page_device_albums": "기기의 앨범",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "읽기 전용 항목의 날짜는 변경할 수 없습니다. 건너뜁니다.", "multiselect_grid_edit_date_time_err_read_only": "읽기 전용 항목의 날짜는 변경할 수 없습니다. 건너뜁니다.",
"multiselect_grid_edit_gps_err_read_only": "읽기 전용 항목의 위치는 변경할 수 없습니다. 건너뜁니다.", "multiselect_grid_edit_gps_err_read_only": "읽기 전용 항목의 위치는 변경할 수 없습니다. 건너뜁니다.",
"no_assets_to_show": "표시할 항목 없음", "no_assets_to_show": "표시할 항목 없음",
"no_name": "이름 없음",
"notification_permission_dialog_cancel": "취소", "notification_permission_dialog_cancel": "취소",
"notification_permission_dialog_content": "알림을 활성화하려면 설정에서 알림 권한을 허용하세요.", "notification_permission_dialog_content": "알림을 활성화하려면 설정에서 알림 권한을 허용하세요.",
"notification_permission_dialog_settings": "설정", "notification_permission_dialog_settings": "설정",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "문제가 발생했습니다.", "scaffold_body_error_occurred": "문제가 발생했습니다.",
"search_bar_hint": "사진 검색", "search_bar_hint": "사진 검색",
"search_filter_apply": "필터 적용", "search_filter_apply": "필터 적용",
"search_filter_camera": "카메라",
"search_filter_camera_make": "제조사", "search_filter_camera_make": "제조사",
"search_filter_camera_model": "모델명", "search_filter_camera_model": "모델명",
"search_filter_camera_title": "카메라 종류 선택",
"search_filter_date": "날짜\n",
"search_filter_date_interval": "{start}에서 {end} 까지",
"search_filter_date_title": "날짜 범위 선택\n",
"search_filter_display_option_archive": "보관함", "search_filter_display_option_archive": "보관함",
"search_filter_display_option_favorite": "즐겨찾기", "search_filter_display_option_favorite": "즐겨찾기",
"search_filter_display_option_not_in_album": "앨범에 없음", "search_filter_display_option_not_in_album": "앨범에 없음",
"search_filter_display_options": "표시 옵션",
"search_filter_display_options_title": "표시 옵션",
"search_filter_location": "위치",
"search_filter_location_city": "도시", "search_filter_location_city": "도시",
"search_filter_location_country": "국가", "search_filter_location_country": "국가",
"search_filter_location_state": "지역", "search_filter_location_state": "지역",
"search_filter_location_title": "위치 선택",
"search_filter_media_type": "미디어 종류",
"search_filter_media_type_all": "모두", "search_filter_media_type_all": "모두",
"search_filter_media_type_image": "이미지", "search_filter_media_type_image": "이미지",
"search_filter_media_type_title": "미디어 종류 선택",
"search_filter_media_type_video": "동영상", "search_filter_media_type_video": "동영상",
"search_filter_people": "인물",
"search_filter_people_title": "인물 선택",
"search_page_categories": "분류", "search_page_categories": "분류",
"search_page_favorites": "즐겨찾기", "search_page_favorites": "즐겨찾기",
"search_page_motion_photos": "모션 포토", "search_page_motion_photos": "모션 포토",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Cancel", "action_common_cancel": "Cancel",
"action_common_clear": "Clear", "action_common_clear": "Clear",
"action_common_confirm": "Confirm", "action_common_confirm": "Confirm",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "Update", "action_common_update": "Update",
"add_to_album_bottom_sheet_added": "Added to {album}", "add_to_album_bottom_sheet_added": "Added to {album}",
"add_to_album_bottom_sheet_already_exists": "Already in {album}", "add_to_album_bottom_sheet_already_exists": "Already in {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "New Password", "change_password_form_new_password": "New Password",
"change_password_form_password_mismatch": "Passwords do not match", "change_password_form_password_mismatch": "Passwords do not match",
"change_password_form_reenter_new_password": "Re-enter New Password", "change_password_form_reenter_new_password": "Re-enter New Password",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "Add to album", "common_add_to_album": "Add to album",
"common_change_password": "Change Password", "common_change_password": "Change Password",
"common_create_new_album": "Create new album", "common_create_new_album": "Create new album",
"common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.", "common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.",
"common_shared": "Shared", "common_shared": "Shared",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "Add to album", "control_bottom_app_bar_add_to_album": "Add to album",
"control_bottom_app_bar_album_info": "{} items", "control_bottom_app_bar_album_info": "{} items",
"control_bottom_app_bar_album_info_shared": "{} items · Shared", "control_bottom_app_bar_album_info_shared": "{} items · Shared",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Delete", "control_bottom_app_bar_delete": "Delete",
"control_bottom_app_bar_delete_from_immich": "Delete from Immich", "control_bottom_app_bar_delete_from_immich": "Delete from Immich",
"control_bottom_app_bar_delete_from_local": "Delete from device", "control_bottom_app_bar_delete_from_local": "Delete from device",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "Edit Location", "control_bottom_app_bar_edit_location": "Edit Location",
"control_bottom_app_bar_edit_time": "Edit Date & Time", "control_bottom_app_bar_edit_time": "Edit Date & Time",
"control_bottom_app_bar_favorite": "Favorite", "control_bottom_app_bar_favorite": "Favorite",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Experimental", "experimental_settings_title": "Experimental",
"favorites_page_no_favorites": "No favorite assets found", "favorites_page_no_favorites": "No favorite assets found",
"favorites_page_title": "Favorites", "favorites_page_title": "Favorites",
"filename_search": "File name or extension",
"haptic_feedback_switch": "Enable haptic feedback", "haptic_feedback_switch": "Enable haptic feedback",
"haptic_feedback_title": "Haptic Feedback", "haptic_feedback_title": "Haptic Feedback",
"header_settings_add_header_tip": "Add Header", "header_settings_add_header_tip": "Add Header",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Download Started", "image_viewer_page_state_provider_download_started": "Download Started",
"image_viewer_page_state_provider_download_success": "Download Success", "image_viewer_page_state_provider_download_success": "Download Success",
"image_viewer_page_state_provider_share_error": "Share Error", "image_viewer_page_state_provider_share_error": "Share Error",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "Albums", "library_page_albums": "Albums",
"library_page_archive": "Archive", "library_page_archive": "Archive",
"library_page_device_albums": "Albums on Device", "library_page_device_albums": "Albums on Device",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping", "multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping", "multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
"no_assets_to_show": "No assets to show", "no_assets_to_show": "No assets to show",
"no_name": "No name",
"notification_permission_dialog_cancel": "Cancel", "notification_permission_dialog_cancel": "Cancel",
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.", "notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
"notification_permission_dialog_settings": "Settings", "notification_permission_dialog_settings": "Settings",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Error occurred", "scaffold_body_error_occurred": "Error occurred",
"search_bar_hint": "Search your photos", "search_bar_hint": "Search your photos",
"search_filter_apply": "Apply filter", "search_filter_apply": "Apply filter",
"search_filter_camera": "Camera",
"search_filter_camera_make": "Make", "search_filter_camera_make": "Make",
"search_filter_camera_model": "Model", "search_filter_camera_model": "Model",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "Archive", "search_filter_display_option_archive": "Archive",
"search_filter_display_option_favorite": "Favorite", "search_filter_display_option_favorite": "Favorite",
"search_filter_display_option_not_in_album": "Not in album", "search_filter_display_option_not_in_album": "Not in album",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "City", "search_filter_location_city": "City",
"search_filter_location_country": "Country", "search_filter_location_country": "Country",
"search_filter_location_state": "State", "search_filter_location_state": "State",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "All", "search_filter_media_type_all": "All",
"search_filter_media_type_image": "Image", "search_filter_media_type_image": "Image",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "Video", "search_filter_media_type_video": "Video",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "Categories", "search_page_categories": "Categories",
"search_page_favorites": "Favorites", "search_page_favorites": "Favorites",
"search_page_motion_photos": "Motion Photos", "search_page_motion_photos": "Motion Photos",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Atcelt", "action_common_cancel": "Atcelt",
"action_common_clear": "Notīrīt", "action_common_clear": "Notīrīt",
"action_common_confirm": "Apstiprināt", "action_common_confirm": "Apstiprināt",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "Atjaunināt", "action_common_update": "Atjaunināt",
"add_to_album_bottom_sheet_added": "Pievienots {album}", "add_to_album_bottom_sheet_added": "Pievienots {album}",
"add_to_album_bottom_sheet_already_exists": "Jau pievienots {album}", "add_to_album_bottom_sheet_already_exists": "Jau pievienots {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "Jauna Parole", "change_password_form_new_password": "Jauna Parole",
"change_password_form_password_mismatch": "Paroles nesakrīt", "change_password_form_password_mismatch": "Paroles nesakrīt",
"change_password_form_reenter_new_password": "Atkārtoti ievadīt jaunu paroli", "change_password_form_reenter_new_password": "Atkārtoti ievadīt jaunu paroli",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "Pievienot albumam", "common_add_to_album": "Pievienot albumam",
"common_change_password": "Nomainīt Paroli", "common_change_password": "Nomainīt Paroli",
"common_create_new_album": "Izveidot jaunu albumu", "common_create_new_album": "Izveidot jaunu albumu",
"common_server_error": "Lūdzu, pārbaudiet tīkla savienojumu, pārliecinieties, vai serveris ir sasniedzams un aplikācijas/servera versijas ir saderīgas.", "common_server_error": "Lūdzu, pārbaudiet tīkla savienojumu, pārliecinieties, vai serveris ir sasniedzams un aplikācijas/servera versijas ir saderīgas.",
"common_shared": "Kopīgots", "common_shared": "Kopīgots",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "Pievienot albumam", "control_bottom_app_bar_add_to_album": "Pievienot albumam",
"control_bottom_app_bar_album_info": "{} vienumi", "control_bottom_app_bar_album_info": "{} vienumi",
"control_bottom_app_bar_album_info_shared": "{} vienumi · Koplietoti", "control_bottom_app_bar_album_info_shared": "{} vienumi · Koplietoti",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Dzēst", "control_bottom_app_bar_delete": "Dzēst",
"control_bottom_app_bar_delete_from_immich": "Dzēst no Immich", "control_bottom_app_bar_delete_from_immich": "Dzēst no Immich",
"control_bottom_app_bar_delete_from_local": "Dzēst no ierīces", "control_bottom_app_bar_delete_from_local": "Dzēst no ierīces",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "Rediģēt Atrašanās Vietu", "control_bottom_app_bar_edit_location": "Rediģēt Atrašanās Vietu",
"control_bottom_app_bar_edit_time": "Rediģēt Datumu un Laiku", "control_bottom_app_bar_edit_time": "Rediģēt Datumu un Laiku",
"control_bottom_app_bar_favorite": "Izlase", "control_bottom_app_bar_favorite": "Izlase",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Eksperimentāls", "experimental_settings_title": "Eksperimentāls",
"favorites_page_no_favorites": "Nav atrasti iecienītākie aktīvi", "favorites_page_no_favorites": "Nav atrasti iecienītākie aktīvi",
"favorites_page_title": "Izlase", "favorites_page_title": "Izlase",
"filename_search": "File name or extension",
"haptic_feedback_switch": "Iestatīt haptisku reakciju", "haptic_feedback_switch": "Iestatīt haptisku reakciju",
"haptic_feedback_title": "Haptiska Reakcija", "haptic_feedback_title": "Haptiska Reakcija",
"header_settings_add_header_tip": "Add Header", "header_settings_add_header_tip": "Add Header",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Lejupielāde Uzsākta", "image_viewer_page_state_provider_download_started": "Lejupielāde Uzsākta",
"image_viewer_page_state_provider_download_success": "Lejupielāde Izdevās", "image_viewer_page_state_provider_download_success": "Lejupielāde Izdevās",
"image_viewer_page_state_provider_share_error": "Kopīgošanas Kļūda", "image_viewer_page_state_provider_share_error": "Kopīgošanas Kļūda",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "Albums", "library_page_albums": "Albums",
"library_page_archive": "Arhīvs", "library_page_archive": "Arhīvs",
"library_page_device_albums": "Albumi ierīcē", "library_page_device_albums": "Albumi ierīcē",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "Nevar rediģēt read only aktīva(-u) datumu, notiek izlaišana", "multiselect_grid_edit_date_time_err_read_only": "Nevar rediģēt read only aktīva(-u) datumu, notiek izlaišana",
"multiselect_grid_edit_gps_err_read_only": "Nevar rediģēt atrašanās vietu read only aktīva(-u) datumu, notiek izlaišana", "multiselect_grid_edit_gps_err_read_only": "Nevar rediģēt atrašanās vietu read only aktīva(-u) datumu, notiek izlaišana",
"no_assets_to_show": "Nav uzrādāmo aktīvu", "no_assets_to_show": "Nav uzrādāmo aktīvu",
"no_name": "No name",
"notification_permission_dialog_cancel": "Atcelt", "notification_permission_dialog_cancel": "Atcelt",
"notification_permission_dialog_content": "Lai iespējotu paziņojumus, atveriet Iestatījumi un atlasiet Atļaut.", "notification_permission_dialog_content": "Lai iespējotu paziņojumus, atveriet Iestatījumi un atlasiet Atļaut.",
"notification_permission_dialog_settings": "Iestatījumi", "notification_permission_dialog_settings": "Iestatījumi",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Radās kļūda", "scaffold_body_error_occurred": "Radās kļūda",
"search_bar_hint": "Meklēt Jūsu fotoattēlus", "search_bar_hint": "Meklēt Jūsu fotoattēlus",
"search_filter_apply": "Lietot filtru", "search_filter_apply": "Lietot filtru",
"search_filter_camera": "Camera",
"search_filter_camera_make": "Firma", "search_filter_camera_make": "Firma",
"search_filter_camera_model": "Modelis", "search_filter_camera_model": "Modelis",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "Arhīvs", "search_filter_display_option_archive": "Arhīvs",
"search_filter_display_option_favorite": "Izlase", "search_filter_display_option_favorite": "Izlase",
"search_filter_display_option_not_in_album": "Nav albumā", "search_filter_display_option_not_in_album": "Nav albumā",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "Pilsēta", "search_filter_location_city": "Pilsēta",
"search_filter_location_country": "Valsts", "search_filter_location_country": "Valsts",
"search_filter_location_state": "Štats", "search_filter_location_state": "Štats",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "Viss", "search_filter_media_type_all": "Viss",
"search_filter_media_type_image": "Attēls", "search_filter_media_type_image": "Attēls",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "Videoklips", "search_filter_media_type_video": "Videoklips",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "Kategorijas", "search_page_categories": "Kategorijas",
"search_page_favorites": "Izlase", "search_page_favorites": "Izlase",
"search_page_motion_photos": "Kustību Fotoattēli", "search_page_motion_photos": "Kustību Fotoattēli",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Cancel", "action_common_cancel": "Cancel",
"action_common_clear": "Clear", "action_common_clear": "Clear",
"action_common_confirm": "Confirm", "action_common_confirm": "Confirm",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "Update", "action_common_update": "Update",
"add_to_album_bottom_sheet_added": "Added to {album}", "add_to_album_bottom_sheet_added": "Added to {album}",
"add_to_album_bottom_sheet_already_exists": "Already in {album}", "add_to_album_bottom_sheet_already_exists": "Already in {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "New Password", "change_password_form_new_password": "New Password",
"change_password_form_password_mismatch": "Passwords do not match", "change_password_form_password_mismatch": "Passwords do not match",
"change_password_form_reenter_new_password": "Re-enter New Password", "change_password_form_reenter_new_password": "Re-enter New Password",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "Add to album", "common_add_to_album": "Add to album",
"common_change_password": "Change Password", "common_change_password": "Change Password",
"common_create_new_album": "Create new album", "common_create_new_album": "Create new album",
"common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.", "common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.",
"common_shared": "Shared", "common_shared": "Shared",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "Add to album", "control_bottom_app_bar_add_to_album": "Add to album",
"control_bottom_app_bar_album_info": "{} items", "control_bottom_app_bar_album_info": "{} items",
"control_bottom_app_bar_album_info_shared": "{} items · Shared", "control_bottom_app_bar_album_info_shared": "{} items · Shared",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Delete", "control_bottom_app_bar_delete": "Delete",
"control_bottom_app_bar_delete_from_immich": "Delete from Immich", "control_bottom_app_bar_delete_from_immich": "Delete from Immich",
"control_bottom_app_bar_delete_from_local": "Delete from device", "control_bottom_app_bar_delete_from_local": "Delete from device",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "Edit Location", "control_bottom_app_bar_edit_location": "Edit Location",
"control_bottom_app_bar_edit_time": "Edit Date & Time", "control_bottom_app_bar_edit_time": "Edit Date & Time",
"control_bottom_app_bar_favorite": "Favorite", "control_bottom_app_bar_favorite": "Favorite",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Experimental", "experimental_settings_title": "Experimental",
"favorites_page_no_favorites": "No favorite assets found", "favorites_page_no_favorites": "No favorite assets found",
"favorites_page_title": "Favorites", "favorites_page_title": "Favorites",
"filename_search": "File name or extension",
"haptic_feedback_switch": "Enable haptic feedback", "haptic_feedback_switch": "Enable haptic feedback",
"haptic_feedback_title": "Haptic Feedback", "haptic_feedback_title": "Haptic Feedback",
"header_settings_add_header_tip": "Add Header", "header_settings_add_header_tip": "Add Header",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Download Started", "image_viewer_page_state_provider_download_started": "Download Started",
"image_viewer_page_state_provider_download_success": "Download Success", "image_viewer_page_state_provider_download_success": "Download Success",
"image_viewer_page_state_provider_share_error": "Share Error", "image_viewer_page_state_provider_share_error": "Share Error",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "Albums", "library_page_albums": "Albums",
"library_page_archive": "Archive", "library_page_archive": "Archive",
"library_page_device_albums": "Albums on Device", "library_page_device_albums": "Albums on Device",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping", "multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping", "multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
"no_assets_to_show": "No assets to show", "no_assets_to_show": "No assets to show",
"no_name": "No name",
"notification_permission_dialog_cancel": "Цуцлах", "notification_permission_dialog_cancel": "Цуцлах",
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.", "notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
"notification_permission_dialog_settings": "Тохиргоо", "notification_permission_dialog_settings": "Тохиргоо",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Error occurred", "scaffold_body_error_occurred": "Error occurred",
"search_bar_hint": "Search your photos", "search_bar_hint": "Search your photos",
"search_filter_apply": "Apply filter", "search_filter_apply": "Apply filter",
"search_filter_camera": "Camera",
"search_filter_camera_make": "Make", "search_filter_camera_make": "Make",
"search_filter_camera_model": "Model", "search_filter_camera_model": "Model",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "Archive", "search_filter_display_option_archive": "Archive",
"search_filter_display_option_favorite": "Favorite", "search_filter_display_option_favorite": "Favorite",
"search_filter_display_option_not_in_album": "Not in album", "search_filter_display_option_not_in_album": "Not in album",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "City", "search_filter_location_city": "City",
"search_filter_location_country": "Country", "search_filter_location_country": "Country",
"search_filter_location_state": "State", "search_filter_location_state": "State",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "All", "search_filter_media_type_all": "All",
"search_filter_media_type_image": "Image", "search_filter_media_type_image": "Image",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "Video", "search_filter_media_type_video": "Video",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "Categories", "search_page_categories": "Categories",
"search_page_favorites": "Favorites", "search_page_favorites": "Favorites",
"search_page_motion_photos": "Motion Photos", "search_page_motion_photos": "Motion Photos",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Avbryt", "action_common_cancel": "Avbryt",
"action_common_clear": "Tøm", "action_common_clear": "Tøm",
"action_common_confirm": "Bekreft", "action_common_confirm": "Bekreft",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "Oppdater", "action_common_update": "Oppdater",
"add_to_album_bottom_sheet_added": "Lagt til i {album}", "add_to_album_bottom_sheet_added": "Lagt til i {album}",
"add_to_album_bottom_sheet_already_exists": "Allerede i {album}", "add_to_album_bottom_sheet_already_exists": "Allerede i {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "Nytt passord", "change_password_form_new_password": "Nytt passord",
"change_password_form_password_mismatch": "Passordene stemmer ikke", "change_password_form_password_mismatch": "Passordene stemmer ikke",
"change_password_form_reenter_new_password": "Skriv nytt passord igjen", "change_password_form_reenter_new_password": "Skriv nytt passord igjen",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "Legg til i album", "common_add_to_album": "Legg til i album",
"common_change_password": "Endre passord", "common_change_password": "Endre passord",
"common_create_new_album": "Lag nytt album", "common_create_new_album": "Lag nytt album",
"common_server_error": "Sjekk nettverkstilkoblingen din, forsikre deg om at serveren er mulig å nå, og at app-/server-versjonene er kompatible.", "common_server_error": "Sjekk nettverkstilkoblingen din, forsikre deg om at serveren er mulig å nå, og at app-/server-versjonene er kompatible.",
"common_shared": "Delt", "common_shared": "Delt",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "Legg til i album", "control_bottom_app_bar_add_to_album": "Legg til i album",
"control_bottom_app_bar_album_info": "{} objekter", "control_bottom_app_bar_album_info": "{} objekter",
"control_bottom_app_bar_album_info_shared": "{} objekter · Delt", "control_bottom_app_bar_album_info_shared": "{} objekter · Delt",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Slett", "control_bottom_app_bar_delete": "Slett",
"control_bottom_app_bar_delete_from_immich": "Slett fra Immich", "control_bottom_app_bar_delete_from_immich": "Slett fra Immich",
"control_bottom_app_bar_delete_from_local": "Slett fra enhet", "control_bottom_app_bar_delete_from_local": "Slett fra enhet",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "Endre lokasjon", "control_bottom_app_bar_edit_location": "Endre lokasjon",
"control_bottom_app_bar_edit_time": "Endre Dato og tid", "control_bottom_app_bar_edit_time": "Endre Dato og tid",
"control_bottom_app_bar_favorite": "Favoritt", "control_bottom_app_bar_favorite": "Favoritt",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Eksperimentelt", "experimental_settings_title": "Eksperimentelt",
"favorites_page_no_favorites": "Ingen favorittobjekter funnet", "favorites_page_no_favorites": "Ingen favorittobjekter funnet",
"favorites_page_title": "Favoritter", "favorites_page_title": "Favoritter",
"filename_search": "File name or extension",
"haptic_feedback_switch": "Aktivert haptisk tilbakemelding", "haptic_feedback_switch": "Aktivert haptisk tilbakemelding",
"haptic_feedback_title": "Haptisk tilbakemelding", "haptic_feedback_title": "Haptisk tilbakemelding",
"header_settings_add_header_tip": "Legg til header", "header_settings_add_header_tip": "Legg til header",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Nedlasting startet", "image_viewer_page_state_provider_download_started": "Nedlasting startet",
"image_viewer_page_state_provider_download_success": "Nedlasting vellykket", "image_viewer_page_state_provider_download_success": "Nedlasting vellykket",
"image_viewer_page_state_provider_share_error": "Delingsfeil", "image_viewer_page_state_provider_share_error": "Delingsfeil",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "Albumer", "library_page_albums": "Albumer",
"library_page_archive": "Arkiv", "library_page_archive": "Arkiv",
"library_page_device_albums": "Albumer på enheten", "library_page_device_albums": "Albumer på enheten",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "Kan ikke endre dato på objekt(er) med kun lese-rettigheter, hopper over", "multiselect_grid_edit_date_time_err_read_only": "Kan ikke endre dato på objekt(er) med kun lese-rettigheter, hopper over",
"multiselect_grid_edit_gps_err_read_only": "Kan ikke endre lokasjon på objekt(er) med kun lese-rettigheter, hopper over", "multiselect_grid_edit_gps_err_read_only": "Kan ikke endre lokasjon på objekt(er) med kun lese-rettigheter, hopper over",
"no_assets_to_show": "Ingen objekter å vise", "no_assets_to_show": "Ingen objekter å vise",
"no_name": "No name",
"notification_permission_dialog_cancel": "Avbryt", "notification_permission_dialog_cancel": "Avbryt",
"notification_permission_dialog_content": "For å aktivere notifikasjoner, gå til Innstillinger og velg tillat.", "notification_permission_dialog_content": "For å aktivere notifikasjoner, gå til Innstillinger og velg tillat.",
"notification_permission_dialog_settings": "Innstillinger", "notification_permission_dialog_settings": "Innstillinger",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Feil oppstått", "scaffold_body_error_occurred": "Feil oppstått",
"search_bar_hint": "Søk i dine bilder", "search_bar_hint": "Søk i dine bilder",
"search_filter_apply": "Aktiver filter", "search_filter_apply": "Aktiver filter",
"search_filter_camera": "Camera",
"search_filter_camera_make": "Merke", "search_filter_camera_make": "Merke",
"search_filter_camera_model": "Modell", "search_filter_camera_model": "Modell",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "Arkiver", "search_filter_display_option_archive": "Arkiver",
"search_filter_display_option_favorite": "Favoritt", "search_filter_display_option_favorite": "Favoritt",
"search_filter_display_option_not_in_album": "Ikke i album", "search_filter_display_option_not_in_album": "Ikke i album",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "By", "search_filter_location_city": "By",
"search_filter_location_country": "Land", "search_filter_location_country": "Land",
"search_filter_location_state": "Fylke", "search_filter_location_state": "Fylke",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "Alle", "search_filter_media_type_all": "Alle",
"search_filter_media_type_image": "Bilde", "search_filter_media_type_image": "Bilde",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "Video", "search_filter_media_type_video": "Video",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "Kategorier", "search_page_categories": "Kategorier",
"search_page_favorites": "Favoritter", "search_page_favorites": "Favoritter",
"search_page_motion_photos": "Bevegelige bilder", "search_page_motion_photos": "Bevegelige bilder",
+31 -1
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Annuleren", "action_common_cancel": "Annuleren",
"action_common_clear": "Resetten", "action_common_clear": "Resetten",
"action_common_confirm": "Bevestigen", "action_common_confirm": "Bevestigen",
"action_common_save": "Opslaan",
"action_common_select": "Selecteren",
"action_common_update": "Bijwerken", "action_common_update": "Bijwerken",
"add_to_album_bottom_sheet_added": "Toegevoegd aan {album}", "add_to_album_bottom_sheet_added": "Toegevoegd aan {album}",
"add_to_album_bottom_sheet_already_exists": "Staat al in {album}", "add_to_album_bottom_sheet_already_exists": "Staat al in {album}",
@@ -32,7 +34,7 @@
"album_viewer_appbar_share_err_title": "Albumtitel wijzigen mislukt", "album_viewer_appbar_share_err_title": "Albumtitel wijzigen mislukt",
"album_viewer_appbar_share_leave": "Verlaat album", "album_viewer_appbar_share_leave": "Verlaat album",
"album_viewer_appbar_share_remove": "Verwijder uit album", "album_viewer_appbar_share_remove": "Verwijder uit album",
"album_viewer_appbar_share_to": "Delen met", "album_viewer_appbar_share_to": "Delen via",
"album_viewer_page_share_add_users": "Gebruikers toevoegen", "album_viewer_page_share_add_users": "Gebruikers toevoegen",
"all_people_page_title": "Mensen", "all_people_page_title": "Mensen",
"all_videos_page_title": "Video's", "all_videos_page_title": "Video's",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "Nieuw wachtwoord", "change_password_form_new_password": "Nieuw wachtwoord",
"change_password_form_password_mismatch": "Wachtwoorden komen niet overeen", "change_password_form_password_mismatch": "Wachtwoorden komen niet overeen",
"change_password_form_reenter_new_password": "Vul het wachtwoord opnieuw in", "change_password_form_reenter_new_password": "Vul het wachtwoord opnieuw in",
"client_cert_dialog_msg_confirm": "Ok",
"client_cert_enter_password": "Voer wachtwoord in",
"client_cert_import": "Importeren",
"client_cert_import_success_msg": "Clientcertificaat is geïmporteerd",
"client_cert_invalid_msg": "Ongeldig certificaatbestand of verkeerd wachtwoord",
"client_cert_remove": "Verwijderen",
"client_cert_remove_msg": "Clientcertificaat is verwijderd",
"client_cert_subtitle": "Ondersteunt alleen PKCS12 (.p12, .pfx) formaat. Certificaat importeren/verwijderen is alleen beschikbaar vóór het inloggen",
"client_cert_title": "SSL clientcertificaat",
"common_add_to_album": "Aan album toevoegen", "common_add_to_album": "Aan album toevoegen",
"common_change_password": "Wachtwoord wijzigen", "common_change_password": "Wachtwoord wijzigen",
"common_create_new_album": "Nieuw album maken", "common_create_new_album": "Nieuw album maken",
"common_server_error": "Controleer je netwerkverbinding, zorg ervoor dat de server bereikbaar is en de app/server versies compatibel zijn.", "common_server_error": "Controleer je netwerkverbinding, zorg ervoor dat de server bereikbaar is en de app/server versies compatibel zijn.",
"common_shared": "Gedeeld", "common_shared": "Gedeeld",
"contextual_search": "Zonsopkomst op het strand",
"control_bottom_app_bar_add_to_album": "Aan album toevoegen", "control_bottom_app_bar_add_to_album": "Aan album toevoegen",
"control_bottom_app_bar_album_info": "{} items", "control_bottom_app_bar_album_info": "{} items",
"control_bottom_app_bar_album_info_shared": "{} items · Gedeeld", "control_bottom_app_bar_album_info_shared": "{} items · Gedeeld",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Verwijderen", "control_bottom_app_bar_delete": "Verwijderen",
"control_bottom_app_bar_delete_from_immich": "Verwijderen van Immich", "control_bottom_app_bar_delete_from_immich": "Verwijderen van Immich",
"control_bottom_app_bar_delete_from_local": "Verwijderen van apparaat", "control_bottom_app_bar_delete_from_local": "Verwijderen van apparaat",
"control_bottom_app_bar_edit": "Bewerken",
"control_bottom_app_bar_edit_location": "Locatie bewerken", "control_bottom_app_bar_edit_location": "Locatie bewerken",
"control_bottom_app_bar_edit_time": "Datum & tijd bewerken", "control_bottom_app_bar_edit_time": "Datum & tijd bewerken",
"control_bottom_app_bar_favorite": "Favoriet", "control_bottom_app_bar_favorite": "Favoriet",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Experimenteel", "experimental_settings_title": "Experimenteel",
"favorites_page_no_favorites": "Geen favoriete assets gevonden", "favorites_page_no_favorites": "Geen favoriete assets gevonden",
"favorites_page_title": "Favorieten", "favorites_page_title": "Favorieten",
"filename_search": "Bestandsnaam of extensie",
"haptic_feedback_switch": "Aanraaktrillingen inschakelen", "haptic_feedback_switch": "Aanraaktrillingen inschakelen",
"haptic_feedback_title": "Aanraaktrillingen", "haptic_feedback_title": "Aanraaktrillingen",
"header_settings_add_header_tip": "Header toevoegen", "header_settings_add_header_tip": "Header toevoegen",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Download gestart", "image_viewer_page_state_provider_download_started": "Download gestart",
"image_viewer_page_state_provider_download_success": "Download succesvol", "image_viewer_page_state_provider_download_success": "Download succesvol",
"image_viewer_page_state_provider_share_error": "Deel Error", "image_viewer_page_state_provider_share_error": "Deel Error",
"invalid_date": "Ongeldige datum",
"invalid_date_format": "Ongeldig datumformaat",
"library_page_albums": "Albums", "library_page_albums": "Albums",
"library_page_archive": "Archief", "library_page_archive": "Archief",
"library_page_device_albums": "Albums op apparaat", "library_page_device_albums": "Albums op apparaat",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "Kan datum van alleen-lezen asset(s) niet wijzigen, overslaan", "multiselect_grid_edit_date_time_err_read_only": "Kan datum van alleen-lezen asset(s) niet wijzigen, overslaan",
"multiselect_grid_edit_gps_err_read_only": "Kan locatie van alleen-lezen asset(s) niet wijzigen, overslaan", "multiselect_grid_edit_gps_err_read_only": "Kan locatie van alleen-lezen asset(s) niet wijzigen, overslaan",
"no_assets_to_show": "Geen foto's om te laten zien", "no_assets_to_show": "Geen foto's om te laten zien",
"no_name": "Geen naam",
"notification_permission_dialog_cancel": "Annuleren", "notification_permission_dialog_cancel": "Annuleren",
"notification_permission_dialog_content": "Om meldingen in te schakelen, ga naar Instellingen en selecteer toestaan.", "notification_permission_dialog_content": "Om meldingen in te schakelen, ga naar Instellingen en selecteer toestaan.",
"notification_permission_dialog_settings": "Instellingen", "notification_permission_dialog_settings": "Instellingen",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Fout opgetreden", "scaffold_body_error_occurred": "Fout opgetreden",
"search_bar_hint": "Foto's doorzoeken", "search_bar_hint": "Foto's doorzoeken",
"search_filter_apply": "Filter toepassen", "search_filter_apply": "Filter toepassen",
"search_filter_camera": "Camera",
"search_filter_camera_make": "Merk", "search_filter_camera_make": "Merk",
"search_filter_camera_model": "Model", "search_filter_camera_model": "Model",
"search_filter_camera_title": "Selecteer cameratype",
"search_filter_date": "Datum",
"search_filter_date_interval": "{start} tot {end}",
"search_filter_date_title": "Selecteer datumbereik",
"search_filter_display_option_archive": "Archief", "search_filter_display_option_archive": "Archief",
"search_filter_display_option_favorite": "Favoriet", "search_filter_display_option_favorite": "Favoriet",
"search_filter_display_option_not_in_album": "Niet in album", "search_filter_display_option_not_in_album": "Niet in album",
"search_filter_display_options": "Weergaveopties",
"search_filter_display_options_title": "Weergaveopties",
"search_filter_location": "Locatie",
"search_filter_location_city": "Stad", "search_filter_location_city": "Stad",
"search_filter_location_country": "Land", "search_filter_location_country": "Land",
"search_filter_location_state": "Status", "search_filter_location_state": "Status",
"search_filter_location_title": "Selecteer locatie",
"search_filter_media_type": "Mediatype",
"search_filter_media_type_all": "Alle", "search_filter_media_type_all": "Alle",
"search_filter_media_type_image": "Afbeelding", "search_filter_media_type_image": "Afbeelding",
"search_filter_media_type_title": "Selecteer mediatype",
"search_filter_media_type_video": "Video", "search_filter_media_type_video": "Video",
"search_filter_people": "Mensen",
"search_filter_people_title": "Selecteer mensen",
"search_page_categories": "Categorieën", "search_page_categories": "Categorieën",
"search_page_favorites": "Favorieten", "search_page_favorites": "Favorieten",
"search_page_motion_photos": "Bewegende foto's", "search_page_motion_photos": "Bewegende foto's",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Anuluj", "action_common_cancel": "Anuluj",
"action_common_clear": "Wyrzuść", "action_common_clear": "Wyrzuść",
"action_common_confirm": "Potwierdzać", "action_common_confirm": "Potwierdzać",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "Aktualizuj", "action_common_update": "Aktualizuj",
"add_to_album_bottom_sheet_added": "Dodano do {album}", "add_to_album_bottom_sheet_added": "Dodano do {album}",
"add_to_album_bottom_sheet_already_exists": "Już w {album}", "add_to_album_bottom_sheet_already_exists": "Już w {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "Nowe Hasło", "change_password_form_new_password": "Nowe Hasło",
"change_password_form_password_mismatch": "Hasła nie są zgodne", "change_password_form_password_mismatch": "Hasła nie są zgodne",
"change_password_form_reenter_new_password": "Wprowadź ponownie Nowe Hasło", "change_password_form_reenter_new_password": "Wprowadź ponownie Nowe Hasło",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "Dodaj do albumu", "common_add_to_album": "Dodaj do albumu",
"common_change_password": "Zmień Hasło", "common_change_password": "Zmień Hasło",
"common_create_new_album": "Utwórz nowy album", "common_create_new_album": "Utwórz nowy album",
"common_server_error": "Sprawdź połączenie sieciowe, upewnij się, że serwer jest osiągalny i wersje aplikacji/serwera są kompatybilne.", "common_server_error": "Sprawdź połączenie sieciowe, upewnij się, że serwer jest osiągalny i wersje aplikacji/serwera są kompatybilne.",
"common_shared": "Udostępnione", "common_shared": "Udostępnione",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "Dodaj do albumu", "control_bottom_app_bar_add_to_album": "Dodaj do albumu",
"control_bottom_app_bar_album_info": "{} pozycji", "control_bottom_app_bar_album_info": "{} pozycji",
"control_bottom_app_bar_album_info_shared": "{} pozycji · Udostępnionych", "control_bottom_app_bar_album_info_shared": "{} pozycji · Udostępnionych",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Usuń", "control_bottom_app_bar_delete": "Usuń",
"control_bottom_app_bar_delete_from_immich": "Usuń z Immicha", "control_bottom_app_bar_delete_from_immich": "Usuń z Immicha",
"control_bottom_app_bar_delete_from_local": "Usuń z urządzenia", "control_bottom_app_bar_delete_from_local": "Usuń z urządzenia",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "Edytuj lokalizację", "control_bottom_app_bar_edit_location": "Edytuj lokalizację",
"control_bottom_app_bar_edit_time": "Edytuj datę i godzinę", "control_bottom_app_bar_edit_time": "Edytuj datę i godzinę",
"control_bottom_app_bar_favorite": "Ulubione", "control_bottom_app_bar_favorite": "Ulubione",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Eksperymentalny", "experimental_settings_title": "Eksperymentalny",
"favorites_page_no_favorites": "Nie znaleziono ulubionych zasobów", "favorites_page_no_favorites": "Nie znaleziono ulubionych zasobów",
"favorites_page_title": "Ulubione", "favorites_page_title": "Ulubione",
"filename_search": "File name or extension",
"haptic_feedback_switch": "Enable haptic feedback", "haptic_feedback_switch": "Enable haptic feedback",
"haptic_feedback_title": "Haptic Feedback", "haptic_feedback_title": "Haptic Feedback",
"header_settings_add_header_tip": "Dodaj nagłówek", "header_settings_add_header_tip": "Dodaj nagłówek",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Pobieranie rozpoczęte", "image_viewer_page_state_provider_download_started": "Pobieranie rozpoczęte",
"image_viewer_page_state_provider_download_success": "Pobieranie zakończone", "image_viewer_page_state_provider_download_success": "Pobieranie zakończone",
"image_viewer_page_state_provider_share_error": "Udostępnij błąd", "image_viewer_page_state_provider_share_error": "Udostępnij błąd",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "Albumy", "library_page_albums": "Albumy",
"library_page_archive": "Archiwum", "library_page_archive": "Archiwum",
"library_page_device_albums": "Albumy na Urządzeniu", "library_page_device_albums": "Albumy na Urządzeniu",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "Nie można edytować daty zasobów tylko do odczytu, pomijanie", "multiselect_grid_edit_date_time_err_read_only": "Nie można edytować daty zasobów tylko do odczytu, pomijanie",
"multiselect_grid_edit_gps_err_read_only": "Nie można edytować lokalizacji zasobów tylko do odczytu, pomijanie", "multiselect_grid_edit_gps_err_read_only": "Nie można edytować lokalizacji zasobów tylko do odczytu, pomijanie",
"no_assets_to_show": "Brak zasobów do pokazania", "no_assets_to_show": "Brak zasobów do pokazania",
"no_name": "No name",
"notification_permission_dialog_cancel": "Anuluj", "notification_permission_dialog_cancel": "Anuluj",
"notification_permission_dialog_content": "Aby włączyć powiadomienia, przejdź do Ustawień i wybierz opcję Zezwalaj.", "notification_permission_dialog_content": "Aby włączyć powiadomienia, przejdź do Ustawień i wybierz opcję Zezwalaj.",
"notification_permission_dialog_settings": "Ustawienia", "notification_permission_dialog_settings": "Ustawienia",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Wystąpił błąd", "scaffold_body_error_occurred": "Wystąpił błąd",
"search_bar_hint": "Szukaj swoich zdjęć", "search_bar_hint": "Szukaj swoich zdjęć",
"search_filter_apply": "Zastosuj filtr", "search_filter_apply": "Zastosuj filtr",
"search_filter_camera": "Camera",
"search_filter_camera_make": "Make", "search_filter_camera_make": "Make",
"search_filter_camera_model": "Model", "search_filter_camera_model": "Model",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "Archiwum", "search_filter_display_option_archive": "Archiwum",
"search_filter_display_option_favorite": "Ulubiony", "search_filter_display_option_favorite": "Ulubiony",
"search_filter_display_option_not_in_album": "Nie w albumie", "search_filter_display_option_not_in_album": "Nie w albumie",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "Miasto", "search_filter_location_city": "Miasto",
"search_filter_location_country": "Kraj", "search_filter_location_country": "Kraj",
"search_filter_location_state": "State", "search_filter_location_state": "State",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "Wszystko", "search_filter_media_type_all": "Wszystko",
"search_filter_media_type_image": "Obrazy", "search_filter_media_type_image": "Obrazy",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "Filmy", "search_filter_media_type_video": "Filmy",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "Kategorie", "search_page_categories": "Kategorie",
"search_page_favorites": "Ulubione", "search_page_favorites": "Ulubione",
"search_page_motion_photos": "Zdjęcia ruchome", "search_page_motion_photos": "Zdjęcia ruchome",
+30
View File
@@ -3,6 +3,8 @@
"action_common_cancel": "Cancelar", "action_common_cancel": "Cancelar",
"action_common_clear": "Clear", "action_common_clear": "Clear",
"action_common_confirm": "Confirm", "action_common_confirm": "Confirm",
"action_common_save": "Save",
"action_common_select": "Select",
"action_common_update": "Atualizar", "action_common_update": "Atualizar",
"add_to_album_bottom_sheet_added": "Adicionar a {album}", "add_to_album_bottom_sheet_added": "Adicionar a {album}",
"add_to_album_bottom_sheet_already_exists": "Já pertence a {album}", "add_to_album_bottom_sheet_already_exists": "Já pertence a {album}",
@@ -141,11 +143,21 @@
"change_password_form_new_password": "Nova senha", "change_password_form_new_password": "Nova senha",
"change_password_form_password_mismatch": "As senhas não coincidem", "change_password_form_password_mismatch": "As senhas não coincidem",
"change_password_form_reenter_new_password": "Re-introduza a nova senha", "change_password_form_reenter_new_password": "Re-introduza a nova senha",
"client_cert_dialog_msg_confirm": "OK",
"client_cert_enter_password": "Enter Password",
"client_cert_import": "Import",
"client_cert_import_success_msg": "Client certificate is imported",
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
"client_cert_remove": "Remove",
"client_cert_remove_msg": "Client certificate is removed",
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
"client_cert_title": "SSL Client Certificate",
"common_add_to_album": "Adicionar ao álbum", "common_add_to_album": "Adicionar ao álbum",
"common_change_password": "Mudar a senha", "common_change_password": "Mudar a senha",
"common_create_new_album": "Criar novo álbum", "common_create_new_album": "Criar novo álbum",
"common_server_error": "Verifique a sua ligação de rede, certifique-se de que o servidor está acessível e de que as versões da aplicação/servidor são compatíveis.", "common_server_error": "Verifique a sua ligação de rede, certifique-se de que o servidor está acessível e de que as versões da aplicação/servidor são compatíveis.",
"common_shared": "Partilhado", "common_shared": "Partilhado",
"contextual_search": "Sunrise on the beach",
"control_bottom_app_bar_add_to_album": "Adicionar ao álbum", "control_bottom_app_bar_add_to_album": "Adicionar ao álbum",
"control_bottom_app_bar_album_info": "{} itens", "control_bottom_app_bar_album_info": "{} itens",
"control_bottom_app_bar_album_info_shared": "{} itens · Partilhado", "control_bottom_app_bar_album_info_shared": "{} itens · Partilhado",
@@ -154,6 +166,7 @@
"control_bottom_app_bar_delete": "Deletar", "control_bottom_app_bar_delete": "Deletar",
"control_bottom_app_bar_delete_from_immich": "Apagar do Immich", "control_bottom_app_bar_delete_from_immich": "Apagar do Immich",
"control_bottom_app_bar_delete_from_local": "Apagar do dispositivo", "control_bottom_app_bar_delete_from_local": "Apagar do dispositivo",
"control_bottom_app_bar_edit": "Edit",
"control_bottom_app_bar_edit_location": "Editar Localização", "control_bottom_app_bar_edit_location": "Editar Localização",
"control_bottom_app_bar_edit_time": "Editar Data & Hora", "control_bottom_app_bar_edit_time": "Editar Data & Hora",
"control_bottom_app_bar_favorite": "Favorito", "control_bottom_app_bar_favorite": "Favorito",
@@ -203,6 +216,7 @@
"experimental_settings_title": "Experimental", "experimental_settings_title": "Experimental",
"favorites_page_no_favorites": "Nenhum recurso favorito encontrado", "favorites_page_no_favorites": "Nenhum recurso favorito encontrado",
"favorites_page_title": "Favoritos", "favorites_page_title": "Favoritos",
"filename_search": "File name or extension",
"haptic_feedback_switch": "Enable haptic feedback", "haptic_feedback_switch": "Enable haptic feedback",
"haptic_feedback_title": "Haptic Feedback", "haptic_feedback_title": "Haptic Feedback",
"header_settings_add_header_tip": "Add Header", "header_settings_add_header_tip": "Add Header",
@@ -230,6 +244,8 @@
"image_viewer_page_state_provider_download_started": "Download Started", "image_viewer_page_state_provider_download_started": "Download Started",
"image_viewer_page_state_provider_download_success": "Descarregado", "image_viewer_page_state_provider_download_success": "Descarregado",
"image_viewer_page_state_provider_share_error": "Erro ao partilhar", "image_viewer_page_state_provider_share_error": "Erro ao partilhar",
"invalid_date": "Invalid date",
"invalid_date_format": "Invalid date format",
"library_page_albums": "Álbuns", "library_page_albums": "Álbuns",
"library_page_archive": "Arquivo", "library_page_archive": "Arquivo",
"library_page_device_albums": "Álbuns no dispositivo", "library_page_device_albums": "Álbuns no dispositivo",
@@ -311,6 +327,7 @@
"multiselect_grid_edit_date_time_err_read_only": "Não é possível editar a data de recurso(s) só de leitura, ignorando", "multiselect_grid_edit_date_time_err_read_only": "Não é possível editar a data de recurso(s) só de leitura, ignorando",
"multiselect_grid_edit_gps_err_read_only": "Não é possível editar a localização de recurso(s) só de leitura, ignorando", "multiselect_grid_edit_gps_err_read_only": "Não é possível editar a localização de recurso(s) só de leitura, ignorando",
"no_assets_to_show": "No assets to show", "no_assets_to_show": "No assets to show",
"no_name": "No name",
"notification_permission_dialog_cancel": "Cancelar", "notification_permission_dialog_cancel": "Cancelar",
"notification_permission_dialog_content": "Para ativar as notificações, vá a Definições e selecione permitir.", "notification_permission_dialog_content": "Para ativar as notificações, vá a Definições e selecione permitir.",
"notification_permission_dialog_settings": "Definições", "notification_permission_dialog_settings": "Definições",
@@ -354,17 +371,30 @@
"scaffold_body_error_occurred": "Ocorreu um erro", "scaffold_body_error_occurred": "Ocorreu um erro",
"search_bar_hint": "Busque suas fotos", "search_bar_hint": "Busque suas fotos",
"search_filter_apply": "Apply filter", "search_filter_apply": "Apply filter",
"search_filter_camera": "Camera",
"search_filter_camera_make": "Make", "search_filter_camera_make": "Make",
"search_filter_camera_model": "Model", "search_filter_camera_model": "Model",
"search_filter_camera_title": "Select camera type",
"search_filter_date": "Date",
"search_filter_date_interval": "{start} to {end}",
"search_filter_date_title": "Select a date range",
"search_filter_display_option_archive": "Archive", "search_filter_display_option_archive": "Archive",
"search_filter_display_option_favorite": "Favorite", "search_filter_display_option_favorite": "Favorite",
"search_filter_display_option_not_in_album": "Not in album", "search_filter_display_option_not_in_album": "Not in album",
"search_filter_display_options": "Display Options",
"search_filter_display_options_title": "Display options",
"search_filter_location": "Location",
"search_filter_location_city": "City", "search_filter_location_city": "City",
"search_filter_location_country": "Country", "search_filter_location_country": "Country",
"search_filter_location_state": "State", "search_filter_location_state": "State",
"search_filter_location_title": "Select location",
"search_filter_media_type": "Media Type",
"search_filter_media_type_all": "All", "search_filter_media_type_all": "All",
"search_filter_media_type_image": "Image", "search_filter_media_type_image": "Image",
"search_filter_media_type_title": "Select media type",
"search_filter_media_type_video": "Video", "search_filter_media_type_video": "Video",
"search_filter_people": "People",
"search_filter_people_title": "Select people",
"search_page_categories": "Categorias", "search_page_categories": "Categorias",
"search_page_favorites": "Favoritos", "search_page_favorites": "Favoritos",
"search_page_motion_photos": "Fotos com movimento", "search_page_motion_photos": "Fotos com movimento",

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