Compare commits

..

166 Commits

Author SHA1 Message Date
Fynn Petersen-Frey eb0f79b72e tflite CLIP export 2023-12-08 12:15:32 +01:00
Fynn Petersen-Frey 5f6ad9e239 feat(ml): ARM NN acceleration 2023-11-18 20:02:51 +01:00
Daniel Dietzler 767fe87b2e fix typo (#5124) 2023-11-18 17:49:30 +00:00
Daniel Dietzler f2877c3a6e chore: add warning to compose file and readme (#5123)
* add warning to compose file

* add readme
2023-11-18 11:43:10 -06:00
Jason Rasmussen adae5dd758 feat(web)!: SPA (#5069)
* feat(web): SPA

* chore: remove unnecessary prune

* feat(web): merge with immich-server

* Correct method name

* fix: bugs, docs, workflows, etc.

* chore: keep dockerignore for dev

* chore: remove license

* fix: expose 2283

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2023-11-17 22:13:36 -06:00
Alex 5118d261ab chore(web): remove deprecation message (#5115)
* chore(web): remove deprecation message

* keep the slot
2023-11-17 22:13:23 -06:00
Alex cc15c5c69f chore: post release tasks 2023-11-17 21:25:13 -06:00
Alex The Bot ec51a9f6d6 Version v1.87.0 2023-11-18 02:58:26 +00:00
Jason Rasmussen 9b2ac6aaca feat(server): decomissioned warning (#5113) 2023-11-17 20:31:34 -06:00
shenlong 4daf2478aa feat(mobile): remove announcement overlay and show in app bar dialog (#5104)
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2023-11-17 15:46:18 -06:00
Fynn Petersen-Frey 63a745c7ad fix(mobile): update local deleted assets in sync (#5099) 2023-11-17 15:35:57 -06:00
davidacampos 47a4984a56 feat(web): add (lower) thumbnail resolution options (#5107)
* Added extra lower resolution options for thumbnails

Added 200p and 720p as options for small and large thumbnails resolutions respectively.

* Also included 1080p in large thumbnails resolution options
2023-11-17 20:25:35 +00:00
Jason Rasmussen 82f12b8ee6 chore(server): remove import file endpoint (#5093)
* chore(server): remove import file endpoint

* chore: open api
2023-11-17 05:44:59 +00:00
Jason Rasmussen c7b3039a1a chore(server): remove asset search endpoint (#5094)
* chore(server): remove unused search endpoint

* chore: open api
2023-11-16 22:24:31 -06:00
Alex ed68c49c16 chore(web): annoucement box for breaking change (#5091)
* chore(web): annoucement box for breaking change

* log
2023-11-17 03:38:32 +00:00
Mert a6af4892e3 fix(ml): better model unloading (#3340)
* restart process on inactivity

* formatting

* always update `last_called`

* load models sequentially

* renamed variable, updated docs

* formatting

* made poll env name consistent with model ttl env
2023-11-16 20:42:44 -06:00
Jordy 98f87c6548 feat(readme): added new zcash donation option in readme (#5087)
* Added ZCash in Dutch(nl) readme

* Added ZCash in Turkish(tr) readme

* Added ZCash in Italian(it) readme

* Added ZCash in French(fr) readme

* Added ZCash in Spanish(es) readme

* Added ZCash in Catalan(ca) readme
2023-11-16 20:10:49 +00:00
Alex 54d770df8a Update README.md 2023-11-16 09:36:35 -06:00
renovate[bot] b82db1edaa chore(deps): update dependency @testing-library/jest-dom to v6 (#5073)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-15 22:52:34 -06:00
Jason Rasmussen 87f02cc775 chore(server): shared link e2e for add/remove assets (#5052) 2023-11-15 17:50:55 -06:00
renovate[bot] 69030ea9a7 chore(deps): update dependency @faker-js/faker to v8 (#5059)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-15 17:50:07 -06:00
martin 956ca816bc fix(web): previous url in person page (#5071) 2023-11-15 17:14:18 -06:00
Fynn Petersen-Frey 343afea713 fix(mobile): rebuild of unified partner timeline (#5065) 2023-11-15 08:31:38 -06:00
renovate[bot] f54e6fc09f chore(deps): update postgres:14-alpine docker digest to 50d9be7 (#5054)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-15 02:34:42 +00:00
renovate[bot] f4ef259ba0 fix(deps): update dependency commander to v11.1.0 (#5003)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-14 20:28:58 -06:00
dependabot[bot] bced117eb4 chore(deps): bump actions/github-script from 6 to 7 (#5032)
Bumps [actions/github-script](https://github.com/actions/github-script) from 6 to 7.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-14 20:27:43 -06:00
Alex 54b9bfaeef chore(mobile): translation update (#5053) 2023-11-14 20:27:01 -06:00
Michael Manganiello c4f7cfc2a6 feat(mobile): Add es-US translations (#4997)
Adding es-US translations for all current strings in the application.
2023-11-14 20:23:58 -06:00
Jason Rasmussen 4b722517f0 chore: cleanup e2e (#5051) 2023-11-14 20:31:06 -05:00
Jason Rasmussen 6127fd4c5c chore(server): improve e2e test speed (#5026)
* feat: improve shared link (41s to 8s)

* feat: improve activity (18s to 8s)

* feat: improve partner (20s to 10s)

* feat: improve server-info (10s to 6s)

* feat: improve system-config

* fix: e2e

* chore: linting
2023-11-14 20:08:22 -05:00
martin 6214d510d6 fix(web): back button from person detail page (#5047)
* feat: return button to the main page

* add album route

* feat: do not use explicit routes
2023-11-14 17:55:03 -05:00
Alex ecbe7beb6c chore: readme feature list (#5048)
* chore: update feature list

* typo

* typo
2023-11-14 17:54:06 -05:00
Jason Rasmussen 753dab8b3c feat(server): asset search endpoint (#4931)
* feat(server): GET /assets endpoint

* chore: open api

* chore: use dumb name

* feat: search by make, model, lens, city, state, country

* chore: open api

* chore: pagination validation and tests

* chore: pr feedback
2023-11-14 22:47:15 +00:00
Jonathan Jogenfors 7a8f8e5472 chore: don't set max old space (#5050) 2023-11-14 16:32:58 -06:00
Fynn Petersen-Frey 5d8af5f94c fix(mobile): partner assets in albums & share (#5029) 2023-11-14 14:32:38 -06:00
Fynn Petersen-Frey 5145c33ed4 feat(mobile): use app without storage permission (#5014)
* feat(mobile): use app without storage permission

* address review feedback
2023-11-14 14:30:27 -06:00
Ishan Jain 8f3ed8ba8e fix(server): print extra config keys on error (#5036) 2023-11-14 08:13:42 -05:00
Alex dc4e6c4629 chore: post release tasks 2023-11-13 22:19:24 -06:00
Alex The Bot a7cacafe25 Version v1.86.0 2023-11-14 04:08:18 +00:00
martin d25a245049 feat(web,server): user avatar color (#4779) 2023-11-14 03:10:35 +00:00
opdelta 14c7187539 feat(mobile): Added fr-CA translations (#5023)
Co-authored-by: Ziad Lteif <cj291059>
2023-11-13 20:20:54 -06:00
Jason Rasmussen 24670178dc feat(web): use css vraiables (#5022) 2023-11-13 17:16:26 -05:00
Dmitriy P 72fb421f54 feat(web): Add file path info for owned assets (#4943)
* feat(web): Add file path info for external assets

Add file path information to the asset details panel for External assets. This will allow a user to easily locate said asset in the filesystem, to perform any desired tasks on that asset. Styling was chosen to be as unobtrusive as possible.

* feat(web): toggleable file path info for external assets

If the user is the owner of the current asset and it's an external asset, then add a button next to the filename to reveal the asset's file path.

* show path on owned asset and styling

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2023-11-13 21:57:58 +00:00
Alex ac7e8bcdf4 fix(mobile): freeze at splash screen when updating from 1.85 to the new version (#5012)
* fix(mobile): Cannot return to logged in screen due to name changes

* fix(mobile): Cannot return to logged in screen due to name changes

* remove deadcode

* test deprecate

* Add deprecated decorator

* revert api change
2023-11-13 14:15:36 -06:00
Fynn Petersen-Frey 38983838fd fix(mobile): better app state handling (#4989)
* fix(mobile): better app state handling

* watch -> read

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2023-11-13 19:51:16 +00:00
Mert 291159e7fc fixed tests (#5017) 2023-11-13 19:37:39 +00:00
Fynn Petersen-Frey 464cf903f4 fix(mobile): better icon spacing in bottom bar (#5010)
* fix(mobile): better icon spacing in bottom bar

* wider buttons
2023-11-13 10:19:51 -06:00
Mert 935f471ccb chore(ml): use strict mypy (#5001)
* improved typing

* improved export typing

* strict mypy & check export folder

* formatting

* add formatting checks for export folder

* re-added init call
2023-11-13 10:18:46 -06:00
Fynn Petersen-Frey 9fa9ad05b1 feat(mobile): unify partner assets on timeline (#4974)
* feat(mobile): unify partner assets on timeline

* skip non-owned assets in bulk actions

* add message when trying to delete partner assets
2023-11-13 09:54:41 -06:00
waclaw66 0c482960ce fix(web): better year labels (#5009)
* better year labels

* fixes

* lint fixes
2023-11-13 09:37:50 -06:00
Alex c3f8dc8c22 chore(mobile): translation update (#5011) 2023-11-13 09:24:00 -06:00
bo0tzz a959f2a51d chore(renovate): Ignore un-bumpable mobile deps (#5007) 2023-11-13 10:46:32 +01:00
renovate[bot] 880f4f61d2 chore(deps): update dependency @types/jest to v29.5.8 (#4995)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-13 03:54:25 +00:00
renovate[bot] ab1d1ef4e7 chore(deps): update dependency eslint to v8.53.0 (#4986)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-12 21:46:22 -06:00
renovate[bot] 89255d0889 fix(deps): update dependency yaml to v2.3.4 (#4981)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-12 21:46:06 -06:00
renovate[bot] 14acee9090 fix(deps): update dependency systeminformation to v5.21.17 (#4979)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-12 21:45:52 -06:00
renovate[bot] 8399130f05 chore(deps): update dependency eslint-plugin-jest to v27.6.0 (#4987)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-12 21:45:23 -06:00
renovate[bot] 1188012279 fix(deps): update server (#4982)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-12 21:44:42 -06:00
renovate[bot] 04a8bde7ac chore(deps): update ghcr.io/nginxinc/nginx-unprivileged docker tag to v1.25.1 (#4978)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-12 21:38:43 -06:00
Fynn Petersen-Frey 069a32dcdb fix(mobile): run user sync operation with lock (#4984) 2023-11-12 10:35:08 -06:00
bo0tzz 388144823a chore(renovate): PR exiftool updates separately (#4985) 2023-11-12 17:07:55 +01:00
renovate[bot] c23d84be39 chore(deps): update dependency @types/node to v20.9.0 (#4983)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-12 15:15:44 +00:00
renovate[bot] 66120025b7 fix(deps): update dependency tailwindcss to v3.3.5 (#4980)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-12 10:04:24 -05:00
renovate[bot] da33653b0a chore(deps): update dependency @types/js-yaml to v4.0.9 (#4970)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-12 09:51:24 -05:00
renovate[bot] 3ea0210c1d chore(deps): update dependency @types/mime-types to v2.1.4 (#4971)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-12 09:50:55 -05:00
Ploonet 98f1e85c87 fix(docs): Typo in libraries exclusion pattern (#4972)
Co-authored-by: Antony Mota <amota.confluenceconseil@boiron.fr>
2023-11-12 09:49:47 -05:00
renovate[bot] d2509c619e chore(deps): update dependency jest-extended to v4.0.2 (#4976)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-12 09:48:43 -05:00
renovate[bot] 2bfe5d1573 chore(deps): update dependency @types/mock-fs to v4.13.4 (#4975)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-12 09:48:17 -05:00
Daniel Dietzler d7d464570f fix maplibre latlng import (#4977) 2023-11-12 14:46:17 +01:00
Alex Tran 2e82476cff chore: styling for partner stylesheet 2023-11-11 23:02:26 -06:00
renovate[bot] 2f462717aa chore(deps): update dependency @types/cli-progress to v3.11.5 (#4968)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-11 22:36:03 -05:00
renovate[bot] 86e04832a1 chore(deps): update dependency @types/jest to v29.5.8 (#4969)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-11 22:35:33 -05:00
Alex 96f1a271ef chore: update Makefile to use docker compose (#4967) 2023-11-12 01:31:01 +00:00
Sergey Kondrikov 55e3605ca4 feat(web): uniform random asset selection in slideshow mode (#4953)
* Implement weighted asset selection

* Rename totalAssets -> bucketCount

* Remove redundant check
2023-11-12 01:23:15 +00:00
renovate[bot] 0bf55d8e32 chore(deps): update dependency @types/chai to v4.3.10 (#4966)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-12 01:10:37 +00:00
renovate[bot] 2dcad93d9c chore(deps): update dependency @types/byte-size to v8.1.2 (#4965)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-12 01:09:16 +00:00
Mert 328a58ac0d feat(ml): add face models (#4952)
added models to config dropdown

fixed downloading

updated tests

use hf for face models

formatting
2023-11-11 19:04:49 -06:00
Brian Austin 7fca0d8da5 fix: replace first and last name with single field (#4915) 2023-11-11 19:03:32 -06:00
renovate[bot] 413ab2c538 chore(deps): update postgres:14-alpine docker digest to 874f566 (#4963)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-11 19:58:46 -05:00
renovate[bot] 394e0dfe37 chore(deps): update redis:6.2-alpine docker digest to 3995fe6 (#4964)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-11 19:58:01 -05:00
renovate[bot] a9b6acec28 chore(deps): update ghcr.io/nginxinc/nginx-unprivileged:1.25.0-alpine3.17 docker digest to 5ebb90a (#4960)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-11 16:54:55 -06:00
Daniel Dietzler ad4cbf20de refactor: map (#4957)
* fix mixed up lng lat for asset map

* minor cleanup

* update packages
2023-11-11 16:32:39 -06:00
bo0tzz 26fd797ac9 chore: re-enable renovate (#4955)
* Chore: reenable renovate

* chore(renovate): Don't group major updates

* chore(renovate): Use matchFileNames
2023-11-11 16:31:58 -06:00
Alex 35767591d2 feat(web): show partners assets on the main timeline (#4933) 2023-11-11 21:06:19 +00:00
aphymi 3b11854702 fix(mobile): fix JSON-format typos in Asset model (#4942) 2023-11-10 02:56:30 +00:00
Mansour 895129c997 feat!: add docker project name (#4906)
* add: docker project name

* chore: linting

---------

Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
2023-11-09 21:43:21 -05:00
martin 92ec1ce77f fix(server,web): correctly show album level like (#4916)
* fix: like in global activity

* refactor: rename isGlobal to ReactionLevel.Album

* chore: open api

* chore: e2e test for album vs comment duplicate like checking

---------

Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
2023-11-09 21:32:31 -05:00
Sushain Cherivirala 986bbfa831 feat(server): don't re-run face recognition on assets without any faces (#4854)
* Add AssetJobStatus

* fentity

* Add jobStatus field to AssetEntity

* Fix the migration doc paths

* Filter on facesRecognizedAt

* Set facesRecognizedAt field

* Test for facesRecognizedAt

* Done testing

* Adjust FK properties

* Add tests for WithoutProperty.FACES

* chore: non-nullable

---------

Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
2023-11-09 20:55:00 -05:00
Jason Rasmussen 75c065c83a chore(server): e2e test (#4941) 2023-11-09 20:23:03 -05:00
Alex 9c0805c37a fix(server): non-admin cannot use map (#4934)
* fix(server): non-admin cannot user map

* fix: admin route

---------

Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
2023-11-09 13:52:10 -06:00
shenlong bffc2cdf60 refactor(mobile): build context extensions (#4923)
* refactor: move all extensions to separate package

* refactor(mobile): add BuildContext extension

* refactor(mobile): use theme getters from context

* refactor(mobile): use media query size from context

* refactor(mobile): use auto router methods from context

* refactor(mobile): use navigator methods from context

---------

Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2023-11-09 10:19:53 -06:00
Daniel Dietzler a147dee4b6 feat: Maplibre (#4294)
* maplibre on web, custom styles from server

Actually use new vector tile server, custom style.json

support multiple style files, light/dark mode

cleanup, use new map everywhere

send file directly instead of loading first

better light/dark mode switching

remove leaflet

fix mapstyles dto, first draft of map settings

delete and add styles

fix delete default styles

fix tests

only allow one light and one dark style url

revert config core changes

fix server config store

fix tests

move axios fetches to repo

fix package-lock

fix tests

* open api

* add assets to docker container

* web: use mapSettings color for style

* style: add unique ids to map styles

* mobile: use style json for vector / raster

* do not use svelte-material-icons

* add click events to markers, simplify asset detail map

* improve map performance by using asset thumbnails for markers instead of original file

* Remove custom attribution

(by request)

* mobile: update map attribution

* style: map dark mode

* style: map light mode

* zoom level for state

* styling

* overflow gradient

* Limit maxZoom to 14

* mobile: listen for mapStyle changes in MapThumbnail

* mobile: update concurrency

---------

Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: bo0tzz <git@bo0tzz.me>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2023-11-09 10:10:56 -06:00
Jason Rasmussen 5423f1c25b refactor(server): auth dtos (#4881)
* refactor: auth dtos

* chore: open api
2023-11-09 10:14:15 -05:00
shenlong 5c602bf4d4 fix(mobile): add label for expire after in shared link edit page (#4920)
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2023-11-09 08:36:57 -06:00
bo0tzz 5db73c5c5c chore(ci): use custom base for server image build (#4456)
* Use base image for server build
* Clean up build scripts
* target tags for base image
* use prod tag instead of runtime
* use runtime stage for dev

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
2023-11-09 13:12:05 +00:00
Michael Manganiello 52fe392a9e fix(mobile): display simple album date when range is single day (#4919)
This change makes albums with same start and end date, to just display a
single date.

Currently, date range is displayed as `Nov 9 - Nov 9 2023`. With this
change, just `Nov 9 2023` is displayed. No changes are made for albums
where start and end dates do not match.
2023-11-09 03:16:56 +00:00
Alex 5e1c0fb465 chore: post release tasks 2023-11-08 12:51:34 -06:00
Alex The Bot 37ab37bffc Version v1.85.0 2023-11-08 03:20:59 +00:00
shenlong 664b7106ca feat(mobile): shared album activity disable handling (#4890)
* feat(mobile): shared album activity disable handling

* not show comment/like option on non-shared album, alternative text when activity is disabled

---------

Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2023-11-08 03:07:43 +00:00
Alex bb28cae671 docs: update (#4893)
* docs: update

* chore:format
2023-11-07 15:52:44 -06:00
shenlong c2c26c471a fix(mobile): do not show trashed assets in album viewer page (#4894)
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2023-11-07 13:19:45 -06:00
Strubbl 2dca2850dc Update README.md (#4892)
fix alt parameter spelling of the Discord image tag
2023-11-07 18:57:30 +00:00
dependabot[bot] 7fc8f6433b chore(deps): bump stumpylog/image-cleaner-action from 0.3.0 to 0.4.0 (#4886)
Bumps [stumpylog/image-cleaner-action](https://github.com/stumpylog/image-cleaner-action) from 0.3.0 to 0.4.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.3.0...v0.4.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>
2023-11-07 13:54:18 -05:00
Jason Rasmussen f6180fccdc chore(server): compose updates (#4878)
* chore: compose updates

* chore: docs for troubleshooting

* chore: add reference in docker compose to docs
2023-11-07 11:34:03 -05:00
martin 9d01885b58 feat(server, web): Album's options (#4870)
* feat: disable activity

* fix: disable reactions

* fix: tests

* fix: tests

* fix: tests

* pr feedback

* pr feedback

* chore: styling & wording

* refactor component

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2023-11-07 04:37:21 +00:00
Jason Rasmussen ace0a5911c fix(web): optimize deps (#4877) 2023-11-06 22:02:46 -06:00
Fynn Petersen-Frey 21f2d3058a feat(mobile)!: batched full/initial sync (#4840)
* feat(mobile): batched full/initial sync

* use OptionalBetween

* skip/take as integer

---------

Co-authored-by: Fynn Petersen-Frey <zoodyy@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2023-11-06 11:40:43 -06:00
shenlong 26fd9d7e5f feat(mobile): shared album activities (#4833)
* fix(server): global activity like duplicate search

* mobile: user_circle_avatar - fallback to text icon if no profile pic available

* mobile: use favourite icon in search "your activity"

* feat(mobile): shared album activities

* mobile: align hearts with user profile icon

* styling

* replace bottom sheet with dismissible

* add auto focus to the input

---------

Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
2023-11-06 09:46:26 -06:00
Jason Rasmussen c74ea7282a docs: python upload guide (#4867) 2023-11-06 09:08:36 -05:00
Jason Rasmussen 279481ad54 feat(server): make is favorite optional on asset upload (#4865)
* feat(server): make isFavorite optional

* chore: open api

* chore: e2e
2023-11-06 09:04:39 -05:00
Mert 9e7a32804b chore(server): set relations for getByIds (#4855) 2023-11-05 20:15:12 -06:00
martin a0743d8b7d feat(web): global activity (#4796)
* feat: global activity

* fix: tests

* pr feedback

* use flexbox

* fix: deleted control actions

* fix: flex box

* fix: do not show activity tab by default

* feat: better grouping

* fix: set isShared default value to false

* fix: prevent re-rendering the asset grid

* fix: activity status above the scrollbar

* fix: prevent re-rendering the asset grid

* fix: prevent re-rendering the asset grid

* pr feedback

* pr feedback

* pr feedback

* styling and better thumbnail

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2023-11-05 11:24:43 -06:00
Fynn Petersen-Frey 68000c21a8 fix(mobile): backup indicator wrong when only background backup is enabled (#4842)
Co-authored-by: Fynn Petersen-Frey <zoodyy@users.noreply.github.com>
2023-11-05 10:07:57 -06:00
Jason Rasmussen e671b30aaf fix(server): duplicate faces bug (#4844) 2023-11-05 10:07:29 -06:00
Sergey Kondrikov cf1dfdc776 fix(web): unstack after stack child selection (#4834) 2023-11-04 07:59:21 -05:00
doggo de29480dda fix(mobile): first stack list asset is now highlighted on view (#4802) 2023-11-03 20:43:43 -05:00
Jason Rasmussen 2e424fe249 feat(server): better api error messages (for unhandled exceptions) (#4817)
* feat(server): better error messages

* chore: open api

* chore: remove debug log

* fix: syntax error

* fix: e2e test
2023-11-03 20:33:15 -05:00
Wingy d4ef6f52bb chore(mobile): change version mismatch text (#4831)
* change version mismatch text

* change text
2023-11-03 20:20:42 -05:00
martin e1e45f3f32 fix(web): show one face for the same person in the detail panel (#4822) 2023-11-03 16:02:05 -05:00
Jesbin 330f4cadda docs: changes to docker compose command. (#4828) 2023-11-03 16:01:17 -05:00
waclaw66 621eef0edc feat(mobile): share assets from album (#4821)
* share from album

* fix case

* enhance conditional array items
2023-11-03 16:00:55 -05:00
waclaw66 33ce2b7bba fix(mobile): shows asset datetime with original timezone (#4774) 2023-11-03 09:04:41 -05:00
shenlong 81792a5342 fix(mobile): immich app bar tap radius (#4816)
* mobile: tool-tip for server url in app bar dialog

* fix: Add Inkwell around the entire profile image

* mobile: open documentation and github in browser

---------

Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2023-11-03 09:04:06 -05:00
shenlong 5f43971ccf mobile: allow upload if local asset in selection (#4815)
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2023-11-03 09:03:01 -05:00
Sergey Kondrikov 38443a6068 fix(web): unstacking issues (#4792)
* Fix typo

* Restore asset store consistency after unstacking

* Fix aspect ratio after unstacking
2023-11-03 09:01:48 -05:00
waclaw66 92bb42950e fix(web): scrollbar year label visibility (#4820)
* fixes year label visibility

* format fix
2023-11-03 08:54:02 -05:00
Jason Rasmussen b58edae134 fix(web): timeline alignment (#4808) 2023-11-02 15:11:59 -05:00
martin 2b9f20a1b5 fix: update like status (#4803) 2023-11-02 14:43:27 -04:00
Alex d5f8199655 fix(web): scrollbar not showing year (#4782)
* fix(web): scrollbar not showing year

* grammar

* fix test
2023-11-01 20:50:24 -05:00
Alex d8903de92e docs: remove read-only related content (#4781)
* docs: remove read-only related content

* format

* broken link
2023-11-01 20:49:57 -05:00
Jason Rasmussen 1d35965d03 feat(web): shuffle slideshow order (#4277)
* feat(web): shuffle slideshow order

* Fix play/stop issues

* Enter/exit fullscreen mode
* Prevent navigation to the next asset after exiting slideshow mode

* Fix entering the slideshow mode from an album page

* Simplify markup of the AssetViewer

Group viewer area and navigation (prev/next/slideshow bar) controls together

* Select a random asset from a random bucket

* Preserve assets order in random mode

* Exit fullscreen mode only if it is active

* Extract SlideshowHistory class

* Use traditional functions instead of arrow functions

* Refactor SlideshowHistory class

* Extract SlideshowBar component

* Fix comments

* Hide Say something in slideshow mode

---------

Co-authored-by: brighteyed <sergey.kondrikov@gmail.com>
2023-11-01 21:34:30 -04:00
Alex 309bf1ad22 chore: post release tasks 2023-11-01 14:43:10 -05:00
Jason Rasmussen 0130591a0f fix: show/set activity like per user (#4775)
* fix: like per user

* chore: open api

* chore: e2e test for userId filtering
2023-11-01 11:49:12 -04:00
Alex The Bot cf4ec06750 Version v1.84.0 2023-11-01 14:46:59 +00:00
Alex e8712e6694 fix(server): import scheduler module (#4766) 2023-10-31 23:40:35 -05:00
martin ce5966c23d feat(web,server): activity (#4682)
* feat: activity

* regenerate api

* fix: make asset owner unable to delete comment

* fix: merge

* fix: tests

* feat: use textarea instead of input

* fix: do actions only if the album is shared

* fix: placeholder opacity

* fix(web): improve messages UI

* fix(web): improve input message UI

* pr feedback

* fix: tests

* pr feedback

* pr feedback

* pr feedback

* fix permissions

* regenerate api

* pr feedback

* pr feedback

* multiple improvements on web

* fix: ui colors

* WIP

* chore: open api

* pr feedback

* fix: add comment

* chore: clean up

* pr feedback

* refactor: endpoints

* chore: open api

* fix: filter by type

* fix: e2e

* feat: e2e remove own comment

* fix: web tests

* remove console.log

* chore: cleanup

* fix: ui tweaks

* pr feedback

* fix web test

* fix: unit tests

* chore: remove unused code

* revert useless changes

* fix: grouping messages

* fix: remove nullable on updatedAt

* fix: text overflow

* styling

---------

Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2023-10-31 22:13:34 -05:00
Jason Rasmussen 68f6446718 fix(cli): ignore web socket when unavailable and skip metadata init (#4748) 2023-10-31 22:08:21 -05:00
Jason Rasmussen 197f336b5f fix(web): no preload repair report (#4749) 2023-10-31 20:37:32 +00:00
Daniel Dietzler cd375a976e feat(server): custom library scanning interval (#4390)
* add automatic library scan config options

* add validation

* open api

* use CronJob instead of cron-validator

* fix tests

* catch potential error of the library scan initialization

* better description for input field

* move library scan job initialization to server app service

* fix tests

* add comments to all parameters of cronjob contructor

* make scan a child of a more general library object

* open api

* chore: cleanup

* move cronjob handling to job repoistory

* web: select for common cron expressions

* fix open api

* fix tests

* put scanning settings in nested accordion

* fix system config validation

* refactor, tests

---------

Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
2023-10-31 15:19:12 -05:00
Jason Rasmussen 088d5addf2 refactor(server): user core (#4733) 2023-10-31 11:01:32 -04:00
shenlong 2377df9dae fix(mobile): store exposure time as string (#4589)
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2023-10-31 05:33:45 -05:00
waclaw66 ad5ba82f50 fix(mobile): don't show lens info if it's not available (#4737) 2023-10-31 05:33:08 -05:00
Michael Manganiello b6f18cbe81 fix(server): Correctly set album start and end dates (#4698)
* fix(server): Correctly set album start and end dates

Currently, the query that retrieves album assets uses
`ORDER BY assets.fileCreatedAt DESC`, which makes the existing logic
return the start/end dates reversed (with `startDate` being taken from
the first asset in the array).

Instead of using the index-based approach, this change iterates through
assets to get the min/max `fileCreatedAt`. This will avoid any future
issues, if the query ordering changes, or becomes customizable (e.g. in
case the user prefers to visualize older assets first).

* fix: Maintain constant cost and only swap variables if needed
2023-10-31 05:08:34 -05:00
Mert 87a0ba3db3 feat(ml): export clip models to ONNX and host models on Hugging Face (#4700)
* export clip models

* export to hf

refactored export code

* export mclip, general refactoring

cleanup

* updated conda deps

* do transforms with pillow and numpy, add tokenization config to export, general refactoring

* moved conda dockerfile, re-added poetry

* minor fixes

* updated link

* updated tests

* removed `requirements.txt` from workflow

* fixed mimalloc path

* removed torchvision

* cleaner np typing

* review suggestions

* update default model name

* update test
2023-10-31 05:02:04 -05:00
Jason Rasmussen 3212a47720 refactor(server): user profile picture (#4728) 2023-10-30 19:38:34 -04:00
Jason Rasmussen 431536cdbb refactor(server): user core (#4722) 2023-10-30 17:02:36 -04:00
martin 9a60578088 fix(web): multiple improvements for people page (1) (#4717)
* fix(web): multiple improvements for people page

* feat: better responsive icons
2023-10-30 14:40:28 -05:00
Jason Rasmussen 8dcd159bd6 chore(server): remove user count endpoint (#4724)
* chore: remove unused endpoint

* chore: open api
2023-10-30 19:29:18 +00:00
Skyler Mäntysaari 2f87463170 fix(server): better fix for the OAuth Discovery errors (#4695)
* fix(server/oauth): Handle errors from OAuth Discovery.

* fix(server/oauth): Better fix for OAuth discovery error.

* This doesn't break tests.

* Update server/tsconfig.json

Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>

* Revert back to the mostly original way.

---------

Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
2023-10-30 13:22:30 -04:00
shenlong 9f56bf0ab9 refactor(mobile): app bar (#4687)
* refactor(mobile): add app bar to library and sharing

* mobile: add app bar dialog

* fix(mobile): refetch profile image only when path is changed

* mobile: add server url to dialog

* mobile: move trash to library app bar

* replace discord link with github

* user confirmation before sign out

* edit some styles

---------

Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2023-10-30 12:17:34 -05:00
Jason Rasmussen 603b056512 refactor(server): auth delete device (#4720)
* refactor(server): auth delete device

* fix: person e2e
2023-10-30 11:48:38 -04:00
Fynn Petersen-Frey ce04e9e07a feat(server): hardware video acceleration for Rockchip SOCs via RKMPP (#4645)
* feat(server): hardware video acceleration for Rockchip SOCs via RKMPP

* add tests

* use LD_LIBRARY_PATH for custom ffmpeg

* incorporate review feedback

* code re-use for ffmpeg call

* review feedback
2023-10-30 09:39:37 -05:00
Alex c54a188154 fix(web): sidebar setting not updating when there is a new property added to the data payload (#4708) 2023-10-30 09:17:37 -05:00
Mayuresh Dharwadkar c77ba46d60 docs: fix typos (#4713) 2023-10-30 09:17:10 -05:00
martin cc3149c520 fix(server): do not leak people (#4710) 2023-10-30 03:44:05 -05:00
shenlong 512f672e9e fix(mobile): cache key for assets from dto (#4699)
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2023-10-29 15:28:54 -05:00
shenlong b117985f66 fix(mobile): first char miss in new description (#4697)
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2023-10-29 14:16:25 -05:00
Kalyani Mhala b92a2b2a56 chore: add contribution section to readme (#4690)
* Update README.md

Successfully added contribution section to readme.md file.

* reordering

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2023-10-29 13:58:26 -05:00
Alex a6f39bc74f fix(web): Improve UI/UX for shared link form (#4685)
* chore(web): Improve shared link form

* add verification for password

* improve ux
2023-10-29 13:50:43 -05:00
doggo daad02504f feat(web): added toggle for Sharing button in the sidebar (#4674)
* Added toggle for Sharing button in the sidebar

* fix: format

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2023-10-29 01:42:51 +00:00
jarvis2f 8a6889529c feat(server,web,mobile): Add optional password option for share links. (#4655)
* feat(server,web,mobile): Add optional password option for share links.

Signed-off-by: jarvis2f <137974272+jarvis2f@users.noreply.github.com>

* feat(server,web): Update shared-link.controller and page.svelte for improved cookie handling and metadata updates.

Signed-off-by: jarvis2f <137974272+jarvis2f@users.noreply.github.com>

---------

Signed-off-by: jarvis2f <137974272+jarvis2f@users.noreply.github.com>
2023-10-28 20:35:38 -05:00
Alex b34cbd881a fix(web): scrollbar does not show all years (#4684) 2023-10-29 01:31:33 +00:00
martin f6eaaab725 docs: update milestone page (#4683)
* docs: update milestone page

* docs: add 20k milestone
2023-10-28 20:20:05 -05:00
shenlong 2a2c74e081 fix(mobile): handle shared assets in viewer (#4679)
Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2023-10-28 14:48:30 -05:00
Skyler Mäntysaari c653e0f261 fix(server/oauth): Handle errors from OAuth Discovery. (#4678) 2023-10-28 14:35:09 -05:00
martin f0dd1d715a fix(web): table headers when there's no album (#4673) 2023-10-28 14:34:45 -05:00
811 changed files with 36823 additions and 24831 deletions
+20
View File
@@ -0,0 +1,20 @@
.vscode/
cli/
design/
docker/
docs/
fastlane/
machine-learning/
misc/
mobile/
server/node_modules
server/coverage/
server/.reverse-geocoding-dump/
server/upload/
server/dist/
web/node_modules/
web/coverage/
web/.svelte-kit
web/build/
+1 -1
View File
@@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: ${{ !github.event.pull_request.head.repo.fork }} if: ${{ !github.event.pull_request.head.repo.fork }}
steps: steps:
- uses: actions/github-script@v6 - uses: actions/github-script@v7
with: with:
github-token: ${{ secrets.GH_TOKEN }} github-token: ${{ secrets.GH_TOKEN }}
script: | script: |
+4 -10
View File
@@ -29,16 +29,13 @@ jobs:
include: include:
- primary-name: "immich-server" - primary-name: "immich-server"
- primary-name: "immich-machine-learning" - primary-name: "immich-machine-learning"
- primary-name: "immich-web"
- primary-name: "immich-proxy"
env: env:
# Requires a personal access token with the OAuth scope delete:packages # Requires a personal access token with the OAuth scope delete:packages
TOKEN: ${{ secrets.PACKAGE_DELETE_TOKEN }} TOKEN: ${{ secrets.PACKAGE_DELETE_TOKEN }}
steps: steps:
- - name: Clean temporary images
name: Clean temporary images
if: "${{ env.TOKEN != '' }}" if: "${{ env.TOKEN != '' }}"
uses: stumpylog/image-cleaner-action/ephemeral@v0.3.0 uses: stumpylog/image-cleaner-action/ephemeral@v0.4.0
with: with:
token: "${{ env.TOKEN }}" token: "${{ env.TOKEN }}"
owner: "immich-app" owner: "immich-app"
@@ -60,17 +57,14 @@ jobs:
include: include:
- primary-name: "immich-server" - primary-name: "immich-server"
- primary-name: "immich-machine-learning" - primary-name: "immich-machine-learning"
- primary-name: "immich-web"
- primary-name: "immich-proxy"
- primary-name: "immich-build-cache" - primary-name: "immich-build-cache"
env: env:
# Requires a personal access token with the OAuth scope delete:packages # Requires a personal access token with the OAuth scope delete:packages
TOKEN: ${{ secrets.PACKAGE_DELETE_TOKEN }} TOKEN: ${{ secrets.PACKAGE_DELETE_TOKEN }}
steps: steps:
- - name: Clean untagged images
name: Clean untagged images
if: "${{ env.TOKEN != '' }}" if: "${{ env.TOKEN != '' }}"
uses: stumpylog/image-cleaner-action/untagged@v0.3.0 uses: stumpylog/image-cleaner-action/untagged@v0.4.0
with: with:
token: "${{ env.TOKEN }}" token: "${{ env.TOKEN }}"
owner: "immich-app" owner: "immich-app"
+5 -89
View File
@@ -24,100 +24,15 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
include: include:
- context: "web"
image: "immich-web"
platforms: "linux/amd64,linux/arm64"
- context: "machine-learning" - context: "machine-learning"
file: "machine-learning/Dockerfile"
image: "immich-machine-learning" image: "immich-machine-learning"
platforms: "linux/amd64,linux/arm64" platforms: "linux/amd64,linux/arm64"
- context: "nginx" - context: "."
image: "immich-proxy" file: "server/Dockerfile"
platforms: "linux/amd64,linux/arm64"
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3.0.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3.0.0
# Workaround to fix error:
# failed to push: failed to copy: io: read/write on closed pipe
# See https://github.com/docker/build-push-action/issues/761
with:
driver-opts: |
image=moby/buildkit:v0.10.6
- name: Login to Docker Hub
# Only push to Docker Hub when making a release
if: ${{ github.event_name == 'release' }}
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
# Skip when PR from a fork
if: ${{ !github.event.pull_request.head.repo.fork }}
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Generate docker image tags
id: metadata
uses: docker/metadata-action@v5
with:
flavor: |
# Disable latest tag
latest=false
images: |
name=ghcr.io/${{ github.repository_owner }}/${{matrix.image}}
name=altran1502/${{matrix.image}},enable=${{ github.event_name == 'release' }}
tags: |
# Tag with branch name
type=ref,event=branch
# Tag with pr-number
type=ref,event=pr
# Tag with git tag on release
type=ref,event=tag
type=raw,value=release,enable=${{ github.event_name == 'release' }}
- name: Determine build cache output
id: cache-target
run: |
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
# Essentially just ignore the cache output (PR can't write to registry cache)
echo "cache-to=type=local,dest=/tmp/discard,ignore-error=true" >> $GITHUB_OUTPUT
else
echo "cache-to=type=registry,mode=max,ref=ghcr.io/${{ github.repository_owner }}/immich-build-cache:${{ matrix.image }}" >> $GITHUB_OUTPUT
fi
- name: Build and push image
uses: docker/build-push-action@v5.0.0
with:
context: ${{ matrix.context }}
platforms: ${{ matrix.platforms }}
# Skip pushing when PR from a fork
push: ${{ !github.event.pull_request.head.repo.fork }}
cache-from: type=registry,ref=ghcr.io/${{ github.repository_owner }}/immich-build-cache:${{matrix.image}}
cache-to: ${{ steps.cache-target.outputs.cache-to }}
tags: ${{ steps.metadata.outputs.tags }}
labels: ${{ steps.metadata.outputs.labels }}
build_and_push_server_arm_64:
runs-on: self-hosted
strategy:
# Prevent a failure in one image from stopping the other builds
fail-fast: false
matrix:
include:
- context: "server"
image: "immich-server" image: "immich-server"
platforms: "linux/arm64,linux/amd64" platforms: "linux/arm64,linux/amd64"
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
@@ -184,6 +99,7 @@ jobs:
uses: docker/build-push-action@v5.0.0 uses: docker/build-push-action@v5.0.0
with: with:
context: ${{ matrix.context }} context: ${{ matrix.context }}
file: ${{ matrix.file }}
platforms: ${{ matrix.platforms }} platforms: ${{ matrix.platforms }}
# Skip pushing when PR from a fork # Skip pushing when PR from a fork
push: ${{ !github.event.pull_request.head.repo.fork }} push: ${{ !github.event.pull_request.head.repo.fork }}
+3 -4
View File
@@ -166,16 +166,15 @@ jobs:
- name: Install dependencies - name: Install dependencies
run: | run: |
poetry install --with dev poetry install --with dev
poetry run pip install --no-deps -r requirements.txt
- name: Lint with ruff - name: Lint with ruff
run: | run: |
poetry run ruff check --format=github app poetry run ruff check --format=github app export
- name: Check black formatting - name: Check black formatting
run: | run: |
poetry run black --check app poetry run black --check app export
- name: Run mypy type checking - name: Run mypy type checking
run: | run: |
poetry run mypy --install-types --non-interactive app/ poetry run mypy --install-types --non-interactive --strict app/ export/
- name: Run tests and coverage - name: Run tests and coverage
run: | run: |
poetry run pytest --cov app poetry run pytest --cov app
+6 -12
View File
@@ -1,35 +1,29 @@
dev: dev:
docker-compose -f ./docker/docker-compose.dev.yml up --remove-orphans
dev-new:
docker compose -f ./docker/docker-compose.dev.yml up --remove-orphans || make dev-down docker compose -f ./docker/docker-compose.dev.yml up --remove-orphans || make dev-down
dev-down: dev-down:
docker compose -f ./docker/docker-compose.dev.yml down --remove-orphans docker compose -f ./docker/docker-compose.dev.yml down --remove-orphans
dev-new-update: dev-update:
docker compose -f ./docker/docker-compose.dev.yml up --build -V --remove-orphans docker compose -f ./docker/docker-compose.dev.yml up --build -V --remove-orphans
dev-update:
docker-compose -f ./docker/docker-compose.dev.yml up --build -V --remove-orphans
dev-scale: dev-scale:
docker-compose -f ./docker/docker-compose.dev.yml up --build -V --scale immich-server=3 --remove-orphans docker compose -f ./docker/docker-compose.dev.yml up --build -V --scale immich-server=3 --remove-orphans
stage: stage:
docker-compose -f ./docker/docker-compose.staging.yml up --build -V --remove-orphans docker compose -f ./docker/docker-compose.staging.yml up --build -V --remove-orphans
pull-stage: pull-stage:
docker-compose -f ./docker/docker-compose.staging.yml pull docker compose -f ./docker/docker-compose.staging.yml pull
test-e2e: test-e2e:
docker compose -f ./docker/docker-compose.test.yml up --renew-anon-volumes --abort-on-container-exit --exit-code-from immich-server --remove-orphans --build docker compose -f ./docker/docker-compose.test.yml up --renew-anon-volumes --abort-on-container-exit --exit-code-from immich-server --remove-orphans --build
prod: prod:
docker-compose -f ./docker/docker-compose.prod.yml up --build -V --remove-orphans docker compose -f ./docker/docker-compose.prod.yml up --build -V --remove-orphans
prod-scale: prod-scale:
docker-compose -f ./docker/docker-compose.prod.yml up --build -V --scale immich-server=3 --scale immich-microservices=3 --remove-orphans docker compose -f ./docker/docker-compose.prod.yml up --build -V --scale immich-server=3 --scale immich-microservices=3 --remove-orphans
api: api:
cd ./server && npm run api:generate cd ./server && npm run api:generate
+12 -5
View File
@@ -2,7 +2,7 @@
<br/> <br/>
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-green.svg?color=3F51B5&style=for-the-badge&label=License&logoColor=000000&labelColor=ececec" alt="License: MIT"></a> <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-green.svg?color=3F51B5&style=for-the-badge&label=License&logoColor=000000&labelColor=ececec" alt="License: MIT"></a>
<a href="https://discord.gg/D8JsnBEuKb"> <a href="https://discord.gg/D8JsnBEuKb">
<img src="https://img.shields.io/discord/979116623879368755.svg?label=Discord&logo=Discord&style=for-the-badge&logoColor=000000&labelColor=ececec" atl="Discord"/> <img src="https://img.shields.io/discord/979116623879368755.svg?label=Discord&logo=Discord&style=for-the-badge&logoColor=000000&labelColor=ececec" alt="Discord"/>
</a> </a>
<br/> <br/>
<br/> <br/>
@@ -66,7 +66,7 @@ password: demo
Spec: Free-tier Oracle VM - Amsterdam - 2.4Ghz quad-core ARM64 CPU, 24GB RAM Spec: Free-tier Oracle VM - Amsterdam - 2.4Ghz quad-core ARM64 CPU, 24GB RAM
``` ```
# Features ## Features
| Features | Mobile | Web | | Features | Mobile | Web |
| -------------------------------------------- | ------ | --- | | -------------------------------------------- | ------ | --- |
@@ -85,7 +85,7 @@ Spec: Free-tier Oracle VM - Amsterdam - 2.4Ghz quad-core ARM64 CPU, 24GB RAM
| Virtual scroll | Yes | Yes | | Virtual scroll | Yes | Yes |
| OAuth support | Yes | Yes | | OAuth support | Yes | Yes |
| API Keys | N/A | Yes | | API Keys | N/A | Yes |
| LivePhoto backup and playback | iOS | Yes | | LivePhoto/MotionPhoto backup and playback | Yes | Yes |
| User-defined storage structure | Yes | Yes | | User-defined storage structure | Yes | Yes |
| Public Sharing | No | Yes | | Public Sharing | No | Yes |
| Archive and Favorites | Yes | Yes | | Archive and Favorites | Yes | Yes |
@@ -95,8 +95,9 @@ Spec: Free-tier Oracle VM - Amsterdam - 2.4Ghz quad-core ARM64 CPU, 24GB RAM
| Memories (x years ago) | Yes | Yes | | Memories (x years ago) | Yes | Yes |
| Offline support | Yes | No | | Offline support | Yes | No |
| Read-only gallery | Yes | Yes | | Read-only gallery | Yes | Yes |
| Stacked Photos | Yes | Yes |
# Support the project ## Support the project
I've committed to this project, and I will not stop. I will keep updating the docs, adding new features, and fixing bugs. But I can't do it alone. So I need your help to give me additional motivation to keep going. I've committed to this project, and I will not stop. I will keep updating the docs, adding new features, and fixing bugs. But I can't do it alone. So I need your help to give me additional motivation to keep going.
@@ -104,10 +105,16 @@ As our hosts in the [selfhosted.show - In the episode 'The-organization-must-not
If you feel like this is the right cause and the app is something you are seeing yourself using for a long time, please consider supporting the project with the option below. If you feel like this is the right cause and the app is something you are seeing yourself using for a long time, please consider supporting the project with the option below.
## Donation ### Donation
- [Monthly donation](https://github.com/sponsors/alextran1502) via GitHub Sponsors - [Monthly donation](https://github.com/sponsors/alextran1502) via GitHub Sponsors
- [One-time donation](https://github.com/sponsors/alextran1502?frequency=one-time&sponsor=alextran1502) via GitHub Sponsors - [One-time donation](https://github.com/sponsors/alextran1502?frequency=one-time&sponsor=alextran1502) via GitHub Sponsors
- [Librepay](https://liberapay.com/alex.tran1502/) - [Librepay](https://liberapay.com/alex.tran1502/)
- [buymeacoffee](https://www.buymeacoffee.com/altran1502) - [buymeacoffee](https://www.buymeacoffee.com/altran1502)
- Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX - Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX
- ZCash: u1smm4wvqegcp46zss2jf5xptchgeczp4rx7a0wu3mermf2wxahm26yyz5w9mw3f2p4emwlljxjumg774kgs8rntt9yags0whnzane4n67z4c7gppq4yyvcj404ne3r769prwzd9j8ntvqp44fa6d67sf7rmcfjmds3gmeceff4u8e92rh38nd30cr96xw6vfhk6scu4ws90ldzupr3sz
## Contributors
<a href="https://github.com/alextran1502/immich/graphs/contributors">
<img src="https://contrib.rocks/image?repo=immich-app/immich" width="100%"/>
</a>
+1 -1
View File
@@ -109,4 +109,4 @@ Si creieu que aquesta és una causa justa i l'aplicació és alguna cosa que us
- [Librepay](https://liberapay.com/alex.tran1502/) - [Librepay](https://liberapay.com/alex.tran1502/)
- [buymeacoffee](https://www.buymeacoffee.com/altran1502) - [buymeacoffee](https://www.buymeacoffee.com/altran1502)
- Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX - Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX
- ZCash: u1smm4wvqegcp46zss2jf5xptchgeczp4rx7a0wu3mermf2wxahm26yyz5w9mw3f2p4emwlljxjumg774kgs8rntt9yags0whnzane4n67z4c7gppq4yyvcj404ne3r769prwzd9j8ntvqp44fa6d67sf7rmcfjmds3gmeceff4u8e92rh38nd30cr96xw6vfhk6scu4ws90ldzupr3sz
+1
View File
@@ -109,3 +109,4 @@ Si consideras que esta es una causa justa y la aplicación es algo que te gustar
- [Librepay](https://liberapay.com/alex.tran1502/) - [Librepay](https://liberapay.com/alex.tran1502/)
- [buymeacoffee](https://www.buymeacoffee.com/altran1502) - [buymeacoffee](https://www.buymeacoffee.com/altran1502)
- Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX - Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX
- ZCash: u1smm4wvqegcp46zss2jf5xptchgeczp4rx7a0wu3mermf2wxahm26yyz5w9mw3f2p4emwlljxjumg774kgs8rntt9yags0whnzane4n67z4c7gppq4yyvcj404ne3r769prwzd9j8ntvqp44fa6d67sf7rmcfjmds3gmeceff4u8e92rh38nd30cr96xw6vfhk6scu4ws90ldzupr3sz
+1
View File
@@ -111,3 +111,4 @@ Si vous estimez que c'est pour la bonne cause et que vous prévoyez d'utiliser l
- [Librepay](https://liberapay.com/alex.tran1502/) - [Librepay](https://liberapay.com/alex.tran1502/)
- [buymeacoffee](https://www.buymeacoffee.com/altran1502) - [buymeacoffee](https://www.buymeacoffee.com/altran1502)
- Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX - Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX
- ZCash: u1smm4wvqegcp46zss2jf5xptchgeczp4rx7a0wu3mermf2wxahm26yyz5w9mw3f2p4emwlljxjumg774kgs8rntt9yags0whnzane4n67z4c7gppq4yyvcj404ne3r769prwzd9j8ntvqp44fa6d67sf7rmcfjmds3gmeceff4u8e92rh38nd30cr96xw6vfhk6scu4ws90ldzupr3sz
+1
View File
@@ -111,3 +111,4 @@ Se pensi che Immich sia una buona causa e che l'app sia qualcosa che useresti ne
- [Librepay](https://liberapay.com/alex.tran1502/) - [Librepay](https://liberapay.com/alex.tran1502/)
- [buymeacoffee](https://www.buymeacoffee.com/altran1502) - [buymeacoffee](https://www.buymeacoffee.com/altran1502)
- Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX - Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX
- ZCash: u1smm4wvqegcp46zss2jf5xptchgeczp4rx7a0wu3mermf2wxahm26yyz5w9mw3f2p4emwlljxjumg774kgs8rntt9yags0whnzane4n67z4c7gppq4yyvcj404ne3r769prwzd9j8ntvqp44fa6d67sf7rmcfjmds3gmeceff4u8e92rh38nd30cr96xw6vfhk6scu4ws90ldzupr3sz
+1
View File
@@ -111,3 +111,4 @@ Als je denkt dat dit het juiste doel is en de app iets is dat je jezelf al heel
- [Librepay](https://liberapay.com/alex.tran1502/) - [Librepay](https://liberapay.com/alex.tran1502/)
- [buymeacoffee](https://www.buymeacoffee.com/altran1502) - [buymeacoffee](https://www.buymeacoffee.com/altran1502)
- Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX - Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX
- ZCash: u1smm4wvqegcp46zss2jf5xptchgeczp4rx7a0wu3mermf2wxahm26yyz5w9mw3f2p4emwlljxjumg774kgs8rntt9yags0whnzane4n67z4c7gppq4yyvcj404ne3r769prwzd9j8ntvqp44fa6d67sf7rmcfjmds3gmeceff4u8e92rh38nd30cr96xw6vfhk6scu4ws90ldzupr3sz
+1
View File
@@ -108,3 +108,4 @@ Eğer bu size doğru bir amaç gibi geliyorsa ve uygulamanın uzun bir süre boy
- [Librepay](https://liberapay.com/alex.tran1502/) - [Librepay](https://liberapay.com/alex.tran1502/)
- [buymeacoffee](https://www.buymeacoffee.com/altran1502) - [buymeacoffee](https://www.buymeacoffee.com/altran1502)
- Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX - Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX
- ZCash: u1smm4wvqegcp46zss2jf5xptchgeczp4rx7a0wu3mermf2wxahm26yyz5w9mw3f2p4emwlljxjumg774kgs8rntt9yags0whnzane4n67z4c7gppq4yyvcj404ne3r769prwzd9j8ntvqp44fa6d67sf7rmcfjmds3gmeceff4u8e92rh38nd30cr96xw6vfhk6scu4ws90ldzupr3sz
+150 -118
View File
@@ -775,9 +775,9 @@
} }
}, },
"node_modules/@eslint/eslintrc": { "node_modules/@eslint/eslintrc": {
"version": "2.1.2", "version": "2.1.3",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
"integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"ajv": "^6.12.4", "ajv": "^6.12.4",
@@ -798,21 +798,21 @@
} }
}, },
"node_modules/@eslint/js": { "node_modules/@eslint/js": {
"version": "8.50.0", "version": "8.53.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz",
"integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0" "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
} }
}, },
"node_modules/@humanwhocodes/config-array": { "node_modules/@humanwhocodes/config-array": {
"version": "0.11.11", "version": "0.11.13",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
"integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@humanwhocodes/object-schema": "^1.2.1", "@humanwhocodes/object-schema": "^2.0.1",
"debug": "^4.1.1", "debug": "^4.1.1",
"minimatch": "^3.0.5" "minimatch": "^3.0.5"
}, },
@@ -834,9 +834,9 @@
} }
}, },
"node_modules/@humanwhocodes/object-schema": { "node_modules/@humanwhocodes/object-schema": {
"version": "1.2.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
"dev": true "dev": true
}, },
"node_modules/@isaacs/cliui": { "node_modules/@isaacs/cliui": {
@@ -1489,21 +1489,21 @@
} }
}, },
"node_modules/@types/byte-size": { "node_modules/@types/byte-size": {
"version": "8.1.0", "version": "8.1.2",
"resolved": "https://registry.npmjs.org/@types/byte-size/-/byte-size-8.1.0.tgz", "resolved": "https://registry.npmjs.org/@types/byte-size/-/byte-size-8.1.2.tgz",
"integrity": "sha512-LCIlZh8vyx+I2fgRycE1D34c33QDppYY6quBYYoaOpQ1nGhJ/avSP2VlrAefVotjJxgSk6WkKo0rTcCJwGG7vA==", "integrity": "sha512-jGyVzYu6avI8yuqQCNTZd65tzI8HZrLjKX9sdMqZrGWVlNChu0rf6p368oVEDCYJe5BMx2Ov04tD1wqtgTwGSA==",
"dev": true "dev": true
}, },
"node_modules/@types/chai": { "node_modules/@types/chai": {
"version": "4.3.6", "version": "4.3.10",
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.10.tgz",
"integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==", "integrity": "sha512-of+ICnbqjmFCiixUnqRulbylyXQrPqIGf/B3Jax1wIF3DvSheysQxAWvqHhZiW3IQrycvokcLcFQlveGp+vyNg==",
"dev": true "dev": true
}, },
"node_modules/@types/cli-progress": { "node_modules/@types/cli-progress": {
"version": "3.11.3", "version": "3.11.5",
"resolved": "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.3.tgz", "resolved": "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.5.tgz",
"integrity": "sha512-/+C9xAdVtc+g5yHHkGBThgAA8rYpi5B+2ve3wLtybYj0JHEBs57ivR4x/zGfSsplRnV+psE91Nfin1soNKqz5Q==", "integrity": "sha512-D4PbNRbviKyppS5ivBGyFO29POlySLmA2HyUFE4p5QGazAMM3CwkKWcvTl8gvElSuxRh6FPKL8XmidX873ou4g==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/node": "*" "@types/node": "*"
@@ -1543,9 +1543,9 @@
} }
}, },
"node_modules/@types/jest": { "node_modules/@types/jest": {
"version": "29.5.5", "version": "29.5.8",
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.5.tgz", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.8.tgz",
"integrity": "sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg==", "integrity": "sha512-fXEFTxMV2Co8ZF5aYFJv+YeA08RTYJfhtN5c9JSv/mFEMe+xxjufCb+PHL+bJcMs/ebPUsBu+UNTEz+ydXrR6g==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"expect": "^29.0.0", "expect": "^29.0.0",
@@ -1553,9 +1553,9 @@
} }
}, },
"node_modules/@types/js-yaml": { "node_modules/@types/js-yaml": {
"version": "4.0.6", "version": "4.0.9",
"resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.6.tgz", "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz",
"integrity": "sha512-ACTuifTSIIbyksx2HTon3aFtCKWcID7/h3XEmRpDYdMCXxPbl+m9GteOJeaAkiAta/NJaSFuA7ahZ0NkwajDSw==", "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==",
"dev": true "dev": true
}, },
"node_modules/@types/json-schema": { "node_modules/@types/json-schema": {
@@ -1565,25 +1565,28 @@
"dev": true "dev": true
}, },
"node_modules/@types/mime-types": { "node_modules/@types/mime-types": {
"version": "2.1.2", "version": "2.1.4",
"resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.2.tgz", "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.4.tgz",
"integrity": "sha512-q9QGHMGCiBJCHEvd4ZLdasdqXv570agPsUW0CeIm/B8DzhxsYMerD0l3IlI+EQ1A2RWHY2mmM9x1YIuuWxisCg==", "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==",
"dev": true "dev": true
}, },
"node_modules/@types/mock-fs": { "node_modules/@types/mock-fs": {
"version": "4.13.2", "version": "4.13.4",
"resolved": "https://registry.npmjs.org/@types/mock-fs/-/mock-fs-4.13.2.tgz", "resolved": "https://registry.npmjs.org/@types/mock-fs/-/mock-fs-4.13.4.tgz",
"integrity": "sha512-mSIMAOjrNTVUFmZgJEigSIm+GlS4hbrk8U5+M8EB45uMrykKdN9TidjjSaOY1yFph2+TD7bsIfB4r+IrMYVyPQ==", "integrity": "sha512-mXmM0o6lULPI8z3XNnQCpL0BGxPwx1Ul1wXYEPBGl4efShyxW2Rln0JOPEWGyZaYZMM6OVXM/15zUuFMY52ljg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/node": "*" "@types/node": "*"
} }
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "20.8.2", "version": "20.9.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.2.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz",
"integrity": "sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==", "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==",
"dev": true "dev": true,
"dependencies": {
"undici-types": "~5.26.4"
}
}, },
"node_modules/@types/normalize-package-data": { "node_modules/@types/normalize-package-data": {
"version": "2.4.2", "version": "2.4.2",
@@ -1806,6 +1809,12 @@
"url": "https://opencollective.com/typescript-eslint" "url": "https://opencollective.com/typescript-eslint"
} }
}, },
"node_modules/@ungap/structured-clone": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
"dev": true
},
"node_modules/acorn": { "node_modules/acorn": {
"version": "8.10.0", "version": "8.10.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
@@ -2402,9 +2411,9 @@
} }
}, },
"node_modules/commander": { "node_modules/commander": {
"version": "11.0.0", "version": "11.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
"integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
"engines": { "engines": {
"node": ">=16" "node": ">=16"
} }
@@ -2637,18 +2646,19 @@
} }
}, },
"node_modules/eslint": { "node_modules/eslint": {
"version": "8.50.0", "version": "8.53.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz",
"integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1", "@eslint-community/regexpp": "^4.6.1",
"@eslint/eslintrc": "^2.1.2", "@eslint/eslintrc": "^2.1.3",
"@eslint/js": "8.50.0", "@eslint/js": "8.53.0",
"@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/config-array": "^0.11.13",
"@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8", "@nodelib/fs.walk": "^1.2.8",
"@ungap/structured-clone": "^1.2.0",
"ajv": "^6.12.4", "ajv": "^6.12.4",
"chalk": "^4.0.0", "chalk": "^4.0.0",
"cross-spawn": "^7.0.2", "cross-spawn": "^7.0.2",
@@ -2703,9 +2713,9 @@
} }
}, },
"node_modules/eslint-plugin-jest": { "node_modules/eslint-plugin-jest": {
"version": "27.4.2", "version": "27.6.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.4.2.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.0.tgz",
"integrity": "sha512-3Nfvv3wbq2+PZlRTf2oaAWXWwbdBejFRBR2O8tAO67o+P8zno+QGbcDYaAXODlreXVg+9gvWhKKmG2rgfb8GEg==", "integrity": "sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@typescript-eslint/utils": "^5.10.0" "@typescript-eslint/utils": "^5.10.0"
@@ -3867,9 +3877,9 @@
} }
}, },
"node_modules/jest-extended": { "node_modules/jest-extended": {
"version": "4.0.1", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/jest-extended/-/jest-extended-4.0.1.tgz", "resolved": "https://registry.npmjs.org/jest-extended/-/jest-extended-4.0.2.tgz",
"integrity": "sha512-KM6dwuBUAgy6QONuR19CGubZB9Hkjqvl/d5Yc/FXsdB8+gsGxB2VQ+NEdOrr95J4GMPeLnDoPOKyi6+mKCCnZQ==", "integrity": "sha512-FH7aaPgtGYHc9mRjriS0ZEHYM5/W69tLrFTIdzm+yJgeoCmmrSB/luSfMSqWP9O29QWHPEmJ4qmU6EwsZideog==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"jest-diff": "^29.0.0", "jest-diff": "^29.0.0",
@@ -5612,9 +5622,9 @@
"dev": true "dev": true
}, },
"node_modules/systeminformation": { "node_modules/systeminformation": {
"version": "5.21.9", "version": "5.21.17",
"resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.21.9.tgz", "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.21.17.tgz",
"integrity": "sha512-7pI4mu9P/2MGDV0T49B52E7IULBGj+kRVk6JSYUj5qfAk7N7C7aNX15fXziqrbgZntc6/jjYzWeb/x41jhg/eA==", "integrity": "sha512-JZYRCbIjk3WuBV59A9/rTla2rROX+aAJ9uo2Z1dI+bjieORcukClN8rlM1zE9NYKpULSbaGc+KKct/870lO0DA==",
"os": [ "os": [
"darwin", "darwin",
"linux", "linux",
@@ -5862,6 +5872,12 @@
"node": ">=4.2.0" "node": ">=4.2.0"
} }
}, },
"node_modules/undici-types": {
"version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
"dev": true
},
"node_modules/update-browserslist-db": { "node_modules/update-browserslist-db": {
"version": "1.0.13", "version": "1.0.13",
"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.0.13.tgz",
@@ -6091,9 +6107,9 @@
"dev": true "dev": true
}, },
"node_modules/yaml": { "node_modules/yaml": {
"version": "2.3.2", "version": "2.3.4",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
"integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==",
"engines": { "engines": {
"node": ">= 14" "node": ">= 14"
} }
@@ -6702,9 +6718,9 @@
"dev": true "dev": true
}, },
"@eslint/eslintrc": { "@eslint/eslintrc": {
"version": "2.1.2", "version": "2.1.3",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
"integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
"dev": true, "dev": true,
"requires": { "requires": {
"ajv": "^6.12.4", "ajv": "^6.12.4",
@@ -6719,18 +6735,18 @@
} }
}, },
"@eslint/js": { "@eslint/js": {
"version": "8.50.0", "version": "8.53.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz",
"integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==",
"dev": true "dev": true
}, },
"@humanwhocodes/config-array": { "@humanwhocodes/config-array": {
"version": "0.11.11", "version": "0.11.13",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
"integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@humanwhocodes/object-schema": "^1.2.1", "@humanwhocodes/object-schema": "^2.0.1",
"debug": "^4.1.1", "debug": "^4.1.1",
"minimatch": "^3.0.5" "minimatch": "^3.0.5"
} }
@@ -6742,9 +6758,9 @@
"dev": true "dev": true
}, },
"@humanwhocodes/object-schema": { "@humanwhocodes/object-schema": {
"version": "1.2.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
"dev": true "dev": true
}, },
"@isaacs/cliui": { "@isaacs/cliui": {
@@ -7270,21 +7286,21 @@
} }
}, },
"@types/byte-size": { "@types/byte-size": {
"version": "8.1.0", "version": "8.1.2",
"resolved": "https://registry.npmjs.org/@types/byte-size/-/byte-size-8.1.0.tgz", "resolved": "https://registry.npmjs.org/@types/byte-size/-/byte-size-8.1.2.tgz",
"integrity": "sha512-LCIlZh8vyx+I2fgRycE1D34c33QDppYY6quBYYoaOpQ1nGhJ/avSP2VlrAefVotjJxgSk6WkKo0rTcCJwGG7vA==", "integrity": "sha512-jGyVzYu6avI8yuqQCNTZd65tzI8HZrLjKX9sdMqZrGWVlNChu0rf6p368oVEDCYJe5BMx2Ov04tD1wqtgTwGSA==",
"dev": true "dev": true
}, },
"@types/chai": { "@types/chai": {
"version": "4.3.6", "version": "4.3.10",
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.10.tgz",
"integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==", "integrity": "sha512-of+ICnbqjmFCiixUnqRulbylyXQrPqIGf/B3Jax1wIF3DvSheysQxAWvqHhZiW3IQrycvokcLcFQlveGp+vyNg==",
"dev": true "dev": true
}, },
"@types/cli-progress": { "@types/cli-progress": {
"version": "3.11.3", "version": "3.11.5",
"resolved": "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.3.tgz", "resolved": "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.5.tgz",
"integrity": "sha512-/+C9xAdVtc+g5yHHkGBThgAA8rYpi5B+2ve3wLtybYj0JHEBs57ivR4x/zGfSsplRnV+psE91Nfin1soNKqz5Q==", "integrity": "sha512-D4PbNRbviKyppS5ivBGyFO29POlySLmA2HyUFE4p5QGazAMM3CwkKWcvTl8gvElSuxRh6FPKL8XmidX873ou4g==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/node": "*" "@types/node": "*"
@@ -7324,9 +7340,9 @@
} }
}, },
"@types/jest": { "@types/jest": {
"version": "29.5.5", "version": "29.5.8",
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.5.tgz", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.8.tgz",
"integrity": "sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg==", "integrity": "sha512-fXEFTxMV2Co8ZF5aYFJv+YeA08RTYJfhtN5c9JSv/mFEMe+xxjufCb+PHL+bJcMs/ebPUsBu+UNTEz+ydXrR6g==",
"dev": true, "dev": true,
"requires": { "requires": {
"expect": "^29.0.0", "expect": "^29.0.0",
@@ -7334,9 +7350,9 @@
} }
}, },
"@types/js-yaml": { "@types/js-yaml": {
"version": "4.0.6", "version": "4.0.9",
"resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.6.tgz", "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz",
"integrity": "sha512-ACTuifTSIIbyksx2HTon3aFtCKWcID7/h3XEmRpDYdMCXxPbl+m9GteOJeaAkiAta/NJaSFuA7ahZ0NkwajDSw==", "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==",
"dev": true "dev": true
}, },
"@types/json-schema": { "@types/json-schema": {
@@ -7346,25 +7362,28 @@
"dev": true "dev": true
}, },
"@types/mime-types": { "@types/mime-types": {
"version": "2.1.2", "version": "2.1.4",
"resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.2.tgz", "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.4.tgz",
"integrity": "sha512-q9QGHMGCiBJCHEvd4ZLdasdqXv570agPsUW0CeIm/B8DzhxsYMerD0l3IlI+EQ1A2RWHY2mmM9x1YIuuWxisCg==", "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==",
"dev": true "dev": true
}, },
"@types/mock-fs": { "@types/mock-fs": {
"version": "4.13.2", "version": "4.13.4",
"resolved": "https://registry.npmjs.org/@types/mock-fs/-/mock-fs-4.13.2.tgz", "resolved": "https://registry.npmjs.org/@types/mock-fs/-/mock-fs-4.13.4.tgz",
"integrity": "sha512-mSIMAOjrNTVUFmZgJEigSIm+GlS4hbrk8U5+M8EB45uMrykKdN9TidjjSaOY1yFph2+TD7bsIfB4r+IrMYVyPQ==", "integrity": "sha512-mXmM0o6lULPI8z3XNnQCpL0BGxPwx1Ul1wXYEPBGl4efShyxW2Rln0JOPEWGyZaYZMM6OVXM/15zUuFMY52ljg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/node": "*" "@types/node": "*"
} }
}, },
"@types/node": { "@types/node": {
"version": "20.8.2", "version": "20.9.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.2.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz",
"integrity": "sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==", "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==",
"dev": true "dev": true,
"requires": {
"undici-types": "~5.26.4"
}
}, },
"@types/normalize-package-data": { "@types/normalize-package-data": {
"version": "2.4.2", "version": "2.4.2",
@@ -7498,6 +7517,12 @@
"eslint-visitor-keys": "^3.3.0" "eslint-visitor-keys": "^3.3.0"
} }
}, },
"@ungap/structured-clone": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
"dev": true
},
"acorn": { "acorn": {
"version": "8.10.0", "version": "8.10.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
@@ -7923,9 +7948,9 @@
} }
}, },
"commander": { "commander": {
"version": "11.0.0", "version": "11.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
"integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==" "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="
}, },
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
@@ -8092,18 +8117,19 @@
"dev": true "dev": true
}, },
"eslint": { "eslint": {
"version": "8.50.0", "version": "8.53.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz",
"integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==",
"dev": true, "dev": true,
"requires": { "requires": {
"@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1", "@eslint-community/regexpp": "^4.6.1",
"@eslint/eslintrc": "^2.1.2", "@eslint/eslintrc": "^2.1.3",
"@eslint/js": "8.50.0", "@eslint/js": "8.53.0",
"@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/config-array": "^0.11.13",
"@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8", "@nodelib/fs.walk": "^1.2.8",
"@ungap/structured-clone": "^1.2.0",
"ajv": "^6.12.4", "ajv": "^6.12.4",
"chalk": "^4.0.0", "chalk": "^4.0.0",
"cross-spawn": "^7.0.2", "cross-spawn": "^7.0.2",
@@ -8162,9 +8188,9 @@
"requires": {} "requires": {}
}, },
"eslint-plugin-jest": { "eslint-plugin-jest": {
"version": "27.4.2", "version": "27.6.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.4.2.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.0.tgz",
"integrity": "sha512-3Nfvv3wbq2+PZlRTf2oaAWXWwbdBejFRBR2O8tAO67o+P8zno+QGbcDYaAXODlreXVg+9gvWhKKmG2rgfb8GEg==", "integrity": "sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==",
"dev": true, "dev": true,
"requires": { "requires": {
"@typescript-eslint/utils": "^5.10.0" "@typescript-eslint/utils": "^5.10.0"
@@ -8969,9 +8995,9 @@
} }
}, },
"jest-extended": { "jest-extended": {
"version": "4.0.1", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/jest-extended/-/jest-extended-4.0.1.tgz", "resolved": "https://registry.npmjs.org/jest-extended/-/jest-extended-4.0.2.tgz",
"integrity": "sha512-KM6dwuBUAgy6QONuR19CGubZB9Hkjqvl/d5Yc/FXsdB8+gsGxB2VQ+NEdOrr95J4GMPeLnDoPOKyi6+mKCCnZQ==", "integrity": "sha512-FH7aaPgtGYHc9mRjriS0ZEHYM5/W69tLrFTIdzm+yJgeoCmmrSB/luSfMSqWP9O29QWHPEmJ4qmU6EwsZideog==",
"dev": true, "dev": true,
"requires": { "requires": {
"jest-diff": "^29.0.0", "jest-diff": "^29.0.0",
@@ -10274,9 +10300,9 @@
"dev": true "dev": true
}, },
"systeminformation": { "systeminformation": {
"version": "5.21.9", "version": "5.21.17",
"resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.21.9.tgz", "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.21.17.tgz",
"integrity": "sha512-7pI4mu9P/2MGDV0T49B52E7IULBGj+kRVk6JSYUj5qfAk7N7C7aNX15fXziqrbgZntc6/jjYzWeb/x41jhg/eA==" "integrity": "sha512-JZYRCbIjk3WuBV59A9/rTla2rROX+aAJ9uo2Z1dI+bjieORcukClN8rlM1zE9NYKpULSbaGc+KKct/870lO0DA=="
}, },
"test-exclude": { "test-exclude": {
"version": "6.0.0", "version": "6.0.0",
@@ -10419,6 +10445,12 @@
"integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
"dev": true "dev": true
}, },
"undici-types": {
"version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
"dev": true
},
"update-browserslist-db": { "update-browserslist-db": {
"version": "1.0.13", "version": "1.0.13",
"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.0.13.tgz",
@@ -10582,9 +10614,9 @@
"dev": true "dev": true
}, },
"yaml": { "yaml": {
"version": "2.3.2", "version": "2.3.4",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
"integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==" "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA=="
}, },
"yargs": { "yargs": {
"version": "17.7.2", "version": "17.7.2",
+2388 -1027
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -4,7 +4,7 @@
* Immich * Immich
* Immich API * Immich API
* *
* The version of the OpenAPI document: 1.83.0 * The version of the OpenAPI document: 1.87.0
* *
* *
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+1 -1
View File
@@ -4,7 +4,7 @@
* Immich * Immich
* Immich API * Immich API
* *
* The version of the OpenAPI document: 1.83.0 * The version of the OpenAPI document: 1.87.0
* *
* *
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+1 -1
View File
@@ -4,7 +4,7 @@
* Immich * Immich
* Immich API * Immich API
* *
* The version of the OpenAPI document: 1.83.0 * The version of the OpenAPI document: 1.87.0
* *
* *
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+1 -1
View File
@@ -4,7 +4,7 @@
* Immich * Immich
* Immich API * Immich API
* *
* The version of the OpenAPI document: 1.83.0 * The version of the OpenAPI document: 1.87.0
* *
* *
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+5
View File
@@ -0,0 +1,5 @@
> [!CAUTION]
> Make sure to use the docker-compose.yml of the current release:
> https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
>
> The compose file on main may not be compatible with the latest release.
+32 -62
View File
@@ -1,30 +1,39 @@
# See:
# - https://immich.app/docs/developer/setup
# - https://immich.app/docs/developer/troubleshooting
version: "3.8" version: "3.8"
name: immich-dev
x-server-build: &server-common
image: immich-server-dev:latest
build:
context: ../
dockerfile: server/Dockerfile
target: dev
volumes:
- ../server:/usr/src/app
- ${UPLOAD_LOCATION}/photos:/usr/src/app/upload
- /usr/src/app/node_modules
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
environment:
- NODE_ENV=development
ulimits:
nofile:
soft: 1048576
hard: 1048576
services: services:
immich-server: immich-server:
container_name: immich_server container_name: immich_server
image: immich-server-dev:latest
build:
context: ../server
dockerfile: Dockerfile
target: builder
command: npm run start:debug immich command: npm run start:debug immich
volumes: <<: *server-common
- ../server:/usr/src/app
- ${UPLOAD_LOCATION}/photos:/usr/src/app/upload
- /usr/src/app/node_modules
- /etc/localtime:/etc/localtime:ro
ports: ports:
- 3001:3001 - 3001:3001
- 9230:9230 - 9230:9230
env_file:
- .env
environment:
- NODE_ENV=development
ulimits:
nofile:
soft: 1048576
hard: 1048576
depends_on: depends_on:
- redis - redis
- database - database
@@ -32,30 +41,13 @@ services:
immich-microservices: immich-microservices:
container_name: immich_microservices container_name: immich_microservices
image: immich-microservices:latest command: npm run start:debug microservices
<<: *server-common
# extends: # extends:
# file: hwaccel.yml # file: hwaccel.yml
# service: hwaccel # service: hwaccel
build:
context: ../server
dockerfile: Dockerfile
target: builder
command: npm run start:debug microservices
volumes:
- ../server:/usr/src/app
- ${UPLOAD_LOCATION}/photos:/usr/src/app/upload
- /usr/src/app/node_modules
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
ports: ports:
- 9231:9230 - 9231:9230
environment:
- NODE_ENV=development
ulimits:
nofile:
soft: 1048576
hard: 1048576
depends_on: depends_on:
- database - database
- immich-server - immich-server
@@ -67,16 +59,11 @@ services:
build: build:
context: ../web context: ../web
dockerfile: Dockerfile dockerfile: Dockerfile
target: dev
command: npm run dev --host command: npm run dev --host
env_file: env_file:
- .env - .env
environment:
# Rename these values for svelte public interface
- PUBLIC_IMMICH_SERVER_URL=${IMMICH_SERVER_URL}
- PUBLIC_IMMICH_API_URL_EXTERNAL=${IMMICH_API_URL_EXTERNAL}
ports: ports:
- 3000:3000 - 2283:3000
- 24678:24678 - 24678:24678
volumes: volumes:
- ../web:/usr/src/app - ../web:/usr/src/app
@@ -121,11 +108,11 @@ services:
redis: redis:
container_name: immich_redis container_name: immich_redis
image: redis:6.2-alpine@sha256:70a7a5b641117670beae0d80658430853896b5ef269ccf00d1827427e3263fa3 image: redis:6.2-alpine@sha256:3995fe6ea6a619313e31046bd3c8643f9e70f8f2b294ff82659d409b47d06abb
database: database:
container_name: immich_postgres container_name: immich_postgres
image: postgres:14-alpine@sha256:28407a9961e76f2d285dc6991e8e48893503cc3836a4755bbc2d40bcc272a441 image: postgres:14-alpine@sha256:50d9be76e9a90da4c781554955e0ffc79d9d5c4226838e64b36aacc97cbc35ad
env_file: env_file:
- .env - .env
environment: environment:
@@ -137,22 +124,5 @@ services:
ports: ports:
- 5432:5432 - 5432:5432
immich-proxy:
container_name: immich_proxy
image: immich-proxy-dev:latest
environment:
# Make sure these values get passed through from the env file
- IMMICH_SERVER_URL
- IMMICH_WEB_URL
build:
context: ../nginx
dockerfile: Dockerfile
ports:
- 2283:8080
depends_on:
- immich-server
- immich-web
restart: unless-stopped
volumes: volumes:
model-cache: model-cache:
+35 -68
View File
@@ -1,23 +1,44 @@
version: "3.8" version: "3.8"
name: immich-prod
x-server-build: &server-common
image: immich-server:latest
build:
context: ../
dockerfile: server/Dockerfile
volumes:
- ${UPLOAD_LOCATION}/photos:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
restart: always
services: services:
immich-server: immich-server:
container_name: immich_server container_name: immich_server
image: immich-server:latest command: [ "./start-server.sh" ]
build: <<: *server-common
context: ../server ports:
dockerfile: Dockerfile - 2283:3001
command: ["./start-server.sh"]
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
depends_on: depends_on:
- redis - redis
- database - database
- typesense - typesense
immich-microservices:
container_name: immich_microservices
command: [ "./start-microservices.sh" ]
<<: *server-common
# extends:
# file: hwaccel.yml
# service: hwaccel
depends_on:
- redis
- database
- typesense
- immich-server
immich-machine-learning: immich-machine-learning:
container_name: immich_machine_learning container_name: immich_machine_learning
image: immich-machine-learning:latest image: immich-machine-learning:latest
@@ -25,45 +46,11 @@ services:
context: ../machine-learning context: ../machine-learning
dockerfile: Dockerfile dockerfile: Dockerfile
volumes: volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- model-cache:/cache - model-cache:/cache
env_file: env_file:
- .env - .env
restart: always restart: always
immich-microservices:
container_name: immich_microservices
image: immich-microservices:latest
# extends:
# file: hwaccel.yml
# service: hwaccel
build:
context: ../server
dockerfile: Dockerfile
command: ["./start-microservices.sh"]
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
depends_on:
- database
- immich-server
- typesense
restart: always
immich-web:
container_name: immich_web
image: immich-web:latest
build:
context: ../web
dockerfile: Dockerfile
env_file:
- .env
restart: always
depends_on:
- immich-server
typesense: typesense:
container_name: immich_typesense container_name: immich_typesense
image: typesense/typesense:0.24.1@sha256:9bcff2b829f12074426ca044b56160ca9d777a0c488303469143dd9f8259d4dd image: typesense/typesense:0.24.1@sha256:9bcff2b829f12074426ca044b56160ca9d777a0c488303469143dd9f8259d4dd
@@ -73,17 +60,17 @@ services:
# remove this to get debug messages # remove this to get debug messages
- GLOG_minloglevel=1 - GLOG_minloglevel=1
volumes: volumes:
- tsdata:/data - ${UPLOAD_LOCATION}/typesense:/data
restart: always restart: always
redis: redis:
container_name: immich_redis container_name: immich_redis
image: redis:6.2-alpine@sha256:70a7a5b641117670beae0d80658430853896b5ef269ccf00d1827427e3263fa3 image: redis:6.2-alpine@sha256:3995fe6ea6a619313e31046bd3c8643f9e70f8f2b294ff82659d409b47d06abb
restart: always restart: always
database: database:
container_name: immich_postgres container_name: immich_postgres
image: postgres:14-alpine@sha256:28407a9961e76f2d285dc6991e8e48893503cc3836a4755bbc2d40bcc272a441 image: postgres:14-alpine@sha256:50d9be76e9a90da4c781554955e0ffc79d9d5c4226838e64b36aacc97cbc35ad
env_file: env_file:
- .env - .env
environment: environment:
@@ -91,28 +78,8 @@ services:
POSTGRES_USER: ${DB_USERNAME} POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME} POSTGRES_DB: ${DB_DATABASE_NAME}
volumes: volumes:
- pgdata:/var/lib/postgresql/data - ${UPLOAD_LOCATION}/postgres:/var/lib/postgresql/data
restart: always
immich-proxy:
container_name: immich_proxy
image: immich-proxy:latest
environment:
# Make sure these values get passed through from the env file
- IMMICH_SERVER_URL
- IMMICH_WEB_URL
build:
context: ../nginx
dockerfile: Dockerfile
ports:
- 2283:8080
logging:
driver: none
depends_on:
- immich-server
restart: always restart: always
volumes: volumes:
pgdata:
model-cache: model-cache:
tsdata:
+4 -4
View File
@@ -6,9 +6,9 @@ services:
immich-server: immich-server:
image: immich-server-dev:latest image: immich-server-dev:latest
build: build:
context: ../server context: ../
dockerfile: Dockerfile dockerfile: server/Dockerfile
target: builder target: dev
command: npm run test:e2e command: npm run test:e2e
volumes: volumes:
- ../server:/usr/src/app - ../server:/usr/src/app
@@ -23,7 +23,7 @@ services:
- database - database
database: database:
image: postgres:14-alpine@sha256:28407a9961e76f2d285dc6991e8e48893503cc3836a4755bbc2d40bcc272a441 image: postgres:14-alpine@sha256:50d9be76e9a90da4c781554955e0ffc79d9d5c4226838e64b36aacc97cbc35ad
command: -c fsync=off command: -c fsync=off
environment: environment:
POSTGRES_PASSWORD: postgres POSTGRES_PASSWORD: postgres
+16 -21
View File
@@ -1,15 +1,27 @@
version: "3.8" version: "3.8"
#
# WARNING: Make sure to use the docker-compose.yml of the current release:
#
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
#
# The compose file on main may not be compatible with the latest release.
#
name: immich
services: services:
immich-server: immich-server:
container_name: immich_server container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
command: ["start.sh", "immich"] command: [ "start.sh", "immich" ]
volumes: volumes:
- ${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:
- .env - .env
ports:
- 2283:3001
depends_on: depends_on:
- redis - redis
- database - database
@@ -22,7 +34,7 @@ services:
# extends: # extends:
# file: hwaccel.yml # file: hwaccel.yml
# service: hwaccel # service: hwaccel
command: ["start.sh", "microservices"] command: [ "start.sh", "microservices" ]
volumes: volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload - ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
@@ -43,13 +55,6 @@ services:
- .env - .env
restart: always restart: always
immich-web:
container_name: immich_web
image: ghcr.io/immich-app/immich-web:${IMMICH_VERSION:-release}
env_file:
- .env
restart: always
typesense: typesense:
container_name: immich_typesense container_name: immich_typesense
image: typesense/typesense:0.24.1@sha256:9bcff2b829f12074426ca044b56160ca9d777a0c488303469143dd9f8259d4dd image: typesense/typesense:0.24.1@sha256:9bcff2b829f12074426ca044b56160ca9d777a0c488303469143dd9f8259d4dd
@@ -64,12 +69,12 @@ services:
redis: redis:
container_name: immich_redis container_name: immich_redis
image: redis:6.2-alpine@sha256:70a7a5b641117670beae0d80658430853896b5ef269ccf00d1827427e3263fa3 image: redis:6.2-alpine@sha256:3995fe6ea6a619313e31046bd3c8643f9e70f8f2b294ff82659d409b47d06abb
restart: always restart: always
database: database:
container_name: immich_postgres container_name: immich_postgres
image: postgres:14-alpine@sha256:28407a9961e76f2d285dc6991e8e48893503cc3836a4755bbc2d40bcc272a441 image: postgres:14-alpine@sha256:50d9be76e9a90da4c781554955e0ffc79d9d5c4226838e64b36aacc97cbc35ad
env_file: env_file:
- .env - .env
environment: environment:
@@ -80,16 +85,6 @@ services:
- pgdata:/var/lib/postgresql/data - pgdata:/var/lib/postgresql/data
restart: always restart: always
immich-proxy:
container_name: immich_proxy
image: ghcr.io/immich-app/immich-proxy:${IMMICH_VERSION:-release}
ports:
- 2283:8080
depends_on:
- immich-server
- immich-web
restart: always
volumes: volumes:
pgdata: pgdata:
model-cache: model-cache:
+24
View File
@@ -0,0 +1,24 @@
version: "3.8"
# Hardware acceleration for transcoding using RKMPP for Rockchip SOCs
# This is only needed if you want to use hardware acceleration for transcoding.
# Supported host OS is Ubuntu Jammy 22.04 with custom ffmpeg from ppa:liujianfeng1994/rockchip-multimedia
services:
hwaccel:
security_opt: # enables full access to /sys and /proc, still far better than privileged: true
- systempaths=unconfined
- apparmor=unconfined
group_add:
- video
devices:
- /dev/rga:/dev/rga
- /dev/dri:/dev/dri
- /dev/dma_heap:/dev/dma_heap
- /dev/mpp_service:/dev/mpp_service
volumes:
- /usr/bin/ffmpeg:/usr/bin/ffmpeg_mpp:ro
- /lib/aarch64-linux-gnu:/lib/ffmpeg-mpp:ro
- /lib/aarch64-linux-gnu/libblas.so.3:/lib/ffmpeg-mpp/libblas.so.3:ro # symlink is resolved by mounting
- /lib/aarch64-linux-gnu/liblapack.so.3:/lib/ffmpeg-mpp/liblapack.so.3:ro # symlink is resolved by mounting
- /lib/aarch64-linux-gnu/pulseaudio/libpulsecommon-15.99.so:/lib/ffmpeg-mpp/libpulsecommon-15.99.so:ro
-2
View File
@@ -33,8 +33,6 @@ To be concise, Immich can now read in the gallery files, register the path into
- Only new files that are added to the gallery will be detected. - Only new files that are added to the gallery will be detected.
- Deleted and moved files will not be detected. - Deleted and moved files will not be detected.
You can find more information on how to use the feature by reading the documentation [here](/docs/features/read-only-gallery).
## Memory feature ## Memory feature
This is considered a fun feature that the team and I wanted to build for so long, but we had to put it off because of the refactoring of the code base. The code base is now in a good enough form to circle back and add more exciting features. This is considered a fun feature that the team and I wanted to build for so long, but we had to put it off because of the refactoring of the code base. The code base is now in a good enough form to circle back and add more exciting features.
@@ -17,13 +17,13 @@ docker exec -t immich_postgres pg_dumpall -c -U postgres | gzip > "/path/to/back
``` ```
```bash title='Restore' ```bash title='Restore'
docker-compose down -v # CAUTION! Deletes all Immich data to start from scratch. docker compose down -v # CAUTION! Deletes all Immich data to start from scratch.
docker-compose pull # Update to latest version of Immich (if desired) docker compose pull # Update to latest version of Immich (if desired)
docker-compose create # Create Docker containers for Immich apps without running them. docker compose create # Create Docker containers for Immich apps without running them.
docker start immich_postgres # Start Postgres server docker start immich_postgres # Start Postgres server
sleep 10 # Wait for Postgres server to start up sleep 10 # Wait for Postgres server to start up
gunzip < "/path/to/backup/dump.sql.gz" | docker exec -i immich_postgres psql -U postgres -d immich # Restore Backup gunzip < "/path/to/backup/dump.sql.gz" | docker exec -i immich_postgres psql -U postgres -d immich # Restore Backup
docker-compose up -d # Start remainder of Immich apps docker compose up -d # Start remainder of Immich apps
``` ```
Note that for the database restore to proceed properly, it requires a completely fresh install (i.e. the Immich server has never run since creating the Docker containers). If the Immich app has run, Postgres conflicts may be encountered upon database restoration (relation already exists, violated foreign key constraints, multiple primary keys, etc.). Note that for the database restore to proceed properly, it requires a completely fresh install (i.e. the Immich server has never run since creating the Docker containers). If the Immich app has run, Postgres conflicts may be encountered upon database restoration (relation already exists, violated foreign key constraints, multiple primary keys, etc.).
+1 -20
View File
@@ -1,21 +1,6 @@
# Reverse Proxy # Reverse Proxy
When deploying Immich it is important to understand that a reverse proxy is required in front of the server and web container. The reverse proxy acts as an intermediary between the user and container, forwarding requests to the correct container based on the URL path. Users can deploy a custom reverse proxy that forwards requests to Immich. This way, the reverse proxy can handle TLS termination, load balancing, or other advanced features. All reverse proxies between Immich and the user must forward all headers and set the `Host`, `X-Forwarded-Host`, `X-Forwarded-Proto` and `X-Forwarded-For` headers to their appropriate values. Additionally, your reverse proxy should allow for big enough uploads. By following these practices, you ensure that all custom reverse proxies are fully compatible with Immich.
## Default Reverse Proxy
Immich provides a default nginx reverse proxy preconfigured to perform the correct routing and set the necessary headers for the server and web container to use. These headers are crucial to redirect to the correct URL and determine the client's IP address.
## Using a Different Reverse Proxy
While the reverse proxy provided by Immich works well for basic deployments, some users may want to use a different reverse proxy. Fortunately, Immich is flexible enough to accommodate different reverse proxies. Users can either:
1. Add another reverse proxy on top of Immich's reverse proxy
2. Completely replace the default reverse proxy
## Adding a Custom Reverse Proxy
Users can deploy a custom reverse proxy that forwards requests to Immich's reverse proxy. This way, the new reverse proxy can handle TLS termination, load balancing, or other advanced features, while still delegating routing decisions to Immich's reverse proxy. All reverse proxies between Immich and the user must forward all headers and set the `Host`, `X-Forwarded-Host`, `X-Forwarded-Proto` and `X-Forwarded-For` headers to their appropriate values. Additionally, your reverse proxy should allow for big enough uploads. By following these practices, you ensure that all custom reverse proxies are fully compatible with Immich.
### Nginx example config ### Nginx example config
@@ -43,7 +28,3 @@ server {
} }
} }
``` ```
## Replacing the Default Reverse Proxy
Replacing Immich's default reverse proxy is an advanced deployment and support may be limited. When replacing Immich's default proxy it is important to ensure that requests to `/api/*` are routed to the server container and all other requests to the web container. Additionally, the previously mentioned headers should be configured accordingly. You may find our [nginx configuration file](https://github.com/immich-app/immich/blob/main/nginx/templates/default.conf.template) a helpful reference.
+1 -2
View File
@@ -51,8 +51,7 @@ immich-admin list-users
{ {
id: 'e65e6f88-2a30-4dbe-8dd9-1885f4889b53', id: 'e65e6f88-2a30-4dbe-8dd9-1885f4889b53',
email: 'immich@example.com.com', email: 'immich@example.com.com',
firstName: 'Immich', name: 'Immich Admin',
lastName: 'Admin',
storageLabel: 'admin', storageLabel: 'admin',
externalPath: null, externalPath: null,
profileImagePath: 'upload/profile/e65e6f88-2a30-4dbe-8dd9-1885f4889b53/e65e6f88-2a30-4dbe-8dd9-1885f4889b53.jpg', profileImagePath: 'upload/profile/e65e6f88-2a30-4dbe-8dd9-1885f4889b53/e65e6f88-2a30-4dbe-8dd9-1885f4889b53.jpg',
+1 -1
View File
@@ -9,6 +9,6 @@ npm run typeorm:migrations:generate ./src/infra/<migration-name>
``` ```
2. Check if the migration file makes sense. 2. Check if the migration file makes sense.
3. Move the migration file to folder `./src/infra/database/migrations` in your code editor. 3. Move the migration file to folder `./server/src/infra/migrations` in your code editor.
The server will automatically detect `*.ts` file changes and restart. Part of the server start-up process includes running any new migrations, so it will be applied immediately. The server will automatically detect `*.ts` file changes and restart. Part of the server start-up process includes running any new migrations, so it will be applied immediately.
+1 -2
View File
@@ -17,6 +17,5 @@ Our [GitHub Repository](https://github.com/immich-app/immich) is a [monorepo](ht
| `machine-learning/` | Source code for the `immich-machine-learning` docker image | | `machine-learning/` | Source code for the `immich-machine-learning` docker image |
| `misc/release/` | Scripts for version pumps and draft releases | | `misc/release/` | Scripts for version pumps and draft releases |
| `mobile/` | Source code for the mobile app, both Android and iOS | | `mobile/` | Source code for the mobile app, both Android and iOS |
| `nginx/` | Source code for the `immich-proxy` docker image |
| `server/` | Source code for the `immich-server` docker image | | `server/` | Source code for the `immich-server` docker image |
| `web/` | Source code for the `immich-web` docker image | | `web/` | Source code for the `web` |
+1 -1
View File
@@ -52,7 +52,7 @@ If you only want to do web development connected to an existing, remote backend,
3. Start the web development server 3. Start the web development server
``` ```
PUBLIC_IMMICH_SERVER_URL=https://demo.immich.app/api npm run dev IMMICH_SERVER_URL=https://demo.immich.app/api npm run dev
``` ```
## IDE setup ## IDE setup
+1 -1
View File
@@ -12,6 +12,6 @@ The backend has an end-to-end test suite that can be called with `npm run test:e
Note that there is a bug in nodejs <20.8 that causes segmentation faults when running these tests. If you run into segfaults, ensure you are using at least version 20.8. Note that there is a bug in nodejs <20.8 that causes segmentation faults when running these tests. If you run into segfaults, ensure you are using at least version 20.8.
To perform a full e2e test, you need to run e2e tests inside docker. The easiest way to do that is to run `make test-e2e` in the root directory. This will build and start a docker-compose consisting of the server, microservices, and a postgres database. It will then perfom the tests and exit. To perform a full e2e test, you need to run e2e tests inside docker. The easiest way to do that is to run `make test-e2e` in the root directory. This will build and start a docker-compose consisting of the server, microservices, and a postgres database. It will then perform the tests and exit.
If you manually install the dependencies (see the DOCKERFILE) on your development machine, you can also run the full e2e tests manually by setting the `IMMICH_RUN_ALL_TESTS` environment value to true, i.e. `IMMICH_RUN_ALL_TESTS=true npm run test:e2e`. If you manually install the dependencies (see the DOCKERFILE) on your development machine, you can also run the full e2e tests manually by setting the `IMMICH_RUN_ALL_TESTS` environment value to true, i.e. `IMMICH_RUN_ALL_TESTS=true npm run test:e2e`.
+15
View File
@@ -0,0 +1,15 @@
# Troubleshooting
:::tip
A great option to get assistance with troubleshooting is to join our [Discord](https://discord.gg/D8JsnBEuKb) server, where we have a dedicated channel for `#contributing`.
:::
## Known Issues
### Running on Windows
Running Immich on Windows can be frustrating and there are lots of ways it can go wrong. Where possible we recommend using Docker on Linux. However, several people have had success running Immich on Windows using Docker via WSL2.
### NTFS Mounted Volumes
The docker-compose.dev.yml and docker-compose.prod.yml use volume mounts for the postgres database. On start-up, postgres will try to `chown` the data directory, but fail. See [this post](https://forums.docker.com/t/data-directory-var-lib-postgresql-data-pgdata-has-wrong-ownership/17963/24) for more information about this issue and possible solutions.
+4 -68
View File
@@ -4,6 +4,10 @@ You can use the CLI to upload an existing gallery to the Immich server
[Immich CLI Repository](https://github.com/immich-app/CLI) [Immich CLI Repository](https://github.com/immich-app/CLI)
:::tip Google Photos Takeout
If you are looking to import your Google Photos takeout, we recommed this community maintained tool [immich-go](https://github.com/simulot/immich-go)
:::
## Requirements ## Requirements
- Node.js 16 or above - Node.js 16 or above
@@ -32,7 +36,6 @@ immich
| --server / -s | Immich's server address | | --server / -s | Immich's server address |
| --threads / -t | Number of threads to use (Default 5) | | --threads / -t | Number of threads to use (Default 5) |
| --album/ -al | Create albums for assets based on the parent folder or a given name | | --album/ -al | Create albums for assets based on the parent folder or a given name |
| --import/ -i | Import gallery (assets are not uploaded) |
## Quick Start ## Quick Start
@@ -108,70 +111,3 @@ npm run build
```bash title="Run the command" ```bash title="Run the command"
node bin/index.js upload --key HFEJ38DNSDUEG --server http://192.168.1.216:2283/api --recursive your/asset/directory node bin/index.js upload --key HFEJ38DNSDUEG --server http://192.168.1.216:2283/api --recursive your/asset/directory
``` ```
---
## Importing existing libraries
If you do not wish to upload files into the server, existing files can be imported into the immich gallery through the use of the `--import` flag.
```
immich upload --key HFEJ38DNSDUEG --server http://192.168.1.216:2283/api --recursive directory/ --import
```
```
immich upload --key HFEJ38DNSDUEG --server http://192.168.1.216:2283/api file1.jpg file2.jpg --import
```
The `immich-server` and `immich-microservices` containers must be able to access the files, or directories at the path referenced in the command. The directories referenced must be set under a user's `External Path` setting. More detailed instructions can be found [here](/docs/features/read-only-gallery).
:::tip Matching volume references
The import command is most easily run on the machine running the immich service, as the path to the files on the machine running the command and the server much match identically.
If you are running immich within docker, the volume pointing to your existing library should be identical with your host machine.
```diff title="docker-compose.yml"
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
command: [ "start.sh", "immich" ]
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
+ - /path/to/media:/path/to/media
env_file:
- .env
depends_on:
- redis
- database
- typesense
restart: always
immich-microservices:
container_name: immich_microservices
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
command: [ "start.sh", "microservices" ]
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
+ - /path/to/media:/path/to/media
env_file:
- .env
depends_on:
- redis
- database
- typesense
restart: always
```
The proper command for above would be as shown below. You should have access to `/path/to/media` exactly on the environment the CLI command is being run on
```
immich upload --key HFEJ38DNSDUEG --server http://192.168.1.216:2283/api --recursive /path/to/media --import
```
If you are running the import using the docker command, please note that the volumes should point to the `/path/to/media` exactly on the environment the CLI command is being run on
```
docker run -it --rm -v "/path/to/media:/path/to/media" ghcr.io/immich-app/immich-cli:latest upload --key HFEJ38DNSDUEG --server http://192.168.1.216:2283/api --recursive /path/to/media --import
```
:::
+15
View File
@@ -1,5 +1,7 @@
# Facial Recognition # Facial Recognition
## Overview
Immich recognizes faces in your photos and videos and groups them together. You can then assign names to the faces and search for them. Immich recognizes faces in your photos and videos and groups them together. You can then assign names to the faces and search for them.
The list of people is shown in the Explore page. The list of people is shown in the Explore page.
@@ -13,3 +15,16 @@ Upon clicking on a person, a list of assets that contain their face will be show
The asset detail view will also show the faces that are recognized in the asset. The asset detail view will also show the faces that are recognized in the asset.
<img src={require('./img/facial-recognition-3.png').default} title='Facial Recognition 3' /> <img src={require('./img/facial-recognition-3.png').default} title='Facial Recognition 3' />
## Actions
Additional actions you can do with a detected person are:
- Change the feature face photo of the person
- Set date of birth
- Merge two or more detected faces into one person
- Hide face
It can be found from the app bar when you access the detial view of a person
<img src={require('./img/facial-recognition-4.png').default} title='Facial Recognition 4' width="70%"/>
Binary file not shown.

After

Width:  |  Height:  |  Size: 416 KiB

+2 -2
View File
@@ -75,7 +75,7 @@ Some basic examples:
- `*.tif` will exclude all files with the extension `.tif` - `*.tif` will exclude all files with the extension `.tif`
- `hidden.jpg` will exclude all files named `hidden.jpg` - `hidden.jpg` will exclude all files named `hidden.jpg`
- `**/Raw/**` will exclude all files in any directory named `Raw` - `**/Raw/**` will exclude all files in any directory named `Raw`
- `*.(tif,jpg)` will exclude all files with the extension `.tif` or `.jpg` - `*.{tif,jpg}` will exclude all files with the extension `.tif` or `.jpg`
### Nightly job ### Nightly job
@@ -85,7 +85,7 @@ There is an automatic job that's run once a day and refreshes all modified files
Let's show a concrete example where we add an existing gallery to Immich. Here, we have the following folders we want to add: Let's show a concrete example where we add an existing gallery to Immich. Here, we have the following folders we want to add:
- `/home/user/old-pics`: a folder contining childhood photos. - `/home/user/old-pics`: a folder containing childhood photos.
- `/mnt/nas/christmas-trip`: photos from a christmas trip. The subfolder `/mnt/nas/christmas-trip/Raw` contains the raw files directly from the DSLR. We don't want to import the raw files to Immich - `/mnt/nas/christmas-trip`: photos from a christmas trip. The subfolder `/mnt/nas/christmas-trip/Raw` contains the raw files directly from the DSLR. We don't want to import the raw files to Immich
- `/mnt/media/videos`: Videos from the same christmas trip. - `/mnt/media/videos`: Videos from the same christmas trip.
+1 -1
View File
@@ -1,6 +1,6 @@
import MobileAppDownload from '../partials/_mobile-app-download.md'; import MobileAppDownload from '../partials/_mobile-app-download.md';
import MobileAppLogin from '../partials/_mobile-app-login.md'; import MobileAppLogin from '../partials/_mobile-app-login.md';
import MobileAppBackup from '../partials/_mobile-app-login.md'; import MobileAppBackup from '../partials/_mobile-app-backup.md';
# Mobile App # Mobile App
-97
View File
@@ -1,97 +0,0 @@
# Read-only Gallery [Deprecated]
:::caution
This feature is being deprecated in favor of [Libraries](/docs/features/libraries.md).
:::
## Overview
This feature enables users to use an existing gallery without uploading the assets to Immich.
Upon syncing the file information, it will be read by Immich to generate supported files.
## Usage
:::tip Example scenario
On the VM/system that Immich is running, I have 2 galleries that I want to use with Immich.
- My gallery is stored at `/mnt/media/precious-memory`
- My wife's gallery is stored at `/mnt/media/childhood-memory`
We will use those values in the steps below.
:::
### Mount the gallery to the containers.
`immich-server` and `immich-microservices` containers will need access to the gallery. Mount the directory path as in the example below
```diff title="docker-compose.yml"
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
command: [ "start.sh", "immich" ]
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
+ - /mnt/media/precious-memory:/mnt/media/precious-memory:ro
+ - /mnt/media/childhood-memory:/mnt/media/childhood-memory:ro
env_file:
- .env
depends_on:
- redis
- database
- typesense
restart: always
immich-microservices:
container_name: immich_microservices
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
command: [ "start.sh", "microservices" ]
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
+ - /mnt/media/precious-memory:/mnt/media/precious-memory:ro
+ - /mnt/media/childhood-memory:/mnt/media/childhood-memory:ro
env_file:
- .env
depends_on:
- redis
- database
- typesense
restart: always
```
:::tip
Internal and external path have to be identical.
:::
_Remember to bring the container down/up to register the changes. Make sure you can see the mounted path in the container._
### Register the path for the user.
This action is done by the admin of the instance.
- Navigate to `Administration > Users` page on the web.
- Click on the user edit button.
- Add the gallery path to the `External Path` field for the corresponding user and confirm the changes.
<img src={require('./img/me.png').default} width='33%' title='My Account Storage Path' />
<img src={require('./img/my-wife.png').default} width='33%' title='My Wifes Account Storage Path' />
### Sync with the CLI tool.
- Install or update the [CLI Tool](/docs/features/bulk-upload.md). The import feature is supported from version `v0.39.0` of the CLI
- Run the command below to sync the gallery with Immich.
```bash title="Import my gallery"
immich upload --key <my-api-key> --server http://my-server-ip:2283/api /mnt/media/precious-memory --recursive --import
```
```bash title="Import my wife gallery"
immich upload --key <my-wife-api-key> --server http://my-server-ip:2283/api /mnt/media/childhood-memory --recursive --import
```
The `--import` flag will tell Immich to import the files by path instead of uploading them.
+42
View File
@@ -0,0 +1,42 @@
# Python File Upload
```python
#!/usr/bin/python3
import requests
import os
from datetime import datetime
API_KEY = 'YOUR_API_KEY' # replace with a valid api key
BASE_URL = 'http://127.0.0.1:2283/api' # replace as needed
def upload(file):
stats = os.stat(file)
headers = {
'Accept': 'application/json',
'x-api-key': API_KEY
}
data = {
'deviceAssetId': f'{file}-{stats.st_mtime}',
'deviceId': 'python',
'fileCreatedAt': datetime.fromtimestamp(stats.st_mtime),
'fileModifiedAt': datetime.fromtimestamp(stats.st_mtime),
'isFavorite': 'false',
}
files = {
'assetData': open(file, 'rb')
}
response = requests.post(
f'{BASE_URL}/asset/upload', headers=headers, data=data, files=files)
print(response.json())
# {'id': 'ef96f635-61c7-4639-9e60-61a11c4bbfba', 'duplicate': False}
upload('./test.jpg')
```
+46 -7
View File
@@ -17,6 +17,12 @@ The default configuration looks like this:
"targetAudioCodec": "aac", "targetAudioCodec": "aac",
"targetResolution": "720", "targetResolution": "720",
"maxBitrate": "0", "maxBitrate": "0",
"bframes": -1,
"refs": 0,
"gopSize": 0,
"npl": 0,
"temporalAQ": false,
"cqMode": "auto",
"twoPass": false, "twoPass": false,
"transcode": "required", "transcode": "required",
"tonemap": "hable", "tonemap": "hable",
@@ -44,9 +50,15 @@ The default configuration looks like this:
"sidecar": { "sidecar": {
"concurrency": 5 "concurrency": 5
}, },
"library": {
"concurrency": 5
},
"storageTemplateMigration": { "storageTemplateMigration": {
"concurrency": 5 "concurrency": 5
}, },
"migration": {
"concurrency": 5
},
"thumbnailGeneration": { "thumbnailGeneration": {
"concurrency": 5 "concurrency": 5
}, },
@@ -55,16 +67,16 @@ The default configuration looks like this:
} }
}, },
"machineLearning": { "machineLearning": {
"classification": {
"minScore": 0.7,
"enabled": true,
"modelName": "microsoft/resnet-50"
},
"enabled": true, "enabled": true,
"url": "http://immich-machine-learning:3003", "url": "http://immich-machine-learning:3003",
"classification": {
"enabled": true,
"modelName": "microsoft/resnet-50",
"minScore": 0.9
},
"clip": { "clip": {
"enabled": true, "enabled": true,
"modelName": "ViT-B-32::openai" "modelName": "ViT-B-32__openai"
}, },
"facialRecognition": { "facialRecognition": {
"enabled": true, "enabled": true,
@@ -74,6 +86,14 @@ The default configuration looks like this:
"minFaces": 1 "minFaces": 1
} }
}, },
"map": {
"enabled": true,
"tileUrl": "https://tile.openstreetmap.org/{z}/{x}/{y}.png"
},
"reverseGeocoding": {
"enabled": true,
"citiesFileOverride": "cities500"
},
"oauth": { "oauth": {
"enabled": false, "enabled": false,
"issuerUrl": "", "issuerUrl": "",
@@ -96,8 +116,27 @@ The default configuration looks like this:
"thumbnail": { "thumbnail": {
"webpSize": 250, "webpSize": 250,
"jpegSize": 1440, "jpegSize": 1440,
"quality": 90, "quality": 80,
"colorspace": "p3" "colorspace": "p3"
},
"newVersionCheck": {
"enabled": true
},
"trash": {
"enabled": true,
"days": 30
},
"theme": {
"customCss": ""
},
"library": {
"scan": {
"enabled": true,
"cronExpression": "0 0 * * *"
}
},
"stylesheets": {
"css": ""
} }
} }
``` ```
-22
View File
@@ -122,28 +122,6 @@ TYPESENSE_API_KEY=some-random-text
PUBLIC_LOGIN_PAGE_MESSAGE="My Family Photos and Videos Backup Server" PUBLIC_LOGIN_PAGE_MESSAGE="My Family Photos and Videos Backup Server"
####################################################################################
# Alternative Service Addresses - Optional
#
# This is an advanced feature for users who may be running their immich services on different hosts.
# It will not change which address or port that services bind to within their containers, but it will change where other services look for their peers.
# Note: immich-microservices is bound to 3002, but no references are made
####################################################################################
IMMICH_WEB_URL=http://immich-web:3000
IMMICH_SERVER_URL=http://immich-server:3001
####################################################################################
# Alternative API's External Address - Optional
#
# This is an advanced feature used to control the public server endpoint returned to clients during Well-known discovery.
# You should only use this if you want mobile apps to access the immich API over a custom URL. Do not include trailing slash.
# NOTE: At this time, the web app will not be affected by this setting and will continue to use the relative path: /api
# Examples: http://localhost:3001, http://immich-api.example.com, etc
####################################################################################
#IMMICH_API_URL_EXTERNAL=http://localhost:3001
################################################################################### ###################################################################################
# Immich Version - Optional # Immich Version - Optional
# #
+6 -22
View File
@@ -63,21 +63,6 @@ These environment variables are used by the `docker-compose.yml` file and do **N
| `MACHINE_LEARNING_HOST` | Machine Learning Host | `0.0.0.0` | machine learning | | `MACHINE_LEARNING_HOST` | Machine Learning Host | `0.0.0.0` | machine learning |
| `MACHINE_LEARNING_PORT` | Machine Learning Port | `3003` | machine learning | | `MACHINE_LEARNING_PORT` | Machine Learning Port | `3003` | machine learning |
## URLs
| Variable | Description | Default | Services |
| :------------------------- | :---------------------- | :-------------------------: | :--------- |
| `IMMICH_WEB_URL` | Immich Web URL | `http://immich-web:3000` | proxy |
| `IMMICH_SERVER_URL` | Immich Server URL | `http://immich-server:3001` | web, proxy |
| `PUBLIC_IMMICH_SERVER_URL` | Public Immich URL | `http://immich-server:3001` | web |
| `IMMICH_API_URL_EXTERNAL` | Immich API URL External | `/api` | web |
:::info
The above paths are modifying the internal paths of the containers.
:::
## Database ## Database
| Variable | Description | Default | Services | | Variable | Description | Default | Services |
@@ -188,19 +173,18 @@ Typesense URL example JSON before encoding:
| Variable | Description | Default | Services | | Variable | Description | Default | Services |
| :----------------------------------------------- | :---------------------------------------------------------------- | :-----------------: | :--------------- | | :----------------------------------------------- | :---------------------------------------------------------------- | :-----------------: | :--------------- |
| `MACHINE_LEARNING_MODEL_TTL`<sup>\*1</sup> | Inactivity time (s) before a model is unloaded (disabled if <= 0) | `0` | machine learning | | `MACHINE_LEARNING_MODEL_TTL` | Inactivity time (s) before a model is unloaded (disabled if <= 0) | `300` | machine learning |
| `MACHINE_LEARNING_MODEL_TTL_POLL_S` | Interval (s) between checks for the model TTL (disabled if <= 0) | `10` | machine learning |
| `MACHINE_LEARNING_CACHE_FOLDER` | Directory where models are downloaded | `/cache` | machine learning | | `MACHINE_LEARNING_CACHE_FOLDER` | Directory where models are downloaded | `/cache` | machine learning |
| `MACHINE_LEARNING_REQUEST_THREADS`<sup>\*2</sup> | Thread count of the request thread pool (disabled if <= 0) | number of CPU cores | machine learning | | `MACHINE_LEARNING_REQUEST_THREADS`<sup>\*1</sup> | Thread count of the request thread pool (disabled if <= 0) | number of CPU cores | machine learning |
| `MACHINE_LEARNING_MODEL_INTER_OP_THREADS` | Number of parallel model operations | `1` | machine learning | | `MACHINE_LEARNING_MODEL_INTER_OP_THREADS` | Number of parallel model operations | `1` | machine learning |
| `MACHINE_LEARNING_MODEL_INTRA_OP_THREADS` | Number of threads for each model operation | `2` | machine learning | | `MACHINE_LEARNING_MODEL_INTRA_OP_THREADS` | Number of threads for each model operation | `2` | machine learning |
| `MACHINE_LEARNING_WORKERS`<sup>\*3</sup> | Number of worker processes to spawn | `1` | machine learning | | `MACHINE_LEARNING_WORKERS`<sup>\*2</sup> | Number of worker processes to spawn | `1` | machine learning |
| `MACHINE_LEARNING_WORKER_TIMEOUT` | Maximum time (s) of unresponsiveness before a worker is killed | `120` | machine learning | | `MACHINE_LEARNING_WORKER_TIMEOUT` | Maximum time (s) of unresponsiveness before a worker is killed | `120` | machine learning |
\*1: This is an experimental feature. It may result in increased memory use over time when loading models repeatedly. \*1: It is recommended to begin with this parameter when changing the concurrency levels of the machine learning service and then tune the other ones.
\*2: It is recommended to begin with this parameter when changing the concurrency levels of the machine learning service and then tune the other ones. \*2: Since each process duplicates models in memory, changing this is not recommended unless you have abundant memory to go around.
\*3: Since each process duplicates models in memory, changing this is not recommended unless you have abundant memory to go around.
:::info :::info
+4 -4
View File
@@ -98,12 +98,12 @@ alt="Select Plugins > Compose.Manager > Add New Stack > Label it Immich"
> Note: This can take several minutes depending on your Internet speed and Unraid hardware > Note: This can take several minutes depending on your Internet speed and Unraid hardware
9. Once on the Docker page you will see several Immich containers, one of them will be labelled `immich_proxy` and will have a port mapping. Visit the `IP:PORT` displayed in your web browser and you should see the Immich admin setup page. 9. Once on the Docker page you will see several Immich containers, one of them will be labelled `immich_web` and will have a port mapping. Visit the `IP:PORT` displayed in your web browser and you should see the Immich admin setup page.
<img <img
src={require('./img/unraid06.webp').default} src={require('./img/unraid06.webp').default}
width="80%" width="80%"
alt="Go to Docker Tab and visit the address listed next to immich-proxy" alt="Go to Docker Tab and visit the address listed next to immich-web"
/> />
<details > <details >
@@ -112,12 +112,12 @@ alt="Go to Docker Tab and visit the address listed next to immich-proxy"
<img <img
src={require('./img/unraid07.webp').default} src={require('./img/unraid07.webp').default}
width="80%" width="80%"
alt="Go to Docker Tab and visit the address listed next to immich-proxy" alt="Go to Docker Tab and visit the address listed next to immich-web"
/> />
<img <img
src={require('./img/unraid08.webp').default} src={require('./img/unraid08.webp').default}
width="90%" width="90%"
alt="Go to Docker Tab and visit the address listed next to immich-proxy" alt="Go to Docker Tab and visit the address listed next to immich-web"
/> />
</details> </details>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 321 KiB

After

Width:  |  Height:  |  Size: 404 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 335 KiB

After

Width:  |  Height:  |  Size: 334 KiB

+10 -10
View File
@@ -13232,19 +13232,19 @@
} }
}, },
"node_modules/tailwindcss": { "node_modules/tailwindcss": {
"version": "3.3.3", "version": "3.3.5",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz",
"integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", "integrity": "sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==",
"dependencies": { "dependencies": {
"@alloc/quick-lru": "^5.2.0", "@alloc/quick-lru": "^5.2.0",
"arg": "^5.0.2", "arg": "^5.0.2",
"chokidar": "^3.5.3", "chokidar": "^3.5.3",
"didyoumean": "^1.2.2", "didyoumean": "^1.2.2",
"dlv": "^1.1.3", "dlv": "^1.1.3",
"fast-glob": "^3.2.12", "fast-glob": "^3.3.0",
"glob-parent": "^6.0.2", "glob-parent": "^6.0.2",
"is-glob": "^4.0.3", "is-glob": "^4.0.3",
"jiti": "^1.18.2", "jiti": "^1.19.1",
"lilconfig": "^2.1.0", "lilconfig": "^2.1.0",
"micromatch": "^4.0.5", "micromatch": "^4.0.5",
"normalize-path": "^3.0.0", "normalize-path": "^3.0.0",
@@ -24517,19 +24517,19 @@
} }
}, },
"tailwindcss": { "tailwindcss": {
"version": "3.3.3", "version": "3.3.5",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz",
"integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", "integrity": "sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==",
"requires": { "requires": {
"@alloc/quick-lru": "^5.2.0", "@alloc/quick-lru": "^5.2.0",
"arg": "^5.0.2", "arg": "^5.0.2",
"chokidar": "^3.5.3", "chokidar": "^3.5.3",
"didyoumean": "^1.2.2", "didyoumean": "^1.2.2",
"dlv": "^1.1.3", "dlv": "^1.1.3",
"fast-glob": "^3.2.12", "fast-glob": "^3.3.0",
"glob-parent": "^6.0.2", "glob-parent": "^6.0.2",
"is-glob": "^4.0.3", "is-glob": "^4.0.3",
"jiti": "^1.18.2", "jiti": "^1.19.1",
"lilconfig": "^2.1.0", "lilconfig": "^2.1.0",
"micromatch": "^4.0.5", "micromatch": "^4.0.5",
"normalize-path": "^3.0.0", "normalize-path": "^3.0.0",
+1 -1
View File
@@ -34,7 +34,7 @@ function HomepageHeader() {
</Link> </Link>
</div> </div>
<img src="/img/immich-screenshots.png" alt="logo" /> <img src="/img/immich-screenshots.png" alt="screenshots" width={'85%'} />
<div className="flex flex-col sm:flex-row place-items-center place-content-center mt-4 gap-1"> <div className="flex flex-col sm:flex-row place-items-center place-content-center mt-4 gap-1">
<div className="h-24"> <div className="h-24">
+30 -1
View File
@@ -8,6 +8,7 @@ import {
mdiCheckAll, mdiCheckAll,
mdiCheckboxMarked, mdiCheckboxMarked,
mdiCollage, mdiCollage,
mdiContentCopy,
mdiDevices, mdiDevices,
mdiFaceMan, mdiFaceMan,
mdiFaceManOutline, mdiFaceManOutline,
@@ -26,6 +27,7 @@ import {
mdiMerge, mdiMerge,
mdiMonitor, mdiMonitor,
mdiMotionPlayOutline, mdiMotionPlayOutline,
mdiPalette,
mdiPanVertical, mdiPanVertical,
mdiPartyPopper, mdiPartyPopper,
mdiRaw, mdiRaw,
@@ -47,6 +49,33 @@ import React from 'react';
import Timeline, { DateType, Item } from '../components/timeline'; import Timeline, { DateType, Item } from '../components/timeline';
const items: Item[] = [ const items: Item[] = [
{
icon: mdiStar,
description: 'Reach 20K Stars on GitHub!',
title: '20,000 Stars',
release: 'v1.83.0',
tag: 'v1.83.0',
date: new Date(2023, 9, 28),
dateType: DateType.RELEASE,
},
{
icon: mdiContentCopy,
title: 'Stack assets',
description: 'Manual asset stacking for grouping and hiding related assets in the main timeline.',
release: 'v1.83.0',
tag: 'v1.83.0',
date: new Date(2023, 9, 28),
dateType: DateType.RELEASE,
},
{
icon: mdiPalette,
title: 'Custom theme',
description: 'Apply your custom CSS for modifying fonts, colors, and styles in the web application.',
release: 'v1.83.0',
tag: 'v1.83.0',
date: new Date(2023, 9, 28),
dateType: DateType.RELEASE,
},
{ {
icon: mdiTrashCanOutline, icon: mdiTrashCanOutline,
title: 'Trash Feature', title: 'Trash Feature',
@@ -283,7 +312,7 @@ const items: Item[] = [
}, },
{ {
icon: mdiStar, icon: mdiStar,
description: 'Reach 10K Starts on GitHub!', description: 'Reach 10K Stars on GitHub!',
title: '10,000 Stars', title: '10,000 Stars',
release: 'v1.54.0', release: 'v1.54.0',
tag: 'v1.54.0', tag: 'v1.54.0',
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

After

Width:  |  Height:  |  Size: 1.8 MiB

+1 -2
View File
@@ -10,9 +10,8 @@ RUN poetry config installer.max-workers 10 && \
RUN python -m venv /opt/venv RUN python -m venv /opt/venv
ENV VIRTUAL_ENV="/opt/venv" PATH="/opt/venv/bin:${PATH}" ENV VIRTUAL_ENV="/opt/venv" PATH="/opt/venv/bin:${PATH}"
COPY poetry.lock pyproject.toml requirements.txt ./ COPY poetry.lock pyproject.toml ./
RUN poetry install --sync --no-interaction --no-ansi --no-root --only main RUN poetry install --sync --no-interaction --no-ansi --no-root --only main
RUN pip install --no-deps -r requirements.txt
FROM python:3.11-slim-bookworm FROM python:3.11-slim-bookworm
+11 -2
View File
@@ -13,7 +13,8 @@ from .schemas import ModelType
class Settings(BaseSettings): class Settings(BaseSettings):
cache_folder: str = "/cache" cache_folder: str = "/cache"
model_ttl: int = 0 model_ttl: int = 300
model_ttl_poll_s: int = 10
host: str = "0.0.0.0" host: str = "0.0.0.0"
port: int = 3003 port: int = 3003
workers: int = 1 workers: int = 1
@@ -38,8 +39,16 @@ class LogSettings(BaseSettings):
_clean_name = str.maketrans(":\\/", "___", ".") _clean_name = str.maketrans(":\\/", "___", ".")
def clean_name(model_name: str) -> str:
return model_name.split("/")[-1].translate(_clean_name)
def get_cache_dir(model_name: str, model_type: ModelType) -> Path: def get_cache_dir(model_name: str, model_type: ModelType) -> Path:
return Path(settings.cache_folder) / model_type.value / model_name.translate(_clean_name) return Path(settings.cache_folder) / model_type.value / clean_name(model_name)
def get_hf_model_name(model_name: str) -> str:
return f"immich-app/{clean_name(model_name)}"
LOG_LEVELS: dict[str, int] = { LOG_LEVELS: dict[str, int] = {
+29 -6
View File
@@ -1,5 +1,6 @@
import json import json
from typing import Any, Iterator, TypeAlias from pathlib import Path
from typing import Any, Iterator
from unittest import mock from unittest import mock
import numpy as np import numpy as np
@@ -8,8 +9,7 @@ from fastapi.testclient import TestClient
from PIL import Image from PIL import Image
from .main import app, init_state from .main import app, init_state
from .schemas import ndarray_f32
ndarray: TypeAlias = np.ndarray[int, np.dtype[np.float32]]
@pytest.fixture @pytest.fixture
@@ -18,13 +18,13 @@ def pil_image() -> Image.Image:
@pytest.fixture @pytest.fixture
def cv_image(pil_image: Image.Image) -> ndarray: def cv_image(pil_image: Image.Image) -> ndarray_f32:
return np.asarray(pil_image)[:, :, ::-1] # PIL uses RGB while cv2 uses BGR return np.asarray(pil_image)[:, :, ::-1] # PIL uses RGB while cv2 uses BGR
@pytest.fixture @pytest.fixture
def mock_get_model() -> Iterator[mock.Mock]: def mock_get_model() -> Iterator[mock.Mock]:
with mock.patch("app.models.cache.InferenceModel.from_model_type", autospec=True) as mocked: with mock.patch("app.models.cache.from_model_type", autospec=True) as mocked:
yield mocked yield mocked
@@ -36,4 +36,27 @@ def deployed_app() -> TestClient:
@pytest.fixture(scope="session") @pytest.fixture(scope="session")
def responses() -> dict[str, Any]: def responses() -> dict[str, Any]:
return json.load(open("responses.json", "r")) responses: dict[str, Any] = json.load(open("responses.json", "r"))
return responses
@pytest.fixture(scope="session")
def clip_model_cfg() -> dict[str, Any]:
return {
"embed_dim": 512,
"vision_cfg": {"image_size": 224, "layers": 12, "width": 768, "patch_size": 32},
"text_cfg": {"context_length": 77, "vocab_size": 49408, "width": 512, "heads": 8, "layers": 12},
}
@pytest.fixture(scope="session")
def clip_preprocess_cfg() -> dict[str, Any]:
return {
"size": [224, 224],
"mode": "RGB",
"mean": [0.48145466, 0.4578275, 0.40821073],
"std": [0.26862954, 0.26130258, 0.27577711],
"interpolation": "bicubic",
"resize_mode": "shortest",
"fill_color": 0,
}
+35 -4
View File
@@ -1,5 +1,9 @@
import asyncio import asyncio
import gc
import os
import sys
import threading import threading
import time
from concurrent.futures import ThreadPoolExecutor from concurrent.futures import ThreadPoolExecutor
from typing import Any from typing import Any
from zipfile import BadZipFile from zipfile import BadZipFile
@@ -7,7 +11,7 @@ from zipfile import BadZipFile
import orjson import orjson
from fastapi import FastAPI, Form, HTTPException, UploadFile from fastapi import FastAPI, Form, HTTPException, UploadFile
from fastapi.responses import ORJSONResponse from fastapi.responses import ORJSONResponse
from onnxruntime.capi.onnxruntime_pybind11_state import InvalidProtobuf, NoSuchFile # type: ignore from onnxruntime.capi.onnxruntime_pybind11_state import InvalidProtobuf, NoSuchFile
from starlette.formparsers import MultiPartParser from starlette.formparsers import MultiPartParser
from app.models.base import InferenceModel from app.models.base import InferenceModel
@@ -34,7 +38,10 @@ def init_state() -> None:
) )
# asyncio is a huge bottleneck for performance, so we use a thread pool to run blocking code # asyncio is a huge bottleneck for performance, so we use a thread pool to run blocking code
app.state.thread_pool = ThreadPoolExecutor(settings.request_threads) if settings.request_threads > 0 else None app.state.thread_pool = ThreadPoolExecutor(settings.request_threads) if settings.request_threads > 0 else None
app.state.locks = {model_type: threading.Lock() for model_type in ModelType} app.state.lock = threading.Lock()
app.state.last_called = None
if settings.model_ttl > 0 and settings.model_ttl_poll_s > 0:
asyncio.ensure_future(idle_shutdown_task())
log.info(f"Initialized request thread pool with {settings.request_threads} threads.") log.info(f"Initialized request thread pool with {settings.request_threads} threads.")
@@ -79,9 +86,9 @@ async def predict(
async def run(model: InferenceModel, inputs: Any) -> Any: async def run(model: InferenceModel, inputs: Any) -> Any:
app.state.last_called = time.time()
if app.state.thread_pool is None: if app.state.thread_pool is None:
return model.predict(inputs) return model.predict(inputs)
return await asyncio.get_running_loop().run_in_executor(app.state.thread_pool, model.predict, inputs) return await asyncio.get_running_loop().run_in_executor(app.state.thread_pool, model.predict, inputs)
@@ -90,7 +97,7 @@ async def load(model: InferenceModel) -> InferenceModel:
return model return model
def _load() -> None: def _load() -> None:
with app.state.locks[model.model_type]: with app.state.lock:
model.load() model.load()
loop = asyncio.get_running_loop() loop = asyncio.get_running_loop()
@@ -113,3 +120,27 @@ async def load(model: InferenceModel) -> InferenceModel:
else: else:
await loop.run_in_executor(app.state.thread_pool, _load) await loop.run_in_executor(app.state.thread_pool, _load)
return model return model
async def idle_shutdown_task() -> None:
while True:
log.debug("Checking for inactivity...")
if app.state.last_called is not None and time.time() - app.state.last_called > settings.model_ttl:
log.info("Shutting down due to inactivity.")
loop = asyncio.get_running_loop()
for task in asyncio.all_tasks(loop):
if task is not asyncio.current_task():
try:
task.cancel()
except asyncio.CancelledError:
pass
sys.stderr.close()
sys.stdout.close()
sys.stdout = sys.stderr = open(os.devnull, "w")
try:
await app.state.model_cache.cache.clear()
gc.collect()
loop.stop()
except asyncio.CancelledError:
pass
await asyncio.sleep(settings.model_ttl_poll_s)
+25 -1
View File
@@ -1,3 +1,27 @@
from .clip import CLIPEncoder from typing import Any
from app.schemas import ModelType
from .base import InferenceModel
from .clip import MCLIPEncoder, OpenCLIPEncoder
from .constants import is_insightface, is_mclip, is_openclip
from .facial_recognition import FaceRecognizer from .facial_recognition import FaceRecognizer
from .image_classification import ImageClassifier from .image_classification import ImageClassifier
def from_model_type(model_type: ModelType, model_name: str, **model_kwargs: Any) -> InferenceModel:
match model_type:
case ModelType.CLIP:
if is_openclip(model_name):
return OpenCLIPEncoder(model_name, **model_kwargs)
elif is_mclip(model_name):
return MCLIPEncoder(model_name, **model_kwargs)
case ModelType.FACIAL_RECOGNITION:
if is_insightface(model_name):
return FaceRecognizer(model_name, **model_kwargs)
case ModelType.IMAGE_CLASSIFICATION:
return ImageClassifier(model_name, **model_kwargs)
case _:
raise ValueError(f"Unknown model type {model_type}")
raise ValueError(f"Unknown ${model_type} model {model_name}")
+16 -9
View File
@@ -7,8 +7,10 @@ from shutil import rmtree
from typing import Any from typing import Any
import onnxruntime as ort import onnxruntime as ort
from huggingface_hub import snapshot_download
from typing_extensions import Buffer
from ..config import get_cache_dir, log, settings from ..config import get_cache_dir, get_hf_model_name, log, settings
from ..schemas import ModelType from ..schemas import ModelType
@@ -25,7 +27,7 @@ class InferenceModel(ABC):
) -> None: ) -> None:
self.model_name = model_name self.model_name = model_name
self.loaded = False self.loaded = False
self._cache_dir = Path(cache_dir) if cache_dir is not None else get_cache_dir(model_name, self.model_type) self._cache_dir = Path(cache_dir) if cache_dir is not None else None
self.providers = model_kwargs.pop("providers", ["CPUExecutionProvider"]) self.providers = model_kwargs.pop("providers", ["CPUExecutionProvider"])
# don't pre-allocate more memory than needed # don't pre-allocate more memory than needed
self.provider_options = model_kwargs.pop( self.provider_options = model_kwargs.pop(
@@ -78,9 +80,13 @@ class InferenceModel(ABC):
def configure(self, **model_kwargs: Any) -> None: def configure(self, **model_kwargs: Any) -> None:
pass pass
@abstractmethod
def _download(self) -> None: def _download(self) -> None:
... snapshot_download(
get_hf_model_name(self.model_name),
cache_dir=self.cache_dir,
local_dir=self.cache_dir,
local_dir_use_symlinks=False,
)
@abstractmethod @abstractmethod
def _load(self) -> None: def _load(self) -> None:
@@ -92,7 +98,7 @@ class InferenceModel(ABC):
@property @property
def cache_dir(self) -> Path: def cache_dir(self) -> Path:
return self._cache_dir return self._cache_dir if self._cache_dir is not None else get_cache_dir(self.model_name, self.model_type)
@cache_dir.setter @cache_dir.setter
def cache_dir(self, cache_dir: Path) -> None: def cache_dir(self, cache_dir: Path) -> None:
@@ -134,11 +140,12 @@ class InferenceModel(ABC):
# HF deep copies configs, so we need to make session options picklable # HF deep copies configs, so we need to make session options picklable
class PicklableSessionOptions(ort.SessionOptions): class PicklableSessionOptions(ort.SessionOptions): # type: ignore[misc]
def __getstate__(self) -> bytes: def __getstate__(self) -> bytes:
return pickle.dumps([(attr, getattr(self, attr)) for attr in dir(self) if not callable(getattr(self, attr))]) return pickle.dumps([(attr, getattr(self, attr)) for attr in dir(self) if not callable(getattr(self, attr))])
def __setstate__(self, state: Any) -> None: def __setstate__(self, state: Buffer) -> None:
self.__init__() # type: ignore self.__init__() # type: ignore[misc]
for attr, val in pickle.loads(state): attrs: list[tuple[str, Any]] = pickle.loads(state)
for attr, val in attrs:
setattr(self, attr, val) setattr(self, attr, val)
+8 -6
View File
@@ -4,7 +4,9 @@ from aiocache.backends.memory import SimpleMemoryCache
from aiocache.lock import OptimisticLock from aiocache.lock import OptimisticLock
from aiocache.plugins import BasePlugin, TimingPlugin from aiocache.plugins import BasePlugin, TimingPlugin
from ..schemas import ModelType from app.models import from_model_type
from ..schemas import ModelType, has_profiling
from .base import InferenceModel from .base import InferenceModel
@@ -48,20 +50,20 @@ class ModelCache:
key = f"{model_name}{model_type.value}{model_kwargs.get('mode', '')}" key = f"{model_name}{model_type.value}{model_kwargs.get('mode', '')}"
async with OptimisticLock(self.cache, key) as lock: async with OptimisticLock(self.cache, key) as lock:
model = await self.cache.get(key) model: InferenceModel | None = await self.cache.get(key)
if model is None: if model is None:
model = InferenceModel.from_model_type(model_type, model_name, **model_kwargs) model = from_model_type(model_type, model_name, **model_kwargs)
await lock.cas(model, ttl=self.ttl) await lock.cas(model, ttl=self.ttl)
return model return model
async def get_profiling(self) -> dict[str, float] | None: async def get_profiling(self) -> dict[str, float] | None:
if not hasattr(self.cache, "profiling"): if not has_profiling(self.cache):
return None return None
return self.cache.profiling # type: ignore return self.cache.profiling
class RevalidationPlugin(BasePlugin): class RevalidationPlugin(BasePlugin): # type: ignore[misc]
"""Revalidates cache item's TTL after cache hit.""" """Revalidates cache item's TTL after cache hit."""
async def post_get( async def post_get(
+109 -75
View File
@@ -1,23 +1,23 @@
import os import json
import zipfile from abc import abstractmethod
from functools import cached_property
from io import BytesIO from io import BytesIO
from pathlib import Path
from typing import Any, Literal from typing import Any, Literal
import numpy as np
import onnxruntime as ort import onnxruntime as ort
import torch
from clip_server.model.clip import BICUBIC, _convert_image_to_rgb
from clip_server.model.clip_onnx import _MODELS, _S3_BUCKET_V2, CLIPOnnxModel, download_model
from clip_server.model.pretrained_models import _VISUAL_MODEL_IMAGE_SIZE
from clip_server.model.tokenization import Tokenizer
from PIL import Image from PIL import Image
from torchvision.transforms import CenterCrop, Compose, Normalize, Resize, ToTensor from transformers import AutoTokenizer
from app.config import clean_name, log
from app.models.transforms import crop, get_pil_resampling, normalize, resize, to_numpy
from app.schemas import ModelType, ndarray_f32, ndarray_i32, ndarray_i64
from ..config import log
from ..schemas import ModelType
from .base import InferenceModel from .base import InferenceModel
class CLIPEncoder(InferenceModel): class BaseCLIPEncoder(InferenceModel):
_model_type = ModelType.CLIP _model_type = ModelType.CLIP
def __init__( def __init__(
@@ -27,50 +27,31 @@ class CLIPEncoder(InferenceModel):
mode: Literal["text", "vision"] | None = None, mode: Literal["text", "vision"] | None = None,
**model_kwargs: Any, **model_kwargs: Any,
) -> None: ) -> None:
if mode is not None and mode not in ("text", "vision"):
raise ValueError(f"Mode must be 'text', 'vision', or omitted; got '{mode}'")
if model_name not in _MODELS:
raise ValueError(f"Unknown model name {model_name}.")
self.mode = mode self.mode = mode
super().__init__(model_name, cache_dir, **model_kwargs) super().__init__(model_name, cache_dir, **model_kwargs)
def _download(self) -> None:
models: tuple[tuple[str, str], tuple[str, str]] = _MODELS[self.model_name]
text_onnx_path = self.cache_dir / "textual.onnx"
vision_onnx_path = self.cache_dir / "visual.onnx"
if not text_onnx_path.is_file():
self._download_model(*models[0])
if not vision_onnx_path.is_file():
self._download_model(*models[1])
def _load(self) -> None: def _load(self) -> None:
if self.mode == "text" or self.mode is None: if self.mode == "text" or self.mode is None:
log.debug(f"Loading clip text model '{self.model_name}'") log.debug(f"Loading clip text model '{self.model_name}'")
self.text_model = ort.InferenceSession( self.text_model = ort.InferenceSession(
self.cache_dir / "textual.onnx", self.textual_path.as_posix(),
sess_options=self.sess_options, sess_options=self.sess_options,
providers=self.providers, providers=self.providers,
provider_options=self.provider_options, provider_options=self.provider_options,
) )
self.text_outputs = [output.name for output in self.text_model.get_outputs()]
self.tokenizer = Tokenizer(self.model_name)
if self.mode == "vision" or self.mode is None: if self.mode == "vision" or self.mode is None:
log.debug(f"Loading clip vision model '{self.model_name}'") log.debug(f"Loading clip vision model '{self.model_name}'")
self.vision_model = ort.InferenceSession( self.vision_model = ort.InferenceSession(
self.cache_dir / "visual.onnx", self.visual_path.as_posix(),
sess_options=self.sess_options, sess_options=self.sess_options,
providers=self.providers, providers=self.providers,
provider_options=self.provider_options, provider_options=self.provider_options,
) )
self.vision_outputs = [output.name for output in self.vision_model.get_outputs()]
image_size = _VISUAL_MODEL_IMAGE_SIZE[CLIPOnnxModel.get_model_name(self.model_name)] def _predict(self, image_or_text: Image.Image | str) -> ndarray_f32:
self.transform = _transform_pil_image(image_size)
def _predict(self, image_or_text: Image.Image | str) -> list[float]:
if isinstance(image_or_text, bytes): if isinstance(image_or_text, bytes):
image_or_text = Image.open(BytesIO(image_or_text)) image_or_text = Image.open(BytesIO(image_or_text))
@@ -78,55 +59,108 @@ class CLIPEncoder(InferenceModel):
case Image.Image(): case Image.Image():
if self.mode == "text": if self.mode == "text":
raise TypeError("Cannot encode image as text-only model") raise TypeError("Cannot encode image as text-only model")
pixel_values = self.transform(image_or_text)
assert isinstance(pixel_values, torch.Tensor) outputs: ndarray_f32 = self.vision_model.run(None, self.transform(image_or_text))[0][0]
pixel_values = torch.unsqueeze(pixel_values, 0).numpy()
outputs = self.vision_model.run(self.vision_outputs, {"pixel_values": pixel_values})
case str(): case str():
if self.mode == "vision": if self.mode == "vision":
raise TypeError("Cannot encode text as vision-only model") raise TypeError("Cannot encode text as vision-only model")
text_inputs: dict[str, torch.Tensor] = self.tokenizer(image_or_text)
inputs = { outputs = self.text_model.run(None, self.tokenize(image_or_text))[0][0]
"input_ids": text_inputs["input_ids"].int().numpy(),
"attention_mask": text_inputs["attention_mask"].int().numpy(),
}
outputs = self.text_model.run(self.text_outputs, inputs)
case _: case _:
raise TypeError(f"Expected Image or str, but got: {type(image_or_text)}") raise TypeError(f"Expected Image or str, but got: {type(image_or_text)}")
return outputs[0][0].tolist() return outputs
def _download_model(self, model_name: str, model_md5: str) -> bool: @abstractmethod
# downloading logic is adapted from clip-server's CLIPOnnxModel class def tokenize(self, text: str) -> dict[str, ndarray_i32]:
download_model( pass
url=_S3_BUCKET_V2 + model_name,
target_folder=self.cache_dir.as_posix(), @abstractmethod
md5sum=model_md5, def transform(self, image: Image.Image) -> dict[str, ndarray_f32]:
with_resume=True, pass
)
file = self.cache_dir / model_name.split("/")[1] @property
if file.suffix == ".zip": def textual_dir(self) -> Path:
with zipfile.ZipFile(file, "r") as zip_ref: return self.cache_dir / "textual"
zip_ref.extractall(self.cache_dir)
os.remove(file) @property
return True def visual_dir(self) -> Path:
return self.cache_dir / "visual"
@property
def model_cfg_path(self) -> Path:
return self.cache_dir / "config.json"
@property
def textual_path(self) -> Path:
return self.textual_dir / "model.onnx"
@property
def visual_path(self) -> Path:
return self.visual_dir / "model.onnx"
@property
def preprocess_cfg_path(self) -> Path:
return self.visual_dir / "preprocess_cfg.json"
@property @property
def cached(self) -> bool: def cached(self) -> bool:
return (self.cache_dir / "textual.onnx").is_file() and (self.cache_dir / "visual.onnx").is_file() return self.textual_path.is_file() and self.visual_path.is_file()
# same as `_transform_blob` without `_blob2image` class OpenCLIPEncoder(BaseCLIPEncoder):
def _transform_pil_image(n_px: int) -> Compose: def __init__(
return Compose( self,
[ model_name: str,
Resize(n_px, interpolation=BICUBIC), cache_dir: str | None = None,
CenterCrop(n_px), mode: Literal["text", "vision"] | None = None,
_convert_image_to_rgb, **model_kwargs: Any,
ToTensor(), ) -> None:
Normalize( super().__init__(clean_name(model_name), cache_dir, mode, **model_kwargs)
(0.48145466, 0.4578275, 0.40821073),
(0.26862954, 0.26130258, 0.27577711), def _load(self) -> None:
), super()._load()
]
) self.tokenizer = AutoTokenizer.from_pretrained(self.textual_dir)
self.sequence_length = self.model_cfg["text_cfg"]["context_length"]
self.size = (
self.preprocess_cfg["size"][0] if type(self.preprocess_cfg["size"]) == list else self.preprocess_cfg["size"]
)
self.resampling = get_pil_resampling(self.preprocess_cfg["interpolation"])
self.mean = np.array(self.preprocess_cfg["mean"], dtype=np.float32)
self.std = np.array(self.preprocess_cfg["std"], dtype=np.float32)
def tokenize(self, text: str) -> dict[str, ndarray_i32]:
input_ids: ndarray_i64 = self.tokenizer(
text,
max_length=self.sequence_length,
return_tensors="np",
return_attention_mask=False,
padding="max_length",
truncation=True,
).input_ids
return {"text": input_ids.astype(np.int32)}
def transform(self, image: Image.Image) -> dict[str, ndarray_f32]:
image = resize(image, self.size)
image = crop(image, self.size)
image_np = to_numpy(image)
image_np = normalize(image_np, self.mean, self.std)
return {"image": np.expand_dims(image_np.transpose(2, 0, 1), 0)}
@cached_property
def model_cfg(self) -> dict[str, Any]:
model_cfg: dict[str, Any] = json.load(self.model_cfg_path.open())
return model_cfg
@cached_property
def preprocess_cfg(self) -> dict[str, Any]:
preprocess_cfg: dict[str, Any] = json.load(self.preprocess_cfg_path.open())
return preprocess_cfg
class MCLIPEncoder(OpenCLIPEncoder):
def tokenize(self, text: str) -> dict[str, ndarray_i32]:
tokens: dict[str, ndarray_i64] = self.tokenizer(text, return_tensors="np")
return {k: v.astype(np.int32) for k, v in tokens.items()}
+57
View File
@@ -0,0 +1,57 @@
from app.config import clean_name
_OPENCLIP_MODELS = {
"RN50__openai",
"RN50__yfcc15m",
"RN50__cc12m",
"RN101__openai",
"RN101__yfcc15m",
"RN50x4__openai",
"RN50x16__openai",
"RN50x64__openai",
"ViT-B-32__openai",
"ViT-B-32__laion2b_e16",
"ViT-B-32__laion400m_e31",
"ViT-B-32__laion400m_e32",
"ViT-B-32__laion2b-s34b-b79k",
"ViT-B-16__openai",
"ViT-B-16__laion400m_e31",
"ViT-B-16__laion400m_e32",
"ViT-B-16-plus-240__laion400m_e31",
"ViT-B-16-plus-240__laion400m_e32",
"ViT-L-14__openai",
"ViT-L-14__laion400m_e31",
"ViT-L-14__laion400m_e32",
"ViT-L-14__laion2b-s32b-b82k",
"ViT-L-14-336__openai",
"ViT-H-14__laion2b-s32b-b79k",
"ViT-g-14__laion2b-s12b-b42k",
}
_MCLIP_MODELS = {
"LABSE-Vit-L-14",
"XLM-Roberta-Large-Vit-B-32",
"XLM-Roberta-Large-Vit-B-16Plus",
"XLM-Roberta-Large-Vit-L-14",
}
_INSIGHTFACE_MODELS = {
"antelopev2",
"buffalo_l",
"buffalo_m",
"buffalo_s",
}
def is_openclip(model_name: str) -> bool:
return clean_name(model_name) in _OPENCLIP_MODELS
def is_mclip(model_name: str) -> bool:
return clean_name(model_name) in _MCLIP_MODELS
def is_insightface(model_name: str) -> bool:
return clean_name(model_name) in _INSIGHTFACE_MODELS
@@ -1,4 +1,3 @@
import zipfile
from pathlib import Path from pathlib import Path
from typing import Any from typing import Any
@@ -7,9 +6,10 @@ import numpy as np
import onnxruntime as ort import onnxruntime as ort
from insightface.model_zoo import ArcFaceONNX, RetinaFace from insightface.model_zoo import ArcFaceONNX, RetinaFace
from insightface.utils.face_align import norm_crop from insightface.utils.face_align import norm_crop
from insightface.utils.storage import BASE_REPO_URL, download_file
from ..schemas import ModelType from app.config import clean_name
from app.schemas import BoundingBox, Face, ModelType, ndarray_f32
from .base import InferenceModel from .base import InferenceModel
@@ -24,37 +24,21 @@ class FaceRecognizer(InferenceModel):
**model_kwargs: Any, **model_kwargs: Any,
) -> None: ) -> None:
self.min_score = model_kwargs.pop("minScore", min_score) self.min_score = model_kwargs.pop("minScore", min_score)
super().__init__(model_name, cache_dir, **model_kwargs) super().__init__(clean_name(model_name), cache_dir, **model_kwargs)
def _download(self) -> None:
zip_file = self.cache_dir / f"{self.model_name}.zip"
download_file(f"{BASE_REPO_URL}/{self.model_name}.zip", zip_file)
with zipfile.ZipFile(zip_file, "r") as zip:
members = zip.namelist()
det_file = next(model for model in members if model.startswith("det_"))
rec_file = next(model for model in members if model.startswith("w600k_"))
zip.extractall(self.cache_dir, members=[det_file, rec_file])
zip_file.unlink()
def _load(self) -> None: def _load(self) -> None:
try:
det_file = next(self.cache_dir.glob("det_*.onnx"))
rec_file = next(self.cache_dir.glob("w600k_*.onnx"))
except StopIteration:
raise FileNotFoundError("Facial recognition models not found in cache directory")
self.det_model = RetinaFace( self.det_model = RetinaFace(
session=ort.InferenceSession( session=ort.InferenceSession(
det_file.as_posix(), self.det_file.as_posix(),
sess_options=self.sess_options, sess_options=self.sess_options,
providers=self.providers, providers=self.providers,
provider_options=self.provider_options, provider_options=self.provider_options,
), ),
) )
self.rec_model = ArcFaceONNX( self.rec_model = ArcFaceONNX(
rec_file.as_posix(), self.rec_file.as_posix(),
session=ort.InferenceSession( session=ort.InferenceSession(
rec_file.as_posix(), self.rec_file.as_posix(),
sess_options=self.sess_options, sess_options=self.sess_options,
providers=self.providers, providers=self.providers,
provider_options=self.provider_options, provider_options=self.provider_options,
@@ -68,7 +52,7 @@ class FaceRecognizer(InferenceModel):
) )
self.rec_model.prepare(ctx_id=0) self.rec_model.prepare(ctx_id=0)
def _predict(self, image: np.ndarray[int, np.dtype[Any]] | bytes) -> list[dict[str, Any]]: def _predict(self, image: ndarray_f32 | bytes) -> list[Face]:
if isinstance(image, bytes): if isinstance(image, bytes):
image = cv2.imdecode(np.frombuffer(image, np.uint8), cv2.IMREAD_COLOR) image = cv2.imdecode(np.frombuffer(image, np.uint8), cv2.IMREAD_COLOR)
bboxes, kpss = self.det_model.detect(image) bboxes, kpss = self.det_model.detect(image)
@@ -83,26 +67,33 @@ class FaceRecognizer(InferenceModel):
height, width, _ = image.shape height, width, _ = image.shape
for (x1, y1, x2, y2), score, kps in zip(bboxes, scores, kpss): for (x1, y1, x2, y2), score, kps in zip(bboxes, scores, kpss):
cropped_img = norm_crop(image, kps) cropped_img = norm_crop(image, kps)
embedding = self.rec_model.get_feat(cropped_img)[0].tolist() embedding: ndarray_f32 = self.rec_model.get_feat(cropped_img)[0]
results.append( face: Face = {
{ "imageWidth": width,
"imageWidth": width, "imageHeight": height,
"imageHeight": height, "boundingBox": {
"boundingBox": { "x1": x1,
"x1": x1, "y1": y1,
"y1": y1, "x2": x2,
"x2": x2, "y2": y2,
"y2": y2, },
}, "score": score,
"score": score, "embedding": embedding,
"embedding": embedding, }
} results.append(face)
)
return results return results
@property @property
def cached(self) -> bool: def cached(self) -> bool:
return self.cache_dir.is_dir() and any(self.cache_dir.glob("*.onnx")) return self.det_file.is_file() and self.rec_file.is_file()
@property
def det_file(self) -> Path:
return self.cache_dir / "detection" / "model.onnx"
@property
def rec_file(self) -> Path:
return self.cache_dir / "recognition" / "model.onnx"
def configure(self, **model_kwargs: Any) -> None: def configure(self, **model_kwargs: Any) -> None:
self.det_model.det_thresh = model_kwargs.pop("minScore", self.det_model.det_thresh) self.det_model.det_thresh = model_kwargs.pop("minScore", self.det_model.det_thresh)
@@ -66,7 +66,7 @@ class ImageClassifier(InferenceModel):
def _predict(self, image: Image.Image | bytes) -> list[str]: def _predict(self, image: Image.Image | bytes) -> list[str]:
if isinstance(image, bytes): if isinstance(image, bytes):
image = Image.open(BytesIO(image)) image = Image.open(BytesIO(image))
predictions: list[dict[str, Any]] = self.model(image) # type: ignore predictions: list[dict[str, Any]] = self.model(image)
tags = [tag for pred in predictions for tag in pred["label"].split(", ") if pred["score"] >= self.min_score] tags = [tag for pred in predictions for tag in pred["label"].split(", ") if pred["score"] >= self.min_score]
return tags return tags
+35
View File
@@ -0,0 +1,35 @@
import numpy as np
from PIL import Image
from app.schemas import ndarray_f32
_PIL_RESAMPLING_METHODS = {resampling.name.lower(): resampling for resampling in Image.Resampling}
def resize(img: Image.Image, size: int) -> Image.Image:
if img.width < img.height:
return img.resize((size, int((img.height / img.width) * size)), resample=Image.BICUBIC)
else:
return img.resize((int((img.width / img.height) * size), size), resample=Image.BICUBIC)
# https://stackoverflow.com/a/60883103
def crop(img: Image.Image, size: int) -> Image.Image:
left = int((img.size[0] / 2) - (size / 2))
upper = int((img.size[1] / 2) - (size / 2))
right = left + size
lower = upper + size
return img.crop((left, upper, right, lower))
def to_numpy(img: Image.Image) -> ndarray_f32:
return np.asarray(img.convert("RGB")).astype(np.float32) / 255.0
def normalize(img: ndarray_f32, mean: float | ndarray_f32, std: float | ndarray_f32) -> ndarray_f32:
return (img - mean) / std
def get_pil_resampling(resample: str) -> Image.Resampling:
return _PIL_RESAMPLING_METHODS[resample.lower()]
+22 -9
View File
@@ -1,15 +1,12 @@
from enum import StrEnum from enum import StrEnum
from typing import Any, Protocol, TypeAlias, TypedDict, TypeGuard
import numpy as np
from pydantic import BaseModel from pydantic import BaseModel
ndarray_f32: TypeAlias = np.ndarray[int, np.dtype[np.float32]]
def to_lower_camel(string: str) -> str: ndarray_i64: TypeAlias = np.ndarray[int, np.dtype[np.int64]]
tokens = [token.capitalize() if i > 0 else token for i, token in enumerate(string.split("_"))] ndarray_i32: TypeAlias = np.ndarray[int, np.dtype[np.int32]]
return "".join(tokens)
class TextModelRequest(BaseModel):
text: str
class TextResponse(BaseModel): class TextResponse(BaseModel):
@@ -20,7 +17,7 @@ class MessageResponse(BaseModel):
message: str message: str
class BoundingBox(BaseModel): class BoundingBox(TypedDict):
x1: int x1: int
y1: int y1: int
x2: int x2: int
@@ -31,3 +28,19 @@ class ModelType(StrEnum):
IMAGE_CLASSIFICATION = "image-classification" IMAGE_CLASSIFICATION = "image-classification"
CLIP = "clip" CLIP = "clip"
FACIAL_RECOGNITION = "facial-recognition" FACIAL_RECOGNITION = "facial-recognition"
class HasProfiling(Protocol):
profiling: dict[str, float]
class Face(TypedDict):
boundingBox: BoundingBox
embedding: ndarray_f32
imageWidth: int
imageHeight: int
score: float
def has_profiling(obj: Any) -> TypeGuard[HasProfiling]:
return hasattr(obj, "profiling") and type(obj.profiling) == dict
+42 -23
View File
@@ -1,7 +1,8 @@
import json import json
import pickle import pickle
from io import BytesIO from io import BytesIO
from typing import Any, TypeAlias from pathlib import Path
from typing import Any, Callable
from unittest import mock from unittest import mock
import cv2 import cv2
@@ -14,13 +15,11 @@ from pytest_mock import MockerFixture
from .config import settings from .config import settings
from .models.base import PicklableSessionOptions from .models.base import PicklableSessionOptions
from .models.cache import ModelCache from .models.cache import ModelCache
from .models.clip import CLIPEncoder from .models.clip import OpenCLIPEncoder
from .models.facial_recognition import FaceRecognizer from .models.facial_recognition import FaceRecognizer
from .models.image_classification import ImageClassifier from .models.image_classification import ImageClassifier
from .schemas import ModelType from .schemas import ModelType
ndarray: TypeAlias = np.ndarray[int, np.dtype[np.float32]]
class TestImageClassifier: class TestImageClassifier:
classifier_preds = [ classifier_preds = [
@@ -56,44 +55,64 @@ class TestImageClassifier:
class TestCLIP: class TestCLIP:
embedding = np.random.rand(512).astype(np.float32) embedding = np.random.rand(512).astype(np.float32)
cache_dir = Path("test_cache")
def test_basic_image(self, pil_image: Image.Image, mocker: MockerFixture) -> None: def test_basic_image(
mocker.patch.object(CLIPEncoder, "download") self,
pil_image: Image.Image,
mocker: MockerFixture,
clip_model_cfg: dict[str, Any],
clip_preprocess_cfg: Callable[[Path], dict[str, Any]],
) -> None:
mocker.patch.object(OpenCLIPEncoder, "download")
mocker.patch.object(OpenCLIPEncoder, "model_cfg", clip_model_cfg)
mocker.patch.object(OpenCLIPEncoder, "preprocess_cfg", clip_preprocess_cfg)
mocker.patch("app.models.clip.AutoTokenizer.from_pretrained", autospec=True)
mocked = mocker.patch("app.models.clip.ort.InferenceSession", autospec=True) mocked = mocker.patch("app.models.clip.ort.InferenceSession", autospec=True)
mocked.return_value.run.return_value = [[self.embedding]] mocked.return_value.run.return_value = [[self.embedding]]
clip_encoder = CLIPEncoder("ViT-B-32::openai", cache_dir="test_cache", mode="vision")
assert clip_encoder.mode == "vision" clip_encoder = OpenCLIPEncoder("ViT-B-32::openai", cache_dir="test_cache", mode="vision")
embedding = clip_encoder.predict(pil_image) embedding = clip_encoder.predict(pil_image)
assert isinstance(embedding, list) assert clip_encoder.mode == "vision"
assert len(embedding) == 512 assert isinstance(embedding, np.ndarray)
assert all([isinstance(num, float) for num in embedding]) assert embedding.shape[0] == clip_model_cfg["embed_dim"]
assert embedding.dtype == np.float32
clip_encoder.vision_model.run.assert_called_once() clip_encoder.vision_model.run.assert_called_once()
def test_basic_text(self, mocker: MockerFixture) -> None: def test_basic_text(
mocker.patch.object(CLIPEncoder, "download") self,
mocker: MockerFixture,
clip_model_cfg: dict[str, Any],
clip_preprocess_cfg: Callable[[Path], dict[str, Any]],
) -> None:
mocker.patch.object(OpenCLIPEncoder, "download")
mocker.patch.object(OpenCLIPEncoder, "model_cfg", clip_model_cfg)
mocker.patch.object(OpenCLIPEncoder, "preprocess_cfg", clip_preprocess_cfg)
mocker.patch("app.models.clip.AutoTokenizer.from_pretrained", autospec=True)
mocked = mocker.patch("app.models.clip.ort.InferenceSession", autospec=True) mocked = mocker.patch("app.models.clip.ort.InferenceSession", autospec=True)
mocked.return_value.run.return_value = [[self.embedding]] mocked.return_value.run.return_value = [[self.embedding]]
clip_encoder = CLIPEncoder("ViT-B-32::openai", cache_dir="test_cache", mode="text")
assert clip_encoder.mode == "text" clip_encoder = OpenCLIPEncoder("ViT-B-32::openai", cache_dir="test_cache", mode="text")
embedding = clip_encoder.predict("test search query") embedding = clip_encoder.predict("test search query")
assert isinstance(embedding, list) assert clip_encoder.mode == "text"
assert len(embedding) == 512 assert isinstance(embedding, np.ndarray)
assert all([isinstance(num, float) for num in embedding]) assert embedding.shape[0] == clip_model_cfg["embed_dim"]
assert embedding.dtype == np.float32
clip_encoder.text_model.run.assert_called_once() clip_encoder.text_model.run.assert_called_once()
class TestFaceRecognition: class TestFaceRecognition:
def test_set_min_score(self, mocker: MockerFixture) -> None: def test_set_min_score(self, mocker: MockerFixture) -> None:
mocker.patch.object(FaceRecognizer, "load") mocker.patch.object(FaceRecognizer, "load")
face_recognizer = FaceRecognizer("test_model_name", cache_dir="test_cache", min_score=0.5) face_recognizer = FaceRecognizer("buffalo_s", cache_dir="test_cache", min_score=0.5)
assert face_recognizer.min_score == 0.5 assert face_recognizer.min_score == 0.5
def test_basic(self, cv_image: cv2.Mat, mocker: MockerFixture) -> None: def test_basic(self, cv_image: cv2.Mat, mocker: MockerFixture) -> None:
mocker.patch.object(FaceRecognizer, "load") mocker.patch.object(FaceRecognizer, "load")
face_recognizer = FaceRecognizer("test_model_name", min_score=0.0, cache_dir="test_cache") face_recognizer = FaceRecognizer("buffalo_s", min_score=0.0, cache_dir="test_cache")
det_model = mock.Mock() det_model = mock.Mock()
num_faces = 2 num_faces = 2
@@ -114,9 +133,9 @@ class TestFaceRecognition:
for face in faces: for face in faces:
assert face["imageHeight"] == 800 assert face["imageHeight"] == 800
assert face["imageWidth"] == 600 assert face["imageWidth"] == 600
assert isinstance(face["embedding"], list) assert isinstance(face["embedding"], np.ndarray)
assert len(face["embedding"]) == 512 assert face["embedding"].shape[0] == 512
assert all([isinstance(num, float) for num in face["embedding"]]) assert face["embedding"].dtype == np.float32
det_model.detect.assert_called_once() det_model.detect.assert_called_once()
assert rec_model.get_feat.call_count == num_faces assert rec_model.get_feat.call_count == num_faces
+21
View File
@@ -0,0 +1,21 @@
FROM mambaorg/micromamba:bookworm-slim as builder
ENV NODE_ENV=production \
TRANSFORMERS_CACHE=/cache \
PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PATH="/opt/venv/bin:$PATH" \
PYTHONPATH=/usr/src
COPY --chown=$MAMBA_USER:$MAMBA_USER conda-lock.yml /tmp/conda-lock.yml
RUN micromamba install -y -n base -f /tmp/conda-lock.yml && \
micromamba remove -y -n base cxx-compiler && \
micromamba clean --all --yes
WORKDIR /usr/src/app
COPY --chown=$MAMBA_USER:$MAMBA_USER start.sh .
COPY --chown=$MAMBA_USER:$MAMBA_USER app .
ENTRYPOINT ["/usr/local/bin/_entrypoint.sh"]
CMD ["./start.sh"]
File diff suppressed because it is too large Load Diff
+15
View File
@@ -0,0 +1,15 @@
name: base
channels:
- conda-forge
platforms:
- linux-64
- linux-aarch64
dependencies:
- black
- conda-lock
- mypy
- pytest
- pytest-cov
- pytest-mock
- ruff
category: dev
+26
View File
@@ -0,0 +1,26 @@
name: base
channels:
- conda-forge
- nvidia
- pytorch-nightly
platforms:
- linux-64
dependencies:
- cxx-compiler
- onnx==1.*
- onnxruntime==1.*
- open-clip-torch==2.*
- orjson==3.*
- pip
- python==3.11.*
- pytorch
- rich==13.*
- safetensors==0.*
- setuptools==68.*
- torchvision
- transformers==4.*
- pip:
- multilingual-clip
- onnx-simplifier
- tensorflow==2.14.*
category: main
+67
View File
@@ -0,0 +1,67 @@
import tempfile
import warnings
from pathlib import Path
import torch
from multilingual_clip.pt_multilingual_clip import MultilingualCLIP
from transformers import AutoTokenizer
from .openclip import OpenCLIPModelConfig
from .openclip import to_onnx as openclip_to_onnx
from .optimize import optimize
from .util import get_model_path
_MCLIP_TO_OPENCLIP = {
"M-CLIP/XLM-Roberta-Large-Vit-B-32": OpenCLIPModelConfig("ViT-B-32", "openai"),
"M-CLIP/XLM-Roberta-Large-Vit-B-16Plus": OpenCLIPModelConfig("ViT-B-16-plus-240", "laion400m_e32"),
"M-CLIP/LABSE-Vit-L-14": OpenCLIPModelConfig("ViT-L-14", "openai"),
"M-CLIP/XLM-Roberta-Large-Vit-L-14": OpenCLIPModelConfig("ViT-L-14", "openai"),
}
def to_onnx(
model_name: str,
output_dir_visual: Path | str,
output_dir_textual: Path | str,
) -> None:
textual_path = get_model_path(output_dir_textual)
with tempfile.TemporaryDirectory() as tmpdir:
model = MultilingualCLIP.from_pretrained(model_name, cache_dir=tmpdir)
AutoTokenizer.from_pretrained(model_name).save_pretrained(output_dir_textual)
for param in model.parameters():
param.requires_grad_(False)
export_text_encoder(model, textual_path)
openclip_to_onnx(_MCLIP_TO_OPENCLIP[model_name], output_dir_visual)
optimize(textual_path)
def export_text_encoder(model: MultilingualCLIP, output_path: Path | str) -> None:
output_path = Path(output_path)
def forward(self: MultilingualCLIP, input_ids: torch.Tensor, attention_mask: torch.Tensor) -> torch.Tensor:
embs = self.transformer(input_ids, attention_mask)[0]
embs = (embs * attention_mask.unsqueeze(2)).sum(dim=1) / attention_mask.sum(dim=1)[:, None]
embs = self.LinearTransformation(embs)
return torch.nn.functional.normalize(embs, dim=-1)
# unfortunately need to monkeypatch for tracing to work here
# otherwise it hits the 2GiB protobuf serialization limit
MultilingualCLIP.forward = forward
args = (torch.ones(1, 77, dtype=torch.int32), torch.ones(1, 77, dtype=torch.int32))
with warnings.catch_warnings():
warnings.simplefilter("ignore", UserWarning)
torch.onnx.export(
model,
args,
output_path.as_posix(),
input_names=["input_ids", "attention_mask"],
output_names=["text_embedding"],
opset_version=17,
dynamic_axes={
"input_ids": {0: "batch_size", 1: "sequence_length"},
"attention_mask": {0: "batch_size", 1: "sequence_length"},
},
)
+114
View File
@@ -0,0 +1,114 @@
import tempfile
import warnings
from dataclasses import dataclass, field
from math import e
from pathlib import Path
import open_clip
import torch
from transformers import AutoTokenizer
from .optimize import optimize
from .util import get_model_path, save_config
@dataclass
class OpenCLIPModelConfig:
name: str
pretrained: str
image_size: int = field(init=False)
sequence_length: int = field(init=False)
def __post_init__(self) -> None:
open_clip_cfg = open_clip.get_model_config(self.name)
if open_clip_cfg is None:
raise ValueError(f"Unknown model {self.name}")
self.image_size = open_clip_cfg["vision_cfg"]["image_size"]
self.sequence_length = open_clip_cfg["text_cfg"]["context_length"]
def to_onnx(
model_cfg: OpenCLIPModelConfig,
output_dir_visual: Path | str | None = None,
output_dir_textual: Path | str | None = None,
) -> None:
with tempfile.TemporaryDirectory() as tmpdir:
model = open_clip.create_model(
model_cfg.name,
pretrained=model_cfg.pretrained,
jit=False,
cache_dir=tmpdir,
require_pretrained=True,
)
text_vision_cfg = open_clip.get_model_config(model_cfg.name)
for param in model.parameters():
param.requires_grad_(False)
if output_dir_visual is not None:
output_dir_visual = Path(output_dir_visual)
visual_path = get_model_path(output_dir_visual)
save_config(open_clip.get_model_preprocess_cfg(model), output_dir_visual / "preprocess_cfg.json")
save_config(text_vision_cfg, output_dir_visual.parent / "config.json")
export_image_encoder(model, model_cfg, visual_path)
optimize(visual_path)
if output_dir_textual is not None:
output_dir_textual = Path(output_dir_textual)
textual_path = get_model_path(output_dir_textual)
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)
export_text_encoder(model, model_cfg, textual_path)
optimize(textual_path)
def export_image_encoder(model: open_clip.CLIP, model_cfg: OpenCLIPModelConfig, output_path: Path | str) -> None:
output_path = Path(output_path)
def encode_image(image: torch.Tensor) -> torch.Tensor:
output = model.encode_image(image, normalize=True)
assert isinstance(output, torch.Tensor)
return output
args = (torch.randn(1, 3, model_cfg.image_size, model_cfg.image_size),)
traced = torch.jit.trace(encode_image, args) # type: ignore[no-untyped-call]
with warnings.catch_warnings():
warnings.simplefilter("ignore", UserWarning)
torch.onnx.export(
traced,
args,
output_path.as_posix(),
input_names=["image"],
output_names=["image_embedding"],
opset_version=17,
dynamic_axes={"image": {0: "batch_size"}},
)
def export_text_encoder(model: open_clip.CLIP, model_cfg: OpenCLIPModelConfig, output_path: Path | str) -> None:
output_path = Path(output_path)
def encode_text(text: torch.Tensor) -> torch.Tensor:
output = model.encode_text(text, normalize=True)
assert isinstance(output, torch.Tensor)
return output
args = (torch.ones(1, model_cfg.sequence_length, dtype=torch.int32),)
traced = torch.jit.trace(encode_text, args) # type: ignore[no-untyped-call]
with warnings.catch_warnings():
warnings.simplefilter("ignore", UserWarning)
torch.onnx.export(
traced,
args,
output_path.as_posix(),
input_names=["text"],
output_names=["text_embedding"],
opset_version=17,
dynamic_axes={"text": {0: "batch_size"}},
)
@@ -0,0 +1,38 @@
from pathlib import Path
import onnx
import onnxruntime as ort
import onnxsim
def optimize_onnxsim(model_path: Path | str, output_path: Path | str) -> None:
model_path = Path(model_path)
output_path = Path(output_path)
model = onnx.load(model_path.as_posix())
model, check = onnxsim.simplify(model, skip_shape_inference=True)
assert check, "Simplified ONNX model could not be validated"
onnx.save(model, output_path.as_posix())
def optimize_ort(
model_path: Path | str,
output_path: Path | str,
level: ort.GraphOptimizationLevel = ort.GraphOptimizationLevel.ORT_ENABLE_BASIC,
) -> None:
model_path = Path(model_path)
output_path = Path(output_path)
sess_options = ort.SessionOptions()
sess_options.graph_optimization_level = level
sess_options.optimized_model_filepath = output_path.as_posix()
ort.InferenceSession(model_path.as_posix(), providers=["CPUExecutionProvider"], sess_options=sess_options)
def optimize(model_path: Path | str) -> None:
model_path = 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
if not any(file.name.startswith("Constant") for file in model_path.parent.iterdir()):
optimize_onnxsim(model_path, model_path)
+72
View File
@@ -0,0 +1,72 @@
import tempfile
from pathlib import Path
import tensorflow as tf
from transformers import TFCLIPModel
from .util import ModelType, get_model_path
class _CLIPWrapper(tf.Module):
def __init__(self, model_name: str):
super(_CLIPWrapper)
self.model = TFCLIPModel.from_pretrained(model_name)
@tf.function()
def encode_image(self, input_tensor):
return self.model.get_image_features(input_tensor)
@tf.function()
def encode_text(self, input_tensor):
return self.model.get_text_features(input_tensor)
# exported model signatures use batch size 2 because of the following reasons:
# 1. ARM-NN cannot use dynamic batch sizes for complex models like CLIP ViT
# 2. batch size 1 creates a larger TF-Lite model that uses a lot (50%) more RAM
# 3. batch size 2 is ~50% faster on GPU than 1 while 4 (or larger) are not really faster
# 4. batch size >2 wastes more computation if only a single image is processed
BATCH_SIZE_IMAGE = 2
# On most small-scale systems there will only be one query at a time, no sense in batching
BATCH_SIZE_TEXT = 1
SIGNATURE_TEXT = "encode_text"
SIGNATURE_IMAGE = "encode_image"
def to_tflite(
model_name,
output_path_image: Path | str | None,
output_path_text: Path | str | None,
context_length: int = 77,
):
with tempfile.TemporaryDirectory() as tmpdir:
_export_temporary_tf_model(model_name, tmpdir, context_length)
if output_path_image is not None:
image_path = get_model_path(output_path_image, ModelType.TFLITE)
_export_tflite_model(tmpdir, SIGNATURE_IMAGE, image_path.as_posix())
if output_path_text is not None:
text_path = get_model_path(output_path_text, ModelType.TFLITE)
_export_tflite_model(tmpdir, SIGNATURE_TEXT, text_path.as_posix())
def _export_temporary_tf_model(model_name, tmp_path: str, context_length: int):
wrapper = _CLIPWrapper(model_name)
conf = wrapper.model.config.vision_config
spec_visual = tf.TensorSpec(
shape=(BATCH_SIZE_IMAGE, conf.num_channels, conf.image_size, conf.image_size), dtype=tf.float32
)
encode_image = wrapper.encode_image.get_concrete_function(spec_visual)
spec_text = tf.TensorSpec(shape=(BATCH_SIZE_TEXT, context_length), dtype=tf.int32)
encode_text = wrapper.encode_text.get_concrete_function(spec_text)
signatures = {SIGNATURE_IMAGE: encode_image, SIGNATURE_TEXT: encode_text}
tf.saved_model.save(wrapper, tmp_path, signatures)
def _export_tflite_model(tmp_path: str, signature: str, output_path: str):
converter = tf.lite.TFLiteConverter.from_saved_model(tmp_path, signature_keys=[signature])
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.target_spec.supported_types = [tf.float16]
tflite_model = converter.convert()
with open(output_path, "wb") as f:
f.write(tflite_model)
+21
View File
@@ -0,0 +1,21 @@
import json
from enum import Enum
from pathlib import Path
from typing import Any
class ModelType(Enum):
ONNX = "onnx"
TFLITE = "tflite"
def get_model_path(output_dir: Path | str, model_type: ModelType = ModelType.ONNX) -> Path:
output_dir = Path(output_dir)
output_dir.mkdir(parents=True, exist_ok=True)
return output_dir / f"model.{model_type.value}"
def save_config(config: Any, output_path: Path | str) -> None:
output_path = Path(output_path)
output_path.parent.mkdir(parents=True, exist_ok=True)
json.dump(config, output_path.open("w"))
+80
View File
@@ -0,0 +1,80 @@
import gc
import os
from pathlib import Path
from tempfile import TemporaryDirectory
from huggingface_hub import create_repo, login, upload_folder
from rich.progress import Progress
from models import mclip, openclip, tfclip
models = [
"RN50::openai",
"RN50::yfcc15m",
"RN50::cc12m",
"RN101::openai",
"RN101::yfcc15m",
"RN50x4::openai",
"RN50x16::openai",
"RN50x64::openai",
"ViT-B-32::openai",
"ViT-B-32::laion2b_e16",
"ViT-B-32::laion400m_e31",
"ViT-B-32::laion400m_e32",
"ViT-B-32::laion2b-s34b-b79k",
"ViT-B-16::openai",
"ViT-B-16::laion400m_e31",
"ViT-B-16::laion400m_e32",
"ViT-B-16-plus-240::laion400m_e31",
"ViT-B-16-plus-240::laion400m_e32",
"ViT-L-14::openai",
"ViT-L-14::laion400m_e31",
"ViT-L-14::laion400m_e32",
"ViT-L-14::laion2b-s32b-b82k",
"ViT-L-14-336::openai",
"ViT-H-14::laion2b-s32b-b79k",
"ViT-g-14::laion2b-s12b-b42k",
"M-CLIP/LABSE-Vit-L-14",
"M-CLIP/XLM-Roberta-Large-Vit-B-32",
"M-CLIP/XLM-Roberta-Large-Vit-B-16Plus",
"M-CLIP/XLM-Roberta-Large-Vit-L-14",
"openai/clip-vit-base-patch32",
]
# login(token=os.environ["HF_AUTH_TOKEN"])
with Progress() as progress:
task1 = progress.add_task("[green]Exporting models...", total=len(models))
task2 = progress.add_task("[yellow]Uploading models...", total=len(models))
with TemporaryDirectory() as tmp:
tmpdir = Path(tmp)
for model in models:
model_name = model.split("/")[-1].replace("::", "__")
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:
progress.update(task1, description=f"[green]Exporting {model_name}")
visual_dir = tmpdir / model_name / "visual"
textual_dir = tmpdir / model_name / "textual"
if model.startswith("M-CLIP"):
mclip.to_onnx(model, visual_dir, textual_dir)
elif "/" in model:
tfclip.to_tflite(model, visual_dir.as_posix(), textual_dir.as_posix())
else:
name, _, pretrained = model_name.partition("__")
openclip.to_onnx(openclip.OpenCLIPModelConfig(name, pretrained), visual_dir, textual_dir)
progress.update(task1, advance=1)
gc.collect()
export()
upload()
+20 -9
View File
@@ -1,11 +1,12 @@
from io import BytesIO
import json import json
from argparse import ArgumentParser
from io import BytesIO
from typing import Any from typing import Any
from locust import HttpUser, events, task from locust import HttpUser, events, task
from locust.env import Environment from locust.env import Environment
from PIL import Image from PIL import Image
from argparse import ArgumentParser
byte_image = BytesIO() byte_image = BytesIO()
@@ -14,11 +15,21 @@ def _(parser: ArgumentParser) -> None:
parser.add_argument("--tag-model", type=str, default="microsoft/resnet-50") parser.add_argument("--tag-model", type=str, default="microsoft/resnet-50")
parser.add_argument("--clip-model", type=str, default="ViT-B-32::openai") parser.add_argument("--clip-model", type=str, default="ViT-B-32::openai")
parser.add_argument("--face-model", type=str, default="buffalo_l") parser.add_argument("--face-model", type=str, default="buffalo_l")
parser.add_argument("--tag-min-score", type=int, default=0.0, parser.add_argument(
help="Returns all tags at or above this score. The default returns all tags.") "--tag-min-score",
parser.add_argument("--face-min-score", type=int, default=0.034, type=int,
help=("Returns all faces at or above this score. The default returns 1 face per request; " default=0.0,
"setting this to 0 blows up the number of faces to the thousands.")) help="Returns all tags at or above this score. The default returns all tags.",
)
parser.add_argument(
"--face-min-score",
type=int,
default=0.034,
help=(
"Returns all faces at or above this score. The default returns 1 face per request; "
"setting this to 0 blows up the number of faces to the thousands."
),
)
parser.add_argument("--image-size", type=int, default=1000) parser.add_argument("--image-size", type=int, default=1000)
@@ -62,7 +73,7 @@ class CLIPTextFormDataLoadTest(InferenceLoadTest):
("modelName", self.environment.parsed_options.clip_model), ("modelName", self.environment.parsed_options.clip_model),
("modelType", "clip"), ("modelType", "clip"),
("options", json.dumps({"mode": "text"})), ("options", json.dumps({"mode": "text"})),
("text", "test search query") ("text", "test search query"),
] ]
self.client.post("/predict", data=data) self.client.post("/predict", data=data)
@@ -88,5 +99,5 @@ class RecognitionFormDataLoadTest(InferenceLoadTest):
("options", json.dumps({"minScore": self.environment.parsed_options.face_min_score})), ("options", json.dumps({"minScore": self.environment.parsed_options.face_min_score})),
] ]
files = {"image": self.data} files = {"image": self.data}
self.client.post("/predict", data=data, files=files) self.client.post("/predict", data=data, files=files)
+2012 -1893
View File
File diff suppressed because it is too large Load Diff
+5 -32
View File
@@ -1,6 +1,6 @@
[tool.poetry] [tool.poetry]
name = "machine-learning" name = "machine-learning"
version = "1.83.0" version = "1.87.0"
description = "" description = ""
authors = ["Hau Tran <alex.tran1502@gmail.com>"] authors = ["Hau Tran <alex.tran1502@gmail.com>"]
readme = "README.md" readme = "README.md"
@@ -9,8 +9,8 @@ packages = [{include = "app"}]
[tool.poetry.dependencies] [tool.poetry.dependencies]
python = "^3.11" python = "^3.11"
torch = [ torch = [
{markers = "platform_machine == 'arm64' or platform_machine == 'aarch64'", version = "=2.0.1", source = "pypi"}, {markers = "platform_machine == 'arm64' or platform_machine == 'aarch64'", version = "=2.1.0", source = "pypi"},
{markers = "platform_machine == 'amd64' or platform_machine == 'x86_64'", version = "=2.0.1", source = "pytorch-cpu"} {markers = "platform_machine == 'amd64' or platform_machine == 'x86_64'", version = "=2.1.0", source = "pytorch-cpu"}
] ]
transformers = "^4.29.2" transformers = "^4.29.2"
onnxruntime = "^1.15.0" onnxruntime = "^1.15.0"
@@ -22,18 +22,14 @@ uvicorn = {extras = ["standard"], version = "^0.22.0"}
pydantic = "^1.10.8" pydantic = "^1.10.8"
aiocache = "^0.12.1" aiocache = "^0.12.1"
optimum = "^1.9.1" optimum = "^1.9.1"
torchvision = [
{markers = "platform_machine == 'arm64' or platform_machine == 'aarch64'", version = "=0.15.2", source = "pypi"},
{markers = "platform_machine == 'amd64' or platform_machine == 'x86_64'", version = "=0.15.2", source = "pytorch-cpu"}
]
rich = "^13.4.2" rich = "^13.4.2"
ftfy = "^6.1.1" ftfy = "^6.1.1"
setuptools = "^68.0.0" setuptools = "^68.0.0"
open-clip-torch = "^2.20.0"
python-multipart = "^0.0.6" python-multipart = "^0.0.6"
orjson = "^3.9.5" orjson = "^3.9.5"
safetensors = "0.3.2" safetensors = "0.3.2"
gunicorn = "^21.1.0" gunicorn = "^21.1.0"
tflite-runtime = "^2.14.0"
[tool.poetry.group.dev.dependencies] [tool.poetry.group.dev.dependencies]
mypy = "^1.3.0" mypy = "^1.3.0"
@@ -63,6 +59,7 @@ warn_redundant_casts = true
disallow_any_generics = true disallow_any_generics = true
check_untyped_defs = true check_untyped_defs = true
disallow_untyped_defs = true disallow_untyped_defs = true
ignore_missing_imports = true
[tool.pydantic-mypy] [tool.pydantic-mypy]
init_forbid_extra = true init_forbid_extra = true
@@ -70,30 +67,6 @@ init_typed = true
warn_required_dynamic_aliases = true warn_required_dynamic_aliases = true
warn_untyped_fields = true warn_untyped_fields = true
[[tool.mypy.overrides]]
module = [
"huggingface_hub",
"transformers",
"gunicorn",
"cv2",
"insightface.model_zoo",
"insightface.utils.face_align",
"insightface.utils.storage",
"onnxruntime",
"optimum",
"optimum.pipelines",
"optimum.onnxruntime",
"clip_server.model.clip",
"clip_server.model.clip_onnx",
"clip_server.model.pretrained_models",
"clip_server.model.tokenization",
"torchvision.transforms",
"aiocache.backends.memory",
"aiocache.lock",
"aiocache.plugins"
]
ignore_missing_imports = true
[tool.ruff] [tool.ruff]
line-length = 120 line-length = 120
target-version = "py311" target-version = "py311"
-2
View File
@@ -1,2 +0,0 @@
# requirements to be installed with `--no-deps` flag
clip-server==0.8.*
+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" => 107, "android.injected.version.code" => 111,
"android.injected.version.name" => "1.83.0", "android.injected.version.name" => "1.87.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')
@@ -1,2 +1,2 @@
* User can now download assets to local device * User can now download assets to local device
* Increased the font size for curated image thumbnail information on the seach page * Increased the font size for curated image thumbnail information on the search page
+3 -3
View File
@@ -5,17 +5,17 @@
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000269"> <testcase classname="fastlane.lanes" name="0: default_platform" time="0.000219">
</testcase> </testcase>
<testcase classname="fastlane.lanes" name="1: bundleRelease" time="81.160108"> <testcase classname="fastlane.lanes" name="1: bundleRelease" time="67.071569">
</testcase> </testcase>
<testcase classname="fastlane.lanes" name="2: upload_to_play_store" time="39.176668"> <testcase classname="fastlane.lanes" name="2: upload_to_play_store" time="29.991184">
</testcase> </testcase>
+24
View File
@@ -23,9 +23,13 @@
"album_viewer_appbar_share_err_title": "Error al modificar el títol de l'àlbum", "album_viewer_appbar_share_err_title": "Error al modificar el títol de l'àlbum",
"album_viewer_appbar_share_leave": "Surt de l'àlbum", "album_viewer_appbar_share_leave": "Surt de l'àlbum",
"album_viewer_appbar_share_remove": "Treu de l'àlbum", "album_viewer_appbar_share_remove": "Treu de l'àlbum",
"album_viewer_appbar_share_to": "Share To",
"album_viewer_page_share_add_users": "Afegeix usuaris", "album_viewer_page_share_add_users": "Afegeix usuaris",
"all_people_page_title": "Persones", "all_people_page_title": "Persones",
"all_videos_page_title": "Vídeos", "all_videos_page_title": "Vídeos",
"app_bar_signout_dialog_content": "Are you sure you wanna sign out?",
"app_bar_signout_dialog_ok": "Yes",
"app_bar_signout_dialog_title": "Sign out",
"archive_page_no_archived_assets": "No s'ha trobat res arxivat", "archive_page_no_archived_assets": "No s'ha trobat res arxivat",
"archive_page_title": "Arxiu({})", "archive_page_title": "Arxiu({})",
"asset_list_layout_settings_dynamic_layout_title": "Dynamic layout", "asset_list_layout_settings_dynamic_layout_title": "Dynamic layout",
@@ -111,6 +115,8 @@
"cache_settings_statistics_title": "Ús de memòria cau", "cache_settings_statistics_title": "Ús de memòria cau",
"cache_settings_subtitle": "Control the caching behaviour of the Immich mobile application", "cache_settings_subtitle": "Control the caching behaviour of the Immich mobile application",
"cache_settings_thumbnail_size": "Thumbnail cache size ({} assets)", "cache_settings_thumbnail_size": "Thumbnail cache size ({} assets)",
"cache_settings_tile_subtitle": "Control the local storage behaviour",
"cache_settings_tile_title": "Local Storage",
"cache_settings_title": "Configuració de la memòria cau", "cache_settings_title": "Configuració de la memòria cau",
"change_password_form_confirm_password": "Confirma la contrasenya", "change_password_form_confirm_password": "Confirma la contrasenya",
"change_password_form_description": "Hi {firstName} {lastName},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.", "change_password_form_description": "Hi {firstName} {lastName},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.",
@@ -164,10 +170,15 @@
"home_page_add_to_album_conflicts": "Added {added} assets to album {album}. {failed} assets are already in the album.", "home_page_add_to_album_conflicts": "Added {added} assets to album {album}. {failed} assets are already in the album.",
"home_page_add_to_album_err_local": "Can not add local assets to albums yet, skipping", "home_page_add_to_album_err_local": "Can not add local assets to albums yet, skipping",
"home_page_add_to_album_success": "Added {added} assets to album {album}.", "home_page_add_to_album_success": "Added {added} assets to album {album}.",
"home_page_album_err_partner": "Can not add partner assets to an album yet, skipping",
"home_page_archive_err_local": "Can not archive local assets yet, skipping", "home_page_archive_err_local": "Can not archive local assets yet, skipping",
"home_page_archive_err_partner": "Can not archive partner assets, skipping",
"home_page_building_timeline": "Building the timeline", "home_page_building_timeline": "Building the timeline",
"home_page_delete_err_partner": "Can not delete partner assets, skipping",
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping", "home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
"home_page_favorite_err_partner": "Can not favorite partner assets yet, skipping",
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).", "home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
"home_page_share_err_local": "Can not share local assets via link, skipping",
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping", "home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
"image_viewer_page_state_provider_download_error": "Download Error", "image_viewer_page_state_provider_download_error": "Download Error",
"image_viewer_page_state_provider_download_success": "Download Success", "image_viewer_page_state_provider_download_success": "Download Success",
@@ -239,6 +250,7 @@
"partner_page_stop_sharing_content": "{} will no longer be able to access your photos.", "partner_page_stop_sharing_content": "{} will no longer be able to access your photos.",
"partner_page_stop_sharing_title": "Stop sharing your photos?", "partner_page_stop_sharing_title": "Stop sharing your photos?",
"partner_page_title": "Company", "partner_page_title": "Company",
"permission_onboarding_back": "Back",
"permission_onboarding_continue_anyway": "Continue anyway", "permission_onboarding_continue_anyway": "Continue anyway",
"permission_onboarding_get_started": "Get started", "permission_onboarding_get_started": "Get started",
"permission_onboarding_go_to_settings": "Go to settings", "permission_onboarding_go_to_settings": "Go to settings",
@@ -250,6 +262,8 @@
"permission_onboarding_request": "Immich requires permission to view your photos and videos.", "permission_onboarding_request": "Immich requires permission to view your photos and videos.",
"profile_drawer_app_logs": "Logs", "profile_drawer_app_logs": "Logs",
"profile_drawer_client_server_up_to_date": "Client and Server are up-to-date", "profile_drawer_client_server_up_to_date": "Client and Server are up-to-date",
"profile_drawer_documentation": "Documentation",
"profile_drawer_github": "GitHub",
"profile_drawer_settings": "Settings", "profile_drawer_settings": "Settings",
"profile_drawer_sign_out": "Tanca la sessió", "profile_drawer_sign_out": "Tanca la sessió",
"profile_drawer_trash": "Trash", "profile_drawer_trash": "Trash",
@@ -276,6 +290,7 @@
"select_user_for_sharing_page_err_album": "Error al crear l'àlbum", "select_user_for_sharing_page_err_album": "Error al crear l'àlbum",
"select_user_for_sharing_page_share_suggestions": "Suggestions", "select_user_for_sharing_page_share_suggestions": "Suggestions",
"server_info_box_app_version": "Versió de l'aplicació", "server_info_box_app_version": "Versió de l'aplicació",
"server_info_box_server_url": "Server URL",
"server_info_box_server_version": "Versió del servidor", "server_info_box_server_version": "Versió del servidor",
"setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).", "setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).",
"setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).", "setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).",
@@ -300,6 +315,12 @@
"share_add_photos": "Afegeix fotografies", "share_add_photos": "Afegeix fotografies",
"share_add_title": "Afegeix un títol", "share_add_title": "Afegeix un títol",
"share_create_album": "Crea un àlbum", "share_create_album": "Crea un àlbum",
"shared_album_activities_input_disable": "Comment is disabled",
"shared_album_activities_input_hint": "Say something",
"shared_album_activity_remove_content": "Do you want to delete this activity?",
"shared_album_activity_remove_title": "Delete Activity",
"shared_album_activity_setting_subtitle": "Let others respond",
"shared_album_activity_setting_title": "Comments & likes",
"share_dialog_preparing": "Preparing...", "share_dialog_preparing": "Preparing...",
"shared_link_app_bar_title": "Shared Links", "shared_link_app_bar_title": "Shared Links",
"shared_link_create_app_bar_title": "Create link to share", "shared_link_create_app_bar_title": "Create link to share",
@@ -311,6 +332,9 @@
"shared_link_edit_change_expiry": "Change expiration time", "shared_link_edit_change_expiry": "Change expiration time",
"shared_link_edit_description": "Description", "shared_link_edit_description": "Description",
"shared_link_edit_description_hint": "Enter the share description", "shared_link_edit_description_hint": "Enter the share description",
"shared_link_edit_expire_after": "Expire after",
"shared_link_edit_password": "Password",
"shared_link_edit_password_hint": "Enter the share password",
"shared_link_edit_show_meta": "Show metadata", "shared_link_edit_show_meta": "Show metadata",
"shared_link_edit_submit_button": "Update link", "shared_link_edit_submit_button": "Update link",
"shared_link_empty": "You don't have any shared links", "shared_link_empty": "You don't have any shared links",
+75 -51
View File
@@ -13,7 +13,7 @@
"album_info_card_backup_album_included": "ZAHRNUTO", "album_info_card_backup_album_included": "ZAHRNUTO",
"album_thumbnail_card_item": "1 položka", "album_thumbnail_card_item": "1 položka",
"album_thumbnail_card_items": "{} položek", "album_thumbnail_card_items": "{} položek",
"album_thumbnail_card_shared": "Sdíleno", "album_thumbnail_card_shared": " · Sdíleno",
"album_thumbnail_owned": "Vlastní", "album_thumbnail_owned": "Vlastní",
"album_thumbnail_shared_by": "Sdílel(a) {}", "album_thumbnail_shared_by": "Sdílel(a) {}",
"album_viewer_appbar_share_delete": "Odstranit album", "album_viewer_appbar_share_delete": "Odstranit album",
@@ -23,9 +23,13 @@
"album_viewer_appbar_share_err_title": "Nepodařilo se změnit název alba", "album_viewer_appbar_share_err_title": "Nepodařilo se změnit název alba",
"album_viewer_appbar_share_leave": "Opustit album", "album_viewer_appbar_share_leave": "Opustit album",
"album_viewer_appbar_share_remove": "Odstranit z alba", "album_viewer_appbar_share_remove": "Odstranit z alba",
"album_viewer_appbar_share_to": "Sdílet na",
"album_viewer_page_share_add_users": "Přidat uživatele", "album_viewer_page_share_add_users": "Přidat uživatele",
"all_people_page_title": "Lidé", "all_people_page_title": "Lidé",
"all_videos_page_title": "Videa", "all_videos_page_title": "Videa",
"app_bar_signout_dialog_content": "Určitě se chcete odhlásit?",
"app_bar_signout_dialog_ok": "Ano",
"app_bar_signout_dialog_title": "Odhlásit se",
"archive_page_no_archived_assets": "Nebyla nalezena žádná archivovaná média", "archive_page_no_archived_assets": "Nebyla nalezena žádná archivovaná média",
"archive_page_title": "Archív ({})", "archive_page_title": "Archív ({})",
"asset_list_layout_settings_dynamic_layout_title": "Dynamické rozložení", "asset_list_layout_settings_dynamic_layout_title": "Dynamické rozložení",
@@ -44,11 +48,11 @@
"backup_all": "Vše", "backup_all": "Vše",
"backup_background_service_backup_failed_message": "Zálohování médií selhalo. Zkouším to znovu...", "backup_background_service_backup_failed_message": "Zálohování médií selhalo. Zkouším to znovu...",
"backup_background_service_connection_failed_message": "Nepodařilo se připojit k serveru. Zkouším to znovu...", "backup_background_service_connection_failed_message": "Nepodařilo se připojit k serveru. Zkouším to znovu...",
"backup_background_service_current_upload_notification": "Zálohování {}", "backup_background_service_current_upload_notification": "Nahrávání {}",
"backup_background_service_default_notification": "Kontrola nových médií…", "backup_background_service_default_notification": "Kontrola nových médií…",
"backup_background_service_error_title": "Chyba zálohování", "backup_background_service_error_title": "Chyba zálohování",
"backup_background_service_in_progress_notification": "Zálohování vašich médií...", "backup_background_service_in_progress_notification": "Zálohování vašich médií...",
"backup_background_service_upload_failure_notification": "Nepodařilo se zálohovat {}", "backup_background_service_upload_failure_notification": "Nepodařilo se nahrát {}",
"backup_controller_page_albums": "Zálohovaná alba", "backup_controller_page_albums": "Zálohovaná alba",
"backup_controller_page_background_app_refresh_disabled_content": "Povolte obnovení aplikace na pozadí v Nastavení > Obecné > Obnovení aplikace na pozadí, abyste mohli používat zálohování na pozadí.", "backup_controller_page_background_app_refresh_disabled_content": "Povolte obnovení aplikace na pozadí v Nastavení > Obecné > Obnovení aplikace na pozadí, abyste mohli používat zálohování na pozadí.",
"backup_controller_page_background_app_refresh_disabled_title": " Obnovování aplikací na pozadí je vypnuté", "backup_controller_page_background_app_refresh_disabled_title": " Obnovování aplikací na pozadí je vypnuté",
@@ -91,14 +95,14 @@
"backup_controller_page_total_sub": "Všechny jedinečné fotografie a videa z vybraných alb", "backup_controller_page_total_sub": "Všechny jedinečné fotografie a videa z vybraných alb",
"backup_controller_page_turn_off": "Vypnout zálohování na popředí", "backup_controller_page_turn_off": "Vypnout zálohování na popředí",
"backup_controller_page_turn_on": "Povolit zálohování na popředí", "backup_controller_page_turn_on": "Povolit zálohování na popředí",
"backup_controller_page_uploading_file_info": "Informace o zálohovaném souboru", "backup_controller_page_uploading_file_info": "Informace o nahraném souboru",
"backup_err_only_album": "Nelze odstranit jediné vybrané album", "backup_err_only_album": "Nelze odstranit jediné vybrané album",
"backup_info_card_assets": "položek", "backup_info_card_assets": "položek",
"backup_manual_cancelled": "Zrušeno", "backup_manual_cancelled": "Zrušeno",
"backup_manual_failed": "Selhalo", "backup_manual_failed": "Selhalo",
"backup_manual_in_progress": "Zálohování již probíhá. Zkuste to znovu později", "backup_manual_in_progress": "Nahrávání již probíhá. Zkuste to znovu později",
"backup_manual_success": "Úspěch", "backup_manual_success": "Úspěch",
"backup_manual_title": "Stav zálohování", "backup_manual_title": "Stav nahrávání",
"cache_settings_album_thumbnails": "Náhledy stránek knihovny (položek {})", "cache_settings_album_thumbnails": "Náhledy stránek knihovny (položek {})",
"cache_settings_clear_cache_button": "Vymazat vyrovnávací paměť", "cache_settings_clear_cache_button": "Vymazat vyrovnávací paměť",
"cache_settings_clear_cache_button_title": "Vymaže vyrovnávací paměť aplikace. To výrazně ovlivní výkon aplikace, dokud se vyrovnávací paměť neobnoví.", "cache_settings_clear_cache_button_title": "Vymaže vyrovnávací paměť aplikace. To výrazně ovlivní výkon aplikace, dokud se vyrovnávací paměť neobnoví.",
@@ -111,6 +115,8 @@
"cache_settings_statistics_title": "Použití vyrovnávací paměti", "cache_settings_statistics_title": "Použití vyrovnávací paměti",
"cache_settings_subtitle": "Ovládání chování mobilní aplikace Immich v mezipaměti", "cache_settings_subtitle": "Ovládání chování mobilní aplikace Immich v mezipaměti",
"cache_settings_thumbnail_size": "Velikost vyrovnávací paměti náhledů (položek {})", "cache_settings_thumbnail_size": "Velikost vyrovnávací paměti náhledů (položek {})",
"cache_settings_tile_subtitle": "Ovládání chování místního úložiště",
"cache_settings_tile_title": "Místní úložiště",
"cache_settings_title": "Nastavení vyrovnávací paměti", "cache_settings_title": "Nastavení vyrovnávací paměti",
"change_password_form_confirm_password": "Potvrďte heslo", "change_password_form_confirm_password": "Potvrďte heslo",
"change_password_form_description": "Dobrý den, {firstName} {lastName},\n\nje to buď poprvé, co se přihlašujete do systému, nebo byl vytvořen požadavek na změnu hesla. Níže zadejte nové heslo.", "change_password_form_description": "Dobrý den, {firstName} {lastName},\n\nje to buď poprvé, co se přihlašujete do systému, nebo byl vytvořen požadavek na změnu hesla. Níže zadejte nové heslo.",
@@ -130,10 +136,10 @@
"control_bottom_app_bar_delete": "Vymazat", "control_bottom_app_bar_delete": "Vymazat",
"control_bottom_app_bar_favorite": "Oblíbené", "control_bottom_app_bar_favorite": "Oblíbené",
"control_bottom_app_bar_share": "Sdílet", "control_bottom_app_bar_share": "Sdílet",
"control_bottom_app_bar_share_to": "Share To", "control_bottom_app_bar_share_to": "Sdílet v",
"control_bottom_app_bar_stack": "Stack", "control_bottom_app_bar_stack": "Zásobník",
"control_bottom_app_bar_unarchive": "Odarchivovat", "control_bottom_app_bar_unarchive": "Odarchivovat",
"control_bottom_app_bar_upload": "Upload", "control_bottom_app_bar_upload": "Nahrát",
"create_album_page_untitled": "Bez názvu", "create_album_page_untitled": "Bez názvu",
"create_shared_album_page_create": "Vytvořit", "create_shared_album_page_create": "Vytvořit",
"create_shared_album_page_share": "Sdílet", "create_shared_album_page_share": "Sdílet",
@@ -148,8 +154,8 @@
"delete_dialog_cancel": "Zrušit", "delete_dialog_cancel": "Zrušit",
"delete_dialog_ok": "Vymazat", "delete_dialog_ok": "Vymazat",
"delete_dialog_title": "Vymazat trvale", "delete_dialog_title": "Vymazat trvale",
"delete_shared_link_dialog_content": "Are you sure you want to delete this shared link?", "delete_shared_link_dialog_content": "Opravdu chcete tento odkaz ke sdílení odstranit?",
"delete_shared_link_dialog_title": "Delete Shared Link", "delete_shared_link_dialog_title": "Odstranit sdílený odkaz",
"description_input_hint_text": "Přidat popis...", "description_input_hint_text": "Přidat popis...",
"description_input_submit_error": "Chyba aktualizace popisu, další podrobnosti najdete v logu", "description_input_submit_error": "Chyba aktualizace popisu, další podrobnosti najdete v logu",
"exif_bottom_sheet_description": "Přidat popis...", "exif_bottom_sheet_description": "Přidat popis...",
@@ -164,14 +170,19 @@
"home_page_add_to_album_conflicts": "Přidáno {added} položek do alba {album}. {failed} položek již je v albu.", "home_page_add_to_album_conflicts": "Přidáno {added} položek do alba {album}. {failed} položek již je v albu.",
"home_page_add_to_album_err_local": "Zatím není možné přidat lokální média do alb, přeskakuji", "home_page_add_to_album_err_local": "Zatím není možné přidat lokální média do alb, přeskakuji",
"home_page_add_to_album_success": "Přidány položky {added} do alba {album}.", "home_page_add_to_album_success": "Přidány položky {added} do alba {album}.",
"home_page_album_err_partner": "Položky partnera nelze zatím přidat do alba, přeskakuji",
"home_page_archive_err_local": "Zatím nemohu archivovat lokální média, přeskakuji", "home_page_archive_err_local": "Zatím nemohu archivovat lokální média, přeskakuji",
"home_page_archive_err_partner": "Položky partnera nelze archivovat, přeskakuji",
"home_page_building_timeline": "Vytváření časové osy", "home_page_building_timeline": "Vytváření časové osy",
"home_page_delete_err_partner": "Položky partnera nelze odstranit, přeskakuji",
"home_page_favorite_err_local": "Zatím není možné zařadit lokální média mezi oblíbená, přeskakuji", "home_page_favorite_err_local": "Zatím není možné zařadit lokální média mezi oblíbená, přeskakuji",
"home_page_favorite_err_partner": "Položky partnera nelze označit jako oblíbené, přeskakuji",
"home_page_first_time_notice": "Pokud aplikaci používáte poprvé, nezapomeňte si vybrat zálohovaná alba, aby se na časové ose mohly nacházet fotografie a videa z vybraných alb.", "home_page_first_time_notice": "Pokud aplikaci používáte poprvé, nezapomeňte si vybrat zálohovaná alba, aby se na časové ose mohly nacházet fotografie a videa z vybraných alb.",
"home_page_upload_err_limit": "Lze zálohovat nejvýše 30 položek najednou, přeskakuji", "home_page_share_err_local": "Can not share local assets via link, skipping",
"home_page_upload_err_limit": "Lze nahrát nejvýše 30 položek najednou, přeskakuji",
"image_viewer_page_state_provider_download_error": "Chyba stahování", "image_viewer_page_state_provider_download_error": "Chyba stahování",
"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": "Share Error", "image_viewer_page_state_provider_share_error": "Chyba sdílení",
"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í",
@@ -179,8 +190,8 @@
"library_page_new_album": "Nové album", "library_page_new_album": "Nové album",
"library_page_sharing": "Sdílení", "library_page_sharing": "Sdílení",
"library_page_sort_created": "Naposledy vytvořené", "library_page_sort_created": "Naposledy vytvořené",
"library_page_sort_last_modified": "Last modified", "library_page_sort_last_modified": "Naposledy upraveno",
"library_page_sort_most_recent_photo": "Most recent photo", "library_page_sort_most_recent_photo": "Nejnovější fotografie",
"library_page_sort_title": "Podle názvu alba", "library_page_sort_title": "Podle názvu alba",
"login_disabled": "Přihlášení bylo zakázáno", "login_disabled": "Přihlášení bylo zakázáno",
"login_form_api_exception": "Výjimka API. Zkontrolujte URL serveru a zkuste to znovu.", "login_form_api_exception": "Výjimka API. Zkontrolujte URL serveru a zkuste to znovu.",
@@ -218,7 +229,7 @@
"map_settings_dialog_cancel": "Zrušit", "map_settings_dialog_cancel": "Zrušit",
"map_settings_dialog_save": "Uložit", "map_settings_dialog_save": "Uložit",
"map_settings_dialog_title": "Nastavení map", "map_settings_dialog_title": "Nastavení map",
"map_settings_include_show_archived": "Include Archived", "map_settings_include_show_archived": "Zahrnout archivované",
"map_settings_only_relative_range": "Rozsah data", "map_settings_only_relative_range": "Rozsah data",
"map_settings_only_show_favorites": "Zobrazit pouze oblíbené", "map_settings_only_show_favorites": "Zobrazit pouze oblíbené",
"map_zoom_to_see_photos": "Oddálit pro zobrazení fotografií", "map_zoom_to_see_photos": "Oddálit pro zobrazení fotografií",
@@ -239,6 +250,7 @@
"partner_page_stop_sharing_content": "{} již nebude mít přístup k vašim fotografiím.", "partner_page_stop_sharing_content": "{} již nebude mít přístup k vašim fotografiím.",
"partner_page_stop_sharing_title": "Přestat sdílet vaše fotografie?", "partner_page_stop_sharing_title": "Přestat sdílet vaše fotografie?",
"partner_page_title": "Partner", "partner_page_title": "Partner",
"permission_onboarding_back": "Back",
"permission_onboarding_continue_anyway": "Přesto pokračovat", "permission_onboarding_continue_anyway": "Přesto pokračovat",
"permission_onboarding_get_started": "Začít", "permission_onboarding_get_started": "Začít",
"permission_onboarding_go_to_settings": "Přejít do nastavení", "permission_onboarding_go_to_settings": "Přejít do nastavení",
@@ -250,9 +262,11 @@
"permission_onboarding_request": "Immich potřebuje přístup k zobrazení vašich fotek a videí.", "permission_onboarding_request": "Immich potřebuje přístup k zobrazení vašich fotek a videí.",
"profile_drawer_app_logs": "Logy", "profile_drawer_app_logs": "Logy",
"profile_drawer_client_server_up_to_date": "Klient a server jsou aktuální", "profile_drawer_client_server_up_to_date": "Klient a server jsou aktuální",
"profile_drawer_documentation": "Dokumentace",
"profile_drawer_github": "GitHub",
"profile_drawer_settings": "Nastavení", "profile_drawer_settings": "Nastavení",
"profile_drawer_sign_out": "Odhlásit se", "profile_drawer_sign_out": "Odhlásit se",
"profile_drawer_trash": "Trash", "profile_drawer_trash": "Vyhodit",
"recently_added_page_title": "Nedávno přidané", "recently_added_page_title": "Nedávno přidané",
"search_bar_hint": "Prohledejte své fotky", "search_bar_hint": "Prohledejte své fotky",
"search_page_categories": "Kategorie", "search_page_categories": "Kategorie",
@@ -276,6 +290,7 @@
"select_user_for_sharing_page_err_album": "Nepodařilo se vytvořit album", "select_user_for_sharing_page_err_album": "Nepodařilo se vytvořit album",
"select_user_for_sharing_page_share_suggestions": "Návrhy", "select_user_for_sharing_page_share_suggestions": "Návrhy",
"server_info_box_app_version": "Verze aplikace", "server_info_box_app_version": "Verze aplikace",
"server_info_box_server_url": "URL serveru",
"server_info_box_server_version": "Verze serveru", "server_info_box_server_version": "Verze serveru",
"setting_image_viewer_help": "V prohlížeči detailů se nejprve načte malá miniatura, poté se načte náhled střední velikosti (je-li povolen) a nakonec se načte originál (je-li povolen).", "setting_image_viewer_help": "V prohlížeči detailů se nejprve načte malá miniatura, poté se načte náhled střední velikosti (je-li povolen) a nakonec se načte originál (je-li povolen).",
"setting_image_viewer_original_subtitle": "Umožňuje načíst původní obrázek v plném rozlišení (velký!). Zakázat pro snížení využití dat (v síti i v mezipaměti zařízení).", "setting_image_viewer_original_subtitle": "Umožňuje načíst původní obrázek v plném rozlišení (velký!). Zakázat pro snížení využití dat (v síti i v mezipaměti zařízení).",
@@ -288,11 +303,11 @@
"setting_notifications_notify_minutes": "{} minut", "setting_notifications_notify_minutes": "{} minut",
"setting_notifications_notify_never": "nikdy", "setting_notifications_notify_never": "nikdy",
"setting_notifications_notify_seconds": "{} sekundy", "setting_notifications_notify_seconds": "{} sekundy",
"setting_notifications_single_progress_subtitle": "Podrobné informace o průběhu zálohování položky", "setting_notifications_single_progress_subtitle": "Podrobné informace o průběhu nahrávání položky",
"setting_notifications_single_progress_title": "Zobrazit průběh detailů zálohování na pozadí", "setting_notifications_single_progress_title": "Zobrazit průběh detailů zálohování na pozadí",
"setting_notifications_subtitle": "Přizpůsobení předvoleb oznámení", "setting_notifications_subtitle": "Přizpůsobení předvoleb oznámení",
"setting_notifications_title": "Oznámení", "setting_notifications_title": "Oznámení",
"setting_notifications_total_progress_subtitle": "Celkový průběh zálohování (hotovo/celkově)", "setting_notifications_total_progress_subtitle": "Celkový průběh nahrání (hotovo/celkově)",
"setting_notifications_total_progress_title": "Zobrazit celkový průběh zálohování na pozadí", "setting_notifications_total_progress_title": "Zobrazit celkový průběh zálohování na pozadí",
"setting_pages_app_bar_settings": "Nastavení", "setting_pages_app_bar_settings": "Nastavení",
"settings_require_restart": "Pro použití tohoto nastavení restartujte Immich", "settings_require_restart": "Pro použití tohoto nastavení restartujte Immich",
@@ -300,28 +315,37 @@
"share_add_photos": "Přidat fotografie", "share_add_photos": "Přidat fotografie",
"share_add_title": "Přidat název", "share_add_title": "Přidat název",
"share_create_album": "Vytvořit album", "share_create_album": "Vytvořit album",
"shared_album_activities_input_disable": "Komentář je vypnutý",
"shared_album_activities_input_hint": "Řekněte něco",
"shared_album_activity_remove_content": "Chcete odstranit tuto aktivitu?",
"shared_album_activity_remove_title": "Odstranit aktivitu",
"shared_album_activity_setting_subtitle": "Nechte ostatní reagovat",
"shared_album_activity_setting_title": "Komentáře a lajky",
"share_dialog_preparing": "Připravuji...", "share_dialog_preparing": "Připravuji...",
"shared_link_app_bar_title": "Shared Links", "shared_link_app_bar_title": "Sdílené odkazy",
"shared_link_create_app_bar_title": "Create link to share", "shared_link_create_app_bar_title": "Vytvořit odkaz pro sdílení",
"shared_link_create_info": "Let anyone with the link see the selected photo(s)", "shared_link_create_info": "Umožnit každému, kdo má odkaz, zobrazit vybrané fotografie",
"shared_link_create_submit_button": "Create link", "shared_link_create_submit_button": "Vytvořit odkaz",
"shared_link_edit_allow_download": "Allow public user to download", "shared_link_edit_allow_download": "Povolit veřejným uživatelům stahovat",
"shared_link_edit_allow_upload": "Allow public user to upload", "shared_link_edit_allow_upload": "Povolit veřejným uživatelům nahrávat",
"shared_link_edit_app_bar_title": "Edit link", "shared_link_edit_app_bar_title": "Upravit odkaz",
"shared_link_edit_change_expiry": "Change expiration time", "shared_link_edit_change_expiry": "Změnit dobu platnosti",
"shared_link_edit_description": "Description", "shared_link_edit_description": "Popis",
"shared_link_edit_description_hint": "Enter the share description", "shared_link_edit_description_hint": "Zadejte popis sdílení",
"shared_link_edit_show_meta": "Show metadata", "shared_link_edit_expire_after": "Platnost vyprší po",
"shared_link_edit_submit_button": "Update link", "shared_link_edit_password": "Heslo",
"shared_link_empty": "You don't have any shared links", "shared_link_edit_password_hint": "Zadejte heslo pro sdílení",
"shared_link_manage_links": "Manage Shared links", "shared_link_edit_show_meta": "Zobrazit metadata",
"share_done": "Done", "shared_link_edit_submit_button": "Aktualizovat odkaz",
"shared_link_empty": "Nemáte žádné sdílené odkazy",
"shared_link_manage_links": "Spravovat sdílené odkazy",
"share_done": "Hotovo",
"share_invite": "Pozvat do alba", "share_invite": "Pozvat do alba",
"sharing_page_album": "Sdílená alba", "sharing_page_album": "Sdílená alba",
"sharing_page_description": "Vytvářejte sdílená alba a sdílejte fotografie a videa s lidmi ve vaší síti.", "sharing_page_description": "Vytvářejte sdílená alba a sdílejte fotografie a videa s lidmi ve vaší síti.",
"sharing_page_empty_list": "PRÁZDNÝ SEZNAM", "sharing_page_empty_list": "PRÁZDNÝ SEZNAM",
"sharing_silver_appbar_create_shared_album": "Vytvořit sdílené album", "sharing_silver_appbar_create_shared_album": "Vytvořit sdílené album",
"sharing_silver_appbar_shared_links": "Shared links", "sharing_silver_appbar_shared_links": "Sdílené odkazy",
"sharing_silver_appbar_share_partner": "Sdílet s partnerem", "sharing_silver_appbar_share_partner": "Sdílet s partnerem",
"tab_controller_nav_library": "Knihovna", "tab_controller_nav_library": "Knihovna",
"tab_controller_nav_photos": "Fotografie", "tab_controller_nav_photos": "Fotografie",
@@ -338,29 +362,29 @@
"theme_setting_three_stage_loading_subtitle": "Třístupňové načítání může zvýšit výkonnost načítání, ale vede k výrazně vyššímu zatížení sítě.", "theme_setting_three_stage_loading_subtitle": "Třístupňové načítání může zvýšit výkonnost načítání, ale vede k výrazně vyššímu zatížení sítě.",
"theme_setting_three_stage_loading_title": "Povolení třístupňového načítání", "theme_setting_three_stage_loading_title": "Povolení třístupňového načítání",
"translated_text_options": "Možnosti", "translated_text_options": "Možnosti",
"trash_page_delete": "Delete", "trash_page_delete": "Smazat",
"trash_page_delete_all": "Delete All", "trash_page_delete_all": "Smazat všechny",
"trash_page_empty_trash_btn": "Empty trash", "trash_page_empty_trash_btn": "Vysypat koš",
"trash_page_empty_trash_dialog_content": "Do you want to empty your trashed assets? These items will be permanently removed from Immich", "trash_page_empty_trash_dialog_content": "Chcete vyprázdnit svoje vyhozené položky? Tyto položky budou trvale odstraněny z aplikace",
"trash_page_empty_trash_dialog_ok": "Ok", "trash_page_empty_trash_dialog_ok": "Ok",
"trash_page_info": "Trashed items will be permanently deleted after {} days", "trash_page_info": "Vyhozené položky budou trvale odstraněny po {} dnech",
"trash_page_no_assets": "No trashed assets", "trash_page_no_assets": "Žádné vyhozené položky",
"trash_page_restore": "Restore", "trash_page_restore": "Obnovit",
"trash_page_restore_all": "Restore All", "trash_page_restore_all": "Obnovit všechny",
"trash_page_select_assets_btn": "Select assets", "trash_page_select_assets_btn": "Vybrat položky",
"trash_page_select_btn": "Select", "trash_page_select_btn": "Vybrat",
"trash_page_title": "Trash ({})", "trash_page_title": "Koš ({})",
"upload_dialog_cancel": "Zrušit", "upload_dialog_cancel": "Zrušit",
"upload_dialog_info": "Chcete zálohovat vybrané položky na server?", "upload_dialog_info": "Chcete zálohovat vybrané položky na server?",
"upload_dialog_ok": "Zálohovat", "upload_dialog_ok": "Nahrát",
"upload_dialog_title": "Zálohovat položku", "upload_dialog_title": "Nahrát položku",
"version_announcement_overlay_ack": "Potvrdit", "version_announcement_overlay_ack": "Potvrdit",
"version_announcement_overlay_release_notes": "poznámky k vydání", "version_announcement_overlay_release_notes": "poznámky k vydání",
"version_announcement_overlay_text_1": "Ahoj, k dispozici je nová verze", "version_announcement_overlay_text_1": "Ahoj, k dispozici je nová verze",
"version_announcement_overlay_text_2": "najděte si čas na návštěvu ", "version_announcement_overlay_text_2": "najděte si čas na návštěvu ",
"version_announcement_overlay_text_3": " a ujistěte se, že vaše konfigurace docker-compose a .env je aktuální, abyste předešli nesprávné konfiguraci, zvláště pokud používáte WatchTower nebo jakýkoli mechanismus, který podporuje automatické aktualizace serverových aplikací.", "version_announcement_overlay_text_3": " a ujistěte se, že vaše konfigurace docker-compose a .env je aktuální, abyste předešli nesprávné konfiguraci, zvláště pokud používáte WatchTower nebo jakýkoli mechanismus, který podporuje automatické aktualizace serverových aplikací.",
"version_announcement_overlay_title": "K dispozici je nová verze serveru \uD83C\uDF89", "version_announcement_overlay_title": "K dispozici je nová verze serveru \uD83C\uDF89",
"viewer_remove_from_stack": "Remove from Stack", "viewer_remove_from_stack": "Odstranit ze zásobníku",
"viewer_stack_use_as_main_asset": "Use as Main Asset", "viewer_stack_use_as_main_asset": "Použít jako hlavní položku",
"viewer_unstack": "Un-Stack" "viewer_unstack": "Rozbalit zásobník"
} }
+63 -39
View File
@@ -23,9 +23,13 @@
"album_viewer_appbar_share_err_title": "Fejlede i at ændre albumtitel", "album_viewer_appbar_share_err_title": "Fejlede i at ændre albumtitel",
"album_viewer_appbar_share_leave": "Forlad album", "album_viewer_appbar_share_leave": "Forlad album",
"album_viewer_appbar_share_remove": "Fjern fra album", "album_viewer_appbar_share_remove": "Fjern fra album",
"album_viewer_appbar_share_to": "Share To",
"album_viewer_page_share_add_users": "Tilføj brugere", "album_viewer_page_share_add_users": "Tilføj brugere",
"all_people_page_title": "Personer", "all_people_page_title": "Personer",
"all_videos_page_title": "Videoer", "all_videos_page_title": "Videoer",
"app_bar_signout_dialog_content": "Are you sure you wanna sign out?",
"app_bar_signout_dialog_ok": "Yes",
"app_bar_signout_dialog_title": "Sign out",
"archive_page_no_archived_assets": "Ingen arkiverede elementer blev fundet", "archive_page_no_archived_assets": "Ingen arkiverede elementer blev fundet",
"archive_page_title": "Arkivér ({})", "archive_page_title": "Arkivér ({})",
"asset_list_layout_settings_dynamic_layout_title": "Dynamisk layout", "asset_list_layout_settings_dynamic_layout_title": "Dynamisk layout",
@@ -111,6 +115,8 @@
"cache_settings_statistics_title": "Cacheforbrug", "cache_settings_statistics_title": "Cacheforbrug",
"cache_settings_subtitle": "Håndter cache-adfærden for Immich-appen.", "cache_settings_subtitle": "Håndter cache-adfærden for Immich-appen.",
"cache_settings_thumbnail_size": "Størrelse af miniaturebillede cache ({} elementer)", "cache_settings_thumbnail_size": "Størrelse af miniaturebillede cache ({} elementer)",
"cache_settings_tile_subtitle": "Control the local storage behaviour",
"cache_settings_tile_title": "Local Storage",
"cache_settings_title": "Cache-indstillinger", "cache_settings_title": "Cache-indstillinger",
"change_password_form_confirm_password": "Bekræft kodeord", "change_password_form_confirm_password": "Bekræft kodeord",
"change_password_form_description": "Hej {firstName} {lastName},\n\nDette er enten første gang du logger ind eller også er der lavet en anmodning om at ændre dit kodeord. Indtast venligst et nyt kodeord nedenfor.", "change_password_form_description": "Hej {firstName} {lastName},\n\nDette er enten første gang du logger ind eller også er der lavet en anmodning om at ændre dit kodeord. Indtast venligst et nyt kodeord nedenfor.",
@@ -130,8 +136,8 @@
"control_bottom_app_bar_delete": "Slet", "control_bottom_app_bar_delete": "Slet",
"control_bottom_app_bar_favorite": "Favorit", "control_bottom_app_bar_favorite": "Favorit",
"control_bottom_app_bar_share": "Del", "control_bottom_app_bar_share": "Del",
"control_bottom_app_bar_share_to": "Share To", "control_bottom_app_bar_share_to": "Del til",
"control_bottom_app_bar_stack": "Stack", "control_bottom_app_bar_stack": "Stak",
"control_bottom_app_bar_unarchive": "Afakivér", "control_bottom_app_bar_unarchive": "Afakivér",
"control_bottom_app_bar_upload": "Upload", "control_bottom_app_bar_upload": "Upload",
"create_album_page_untitled": "Uden titel", "create_album_page_untitled": "Uden titel",
@@ -148,8 +154,8 @@
"delete_dialog_cancel": "Annuller", "delete_dialog_cancel": "Annuller",
"delete_dialog_ok": "Slet", "delete_dialog_ok": "Slet",
"delete_dialog_title": "Slet permanent", "delete_dialog_title": "Slet permanent",
"delete_shared_link_dialog_content": "Are you sure you want to delete this shared link?", "delete_shared_link_dialog_content": "Er du sikker på, du vil slette dette delte link?",
"delete_shared_link_dialog_title": "Delete Shared Link", "delete_shared_link_dialog_title": "Slet delt link",
"description_input_hint_text": "Tilføj en beskrivelse...", "description_input_hint_text": "Tilføj en beskrivelse...",
"description_input_submit_error": "Fejl med at opdatere beskrivelsen. Tjek loggen for flere detaljer", "description_input_submit_error": "Fejl med at opdatere beskrivelsen. Tjek loggen for flere detaljer",
"exif_bottom_sheet_description": "Tilføj beskrivelse...", "exif_bottom_sheet_description": "Tilføj beskrivelse...",
@@ -164,14 +170,19 @@
"home_page_add_to_album_conflicts": "Tilføjede {added} elementer til album {album}. {failed} elementer er allerede i albummet.", "home_page_add_to_album_conflicts": "Tilføjede {added} elementer til album {album}. {failed} elementer er allerede i albummet.",
"home_page_add_to_album_err_local": "Kan endnu ikke tilføje lokale elementer til album. Springer over..", "home_page_add_to_album_err_local": "Kan endnu ikke tilføje lokale elementer til album. Springer over..",
"home_page_add_to_album_success": "Tilføjede {added} elementer til album {album}.", "home_page_add_to_album_success": "Tilføjede {added} elementer til album {album}.",
"home_page_album_err_partner": "Can not add partner assets to an album yet, skipping",
"home_page_archive_err_local": "Kan ikke arkivere lokalt element endnu.. Springer over", "home_page_archive_err_local": "Kan ikke arkivere lokalt element endnu.. Springer over",
"home_page_archive_err_partner": "Can not archive partner assets, skipping",
"home_page_building_timeline": "Bygger tidslinjen", "home_page_building_timeline": "Bygger tidslinjen",
"home_page_delete_err_partner": "Can not delete partner assets, skipping",
"home_page_favorite_err_local": "Kan endnu ikke gøre lokale elementer til favoritter. Springer over..", "home_page_favorite_err_local": "Kan endnu ikke gøre lokale elementer til favoritter. Springer over..",
"home_page_favorite_err_partner": "Can not favorite partner assets yet, skipping",
"home_page_first_time_notice": "Hvis det er din første gang i appen, bedes du vælge en sikkerhedskopi af albummer så tidlinjen kan blive fyldt med billeder og videoer fra albummerne.", "home_page_first_time_notice": "Hvis det er din første gang i appen, bedes du vælge en sikkerhedskopi af albummer så tidlinjen kan blive fyldt med billeder og videoer fra albummerne.",
"home_page_share_err_local": "Can not share local assets via link, skipping",
"home_page_upload_err_limit": "Det er kun muligt at lave sikkerhedskopi af 30 elementer ad gangen. Springer over", "home_page_upload_err_limit": "Det er kun muligt at lave sikkerhedskopi af 30 elementer ad gangen. Springer over",
"image_viewer_page_state_provider_download_error": "Fejl ved download", "image_viewer_page_state_provider_download_error": "Fejl ved download",
"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": "Share Error", "image_viewer_page_state_provider_share_error": "Delingsfejl",
"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",
@@ -179,8 +190,8 @@
"library_page_new_album": "Nyt album", "library_page_new_album": "Nyt album",
"library_page_sharing": "Delte", "library_page_sharing": "Delte",
"library_page_sort_created": "Senest oprettet", "library_page_sort_created": "Senest oprettet",
"library_page_sort_last_modified": "Last modified", "library_page_sort_last_modified": "Sidst redigeret",
"library_page_sort_most_recent_photo": "Most recent photo", "library_page_sort_most_recent_photo": "Seneste billede",
"library_page_sort_title": "Albumtitel", "library_page_sort_title": "Albumtitel",
"login_disabled": "Login er blevet deaktiveret", "login_disabled": "Login er blevet deaktiveret",
"login_form_api_exception": "API-undtagelse. Tjek serverens URL og prøv igen. ", "login_form_api_exception": "API-undtagelse. Tjek serverens URL og prøv igen. ",
@@ -218,7 +229,7 @@
"map_settings_dialog_cancel": "Annuller", "map_settings_dialog_cancel": "Annuller",
"map_settings_dialog_save": "Gem", "map_settings_dialog_save": "Gem",
"map_settings_dialog_title": "Kortindstillinger", "map_settings_dialog_title": "Kortindstillinger",
"map_settings_include_show_archived": "Include Archived", "map_settings_include_show_archived": "Inkluder arkiveret",
"map_settings_only_relative_range": "Datointerval", "map_settings_only_relative_range": "Datointerval",
"map_settings_only_show_favorites": "Vis kun favoritter", "map_settings_only_show_favorites": "Vis kun favoritter",
"map_zoom_to_see_photos": "Zoom ud for at vise billeder", "map_zoom_to_see_photos": "Zoom ud for at vise billeder",
@@ -239,6 +250,7 @@
"partner_page_stop_sharing_content": "{} vil ikke længere have adgang til dine billeder.", "partner_page_stop_sharing_content": "{} vil ikke længere have adgang til dine billeder.",
"partner_page_stop_sharing_title": "Stop med at dele dine billeder?", "partner_page_stop_sharing_title": "Stop med at dele dine billeder?",
"partner_page_title": "Partner", "partner_page_title": "Partner",
"permission_onboarding_back": "Back",
"permission_onboarding_continue_anyway": "Fortsæt alligevel", "permission_onboarding_continue_anyway": "Fortsæt alligevel",
"permission_onboarding_get_started": "Kom i gang", "permission_onboarding_get_started": "Kom i gang",
"permission_onboarding_go_to_settings": "Gå til indstillinger", "permission_onboarding_go_to_settings": "Gå til indstillinger",
@@ -250,9 +262,11 @@
"permission_onboarding_request": "Immich kræver tilliadelse til at se dine billeder og videoer.", "permission_onboarding_request": "Immich kræver tilliadelse til at se dine billeder og videoer.",
"profile_drawer_app_logs": "Log", "profile_drawer_app_logs": "Log",
"profile_drawer_client_server_up_to_date": "Klient og server er ajour", "profile_drawer_client_server_up_to_date": "Klient og server er ajour",
"profile_drawer_documentation": "Documentation",
"profile_drawer_github": "GitHub",
"profile_drawer_settings": "Indstillinger", "profile_drawer_settings": "Indstillinger",
"profile_drawer_sign_out": "Log ud", "profile_drawer_sign_out": "Log ud",
"profile_drawer_trash": "Trash", "profile_drawer_trash": "Papirkurv",
"recently_added_page_title": "Nyligt tilføjet", "recently_added_page_title": "Nyligt tilføjet",
"search_bar_hint": "Søg i dine billeder", "search_bar_hint": "Søg i dine billeder",
"search_page_categories": "Kategorier", "search_page_categories": "Kategorier",
@@ -276,6 +290,7 @@
"select_user_for_sharing_page_err_album": "Fejlede i at oprette et nyt album", "select_user_for_sharing_page_err_album": "Fejlede i at oprette et nyt album",
"select_user_for_sharing_page_share_suggestions": "Anbefalinger", "select_user_for_sharing_page_share_suggestions": "Anbefalinger",
"server_info_box_app_version": "Applikationsversion", "server_info_box_app_version": "Applikationsversion",
"server_info_box_server_url": "Server URL",
"server_info_box_server_version": "Serverversion ", "server_info_box_server_version": "Serverversion ",
"setting_image_viewer_help": "Detaljeret visning indlæser miniaturebilleder først. Herefter indlæses mediumstørrelse forhåndsvisning af billedet (hvis dette er slået til), for til sidst at vise originalen (hvis dette er slået til).", "setting_image_viewer_help": "Detaljeret visning indlæser miniaturebilleder først. Herefter indlæses mediumstørrelse forhåndsvisning af billedet (hvis dette er slået til), for til sidst at vise originalen (hvis dette er slået til).",
"setting_image_viewer_original_subtitle": "Slå indlæsning af originalbillede i fuld størrelse til (stort!). Deaktiver for at reducere dataforbruget (både på netværket og for enhedscache).", "setting_image_viewer_original_subtitle": "Slå indlæsning af originalbillede i fuld størrelse til (stort!). Deaktiver for at reducere dataforbruget (både på netværket og for enhedscache).",
@@ -300,28 +315,37 @@
"share_add_photos": "Tilføj billeder", "share_add_photos": "Tilføj billeder",
"share_add_title": "Tilføj en titel", "share_add_title": "Tilføj en titel",
"share_create_album": "Opret album", "share_create_album": "Opret album",
"shared_album_activities_input_disable": "Comment is disabled",
"shared_album_activities_input_hint": "Say something",
"shared_album_activity_remove_content": "Do you want to delete this activity?",
"shared_album_activity_remove_title": "Delete Activity",
"shared_album_activity_setting_subtitle": "Let others respond",
"shared_album_activity_setting_title": "Comments & likes",
"share_dialog_preparing": "Forbereder...", "share_dialog_preparing": "Forbereder...",
"shared_link_app_bar_title": "Shared Links", "shared_link_app_bar_title": "Delte links",
"shared_link_create_app_bar_title": "Create link to share", "shared_link_create_app_bar_title": "Opret link for at dele",
"shared_link_create_info": "Let anyone with the link see the selected photo(s)", "shared_link_create_info": "Lad enhver med linket se de(t) valgte billede(r)",
"shared_link_create_submit_button": "Create link", "shared_link_create_submit_button": "Oprat link",
"shared_link_edit_allow_download": "Allow public user to download", "shared_link_edit_allow_download": "Tillad at en offenlig bruger kan downloade",
"shared_link_edit_allow_upload": "Allow public user to upload", "shared_link_edit_allow_upload": "Tillad at en offentlig bruger kan uploade",
"shared_link_edit_app_bar_title": "Edit link", "shared_link_edit_app_bar_title": "Rediger link",
"shared_link_edit_change_expiry": "Change expiration time", "shared_link_edit_change_expiry": "Ændrer udløbstidspunkt",
"shared_link_edit_description": "Description", "shared_link_edit_description": "Beskrivelse",
"shared_link_edit_description_hint": "Enter the share description", "shared_link_edit_description_hint": "Indtast beskrivelse",
"shared_link_edit_show_meta": "Show metadata", "shared_link_edit_expire_after": "Expire after",
"shared_link_edit_submit_button": "Update link", "shared_link_edit_password": "Password",
"shared_link_empty": "You don't have any shared links", "shared_link_edit_password_hint": "Enter the share password",
"shared_link_manage_links": "Manage Shared links", "shared_link_edit_show_meta": "Vis metadata",
"share_done": "Done", "shared_link_edit_submit_button": "Opdater link",
"shared_link_empty": "Du har endnu ingen delte links",
"shared_link_manage_links": "Håndter delte links",
"share_done": "Færdig",
"share_invite": "Inviter til album", "share_invite": "Inviter til album",
"sharing_page_album": "Delt albums", "sharing_page_album": "Delt albums",
"sharing_page_description": "Opret delte albummer for at dele billeder og video med personer på dit netværk.", "sharing_page_description": "Opret delte albummer for at dele billeder og video med personer på dit netværk.",
"sharing_page_empty_list": "TOM LISTE", "sharing_page_empty_list": "TOM LISTE",
"sharing_silver_appbar_create_shared_album": "Opret delt album", "sharing_silver_appbar_create_shared_album": "Opret delt album",
"sharing_silver_appbar_shared_links": "Shared links", "sharing_silver_appbar_shared_links": "Delte links",
"sharing_silver_appbar_share_partner": "Del med partner", "sharing_silver_appbar_share_partner": "Del med partner",
"tab_controller_nav_library": "Bibliotek", "tab_controller_nav_library": "Bibliotek",
"tab_controller_nav_photos": "Billeder", "tab_controller_nav_photos": "Billeder",
@@ -338,18 +362,18 @@
"theme_setting_three_stage_loading_subtitle": "Tre-trins indlæsning kan øge ydeevnen, men kan ligeledes føre til højere netværksbelastning", "theme_setting_three_stage_loading_subtitle": "Tre-trins indlæsning kan øge ydeevnen, men kan ligeledes føre til højere netværksbelastning",
"theme_setting_three_stage_loading_title": "Slå tre-trins indlæsning til", "theme_setting_three_stage_loading_title": "Slå tre-trins indlæsning til",
"translated_text_options": "Handlinger", "translated_text_options": "Handlinger",
"trash_page_delete": "Delete", "trash_page_delete": "Slet",
"trash_page_delete_all": "Delete All", "trash_page_delete_all": "Slet alt",
"trash_page_empty_trash_btn": "Empty trash", "trash_page_empty_trash_btn": "Tøm papirkurv",
"trash_page_empty_trash_dialog_content": "Do you want to empty your trashed assets? These items will be permanently removed from Immich", "trash_page_empty_trash_dialog_content": "Vil du tømme papirkurven? Disse elementer vil blive permanent fjernet fra Immich",
"trash_page_empty_trash_dialog_ok": "Ok", "trash_page_empty_trash_dialog_ok": "Ok",
"trash_page_info": "Trashed items will be permanently deleted after {} days", "trash_page_info": "Slettede elementer vil blive slettet permanent efter {} dage",
"trash_page_no_assets": "No trashed assets", "trash_page_no_assets": "Ingen slettede elementer",
"trash_page_restore": "Restore", "trash_page_restore": "Gendan",
"trash_page_restore_all": "Restore All", "trash_page_restore_all": "Gendan alt",
"trash_page_select_assets_btn": "Select assets", "trash_page_select_assets_btn": "Vælg elementer",
"trash_page_select_btn": "Select", "trash_page_select_btn": "Vælg",
"trash_page_title": "Trash ({})", "trash_page_title": "Papirkurv ({})",
"upload_dialog_cancel": "Annuller", "upload_dialog_cancel": "Annuller",
"upload_dialog_info": "Vil du sikkerhedskopiere de(t) valgte element(er) til serveren?", "upload_dialog_info": "Vil du sikkerhedskopiere de(t) valgte element(er) til serveren?",
"upload_dialog_ok": "Upload", "upload_dialog_ok": "Upload",
@@ -360,7 +384,7 @@
"version_announcement_overlay_text_2": ". Besøg venligst ", "version_announcement_overlay_text_2": ". Besøg venligst ",
"version_announcement_overlay_text_3": " for at sikre dig, at din dockercompose- og .env-fil er opdateret, så der undgås fejlkonfiguration, specielt hvis du bruger WatchTower eller lignede.", "version_announcement_overlay_text_3": " for at sikre dig, at din dockercompose- og .env-fil er opdateret, så der undgås fejlkonfiguration, specielt hvis du bruger WatchTower eller lignede.",
"version_announcement_overlay_title": "Ny serverversion er tilgængelig \uD83C\uDF89", "version_announcement_overlay_title": "Ny serverversion er tilgængelig \uD83C\uDF89",
"viewer_remove_from_stack": "Remove from Stack", "viewer_remove_from_stack": "Fjern fra stak",
"viewer_stack_use_as_main_asset": "Use as Main Asset", "viewer_stack_use_as_main_asset": "Brug som hovedelement",
"viewer_unstack": "Un-Stack" "viewer_unstack": "Fjern fra stak"
} }
+134 -110
View File
@@ -3,8 +3,8 @@
"add_to_album_bottom_sheet_already_exists": "Bereits in {album}", "add_to_album_bottom_sheet_already_exists": "Bereits in {album}",
"advanced_settings_prefer_remote_subtitle": "Manche Endgeräte laden Vorschaubilder lokaler Bilder sehr langsam. Durch diese Einstellung werden diese stattdessen direkt vom Server geladen.", "advanced_settings_prefer_remote_subtitle": "Manche Endgeräte laden Vorschaubilder lokaler Bilder sehr langsam. Durch diese Einstellung werden diese stattdessen direkt vom Server geladen.",
"advanced_settings_prefer_remote_title": "Server-Bilder bevorzugen", "advanced_settings_prefer_remote_title": "Server-Bilder bevorzugen",
"advanced_settings_self_signed_ssl_subtitle": "Skips SSL certificate verification for the server endpoint. Required for self-signed certificates.", "advanced_settings_self_signed_ssl_subtitle": "Verifizierung von SSL-Zertifikaten vom Server überspringen. Notwendig bei selbstsignierten Zertifikaten.",
"advanced_settings_self_signed_ssl_title": "Allow self-signed SSL certificates", "advanced_settings_self_signed_ssl_title": "Selbstsignierte SSL-Zertifikate erlauben",
"advanced_settings_tile_subtitle": "Erweiterte Benutzereinstellungen", "advanced_settings_tile_subtitle": "Erweiterte Benutzereinstellungen",
"advanced_settings_tile_title": "Sonstige", "advanced_settings_tile_title": "Sonstige",
"advanced_settings_troubleshooting_subtitle": "Aktiviere erweiterte Funktionen zur Fehlersuche", "advanced_settings_troubleshooting_subtitle": "Aktiviere erweiterte Funktionen zur Fehlersuche",
@@ -14,7 +14,7 @@
"album_thumbnail_card_item": "1 Element", "album_thumbnail_card_item": "1 Element",
"album_thumbnail_card_items": "{} Elemente", "album_thumbnail_card_items": "{} Elemente",
"album_thumbnail_card_shared": " · Geteilt", "album_thumbnail_card_shared": " · Geteilt",
"album_thumbnail_owned": "Owned", "album_thumbnail_owned": "Eigene",
"album_thumbnail_shared_by": "Geteilt von {}", "album_thumbnail_shared_by": "Geteilt von {}",
"album_viewer_appbar_share_delete": "Album löschen", "album_viewer_appbar_share_delete": "Album löschen",
"album_viewer_appbar_share_err_delete": "Album konnte nicht gelöscht werden", "album_viewer_appbar_share_err_delete": "Album konnte nicht gelöscht werden",
@@ -22,12 +22,16 @@
"album_viewer_appbar_share_err_remove": "Beim Löschen von Elementen aus dem Album ist ein Problem aufgetreten", "album_viewer_appbar_share_err_remove": "Beim Löschen von Elementen aus dem Album ist ein Problem aufgetreten",
"album_viewer_appbar_share_err_title": "Der Titel konnte nicht geändert werden", "album_viewer_appbar_share_err_title": "Der Titel konnte nicht geändert werden",
"album_viewer_appbar_share_leave": "Album verlassen", "album_viewer_appbar_share_leave": "Album verlassen",
"album_viewer_appbar_share_remove": "Entferne vom Album", "album_viewer_appbar_share_remove": "Vom Album entfernen",
"album_viewer_appbar_share_to": "Teile über",
"album_viewer_page_share_add_users": "Nutzer hinzufügen", "album_viewer_page_share_add_users": "Nutzer hinzufügen",
"all_people_page_title": "Personen", "all_people_page_title": "Personen",
"all_videos_page_title": "Videos", "all_videos_page_title": "Videos",
"app_bar_signout_dialog_content": "Bist du sicher, dass du dich abmelden möchtest?",
"app_bar_signout_dialog_ok": "Ja",
"app_bar_signout_dialog_title": "Abmelden",
"archive_page_no_archived_assets": "Keine archivierten Inhalte gefunden", "archive_page_no_archived_assets": "Keine archivierten Inhalte gefunden",
"archive_page_title": "Archive ({})", "archive_page_title": "Archiv ({})",
"asset_list_layout_settings_dynamic_layout_title": "Dynamisches Layout", "asset_list_layout_settings_dynamic_layout_title": "Dynamisches Layout",
"asset_list_layout_settings_group_automatically": "Automatisch", "asset_list_layout_settings_group_automatically": "Automatisch",
"asset_list_layout_settings_group_by": "Gruppiere Elemente nach", "asset_list_layout_settings_group_by": "Gruppiere Elemente nach",
@@ -54,13 +58,13 @@
"backup_controller_page_background_app_refresh_disabled_title": "Hintergrundaktualisierungen sind deaktiviert.", "backup_controller_page_background_app_refresh_disabled_title": "Hintergrundaktualisierungen sind deaktiviert.",
"backup_controller_page_background_app_refresh_enable_button_text": "Gehe zu Einstellungen", "backup_controller_page_background_app_refresh_enable_button_text": "Gehe zu Einstellungen",
"backup_controller_page_background_battery_info_link": "Zeige mir wie", "backup_controller_page_background_battery_info_link": "Zeige mir wie",
"backup_controller_page_background_battery_info_message": "For the best background backup experience, please disable any battery optimizations restricting background activity for Immich.\n\nSince this is device-specific, please lookup the required information for your device manufacturer.", "backup_controller_page_background_battery_info_message": "Für die besten Ergebnisse für Sicherungen im Hintergrund, deaktiviere alle Batterieoptimierungen und Einschränkungen für die Hintergrundaktivitäten von Immich.\n\nDa dies gerätespezifisch ist, schlage diese Informationen für deinen Gerätehersteller nach.",
"backup_controller_page_background_battery_info_ok": "OK", "backup_controller_page_background_battery_info_ok": "OK",
"backup_controller_page_background_battery_info_title": "Batterieoptimierungen", "backup_controller_page_background_battery_info_title": "Batterieoptimierungen",
"backup_controller_page_background_charging": "Nur während des Ladens", "backup_controller_page_background_charging": "Nur während des Ladens",
"backup_controller_page_background_configure_error": "Konnte Hintergrundservice nicht konfigurieren", "backup_controller_page_background_configure_error": "Konnte Hintergrundservice nicht konfigurieren",
"backup_controller_page_background_delay": "Delay new assets backup: {}", "backup_controller_page_background_delay": "Sicherung neuer Elemente verzögern: {}",
"backup_controller_page_background_description": "Turn on the background service to automatically backup any new assets without needing to open the app", "backup_controller_page_background_description": "Schalte den Hintergrundservice ein, um neue Elemente automatisch im Hintergrund zu sichern ohne die App zu öffnen",
"backup_controller_page_background_is_off": "Automatische Sicherung im Hintergrund ist deaktiviert", "backup_controller_page_background_is_off": "Automatische Sicherung im Hintergrund ist deaktiviert",
"backup_controller_page_background_is_on": "Automatische Sicherung im Hintergrund ist aktiviert", "backup_controller_page_background_is_on": "Automatische Sicherung im Hintergrund ist aktiviert",
"backup_controller_page_background_turn_off": "Hintergrundservice ausschalten", "backup_controller_page_background_turn_off": "Hintergrundservice ausschalten",
@@ -78,7 +82,7 @@
"backup_controller_page_id": "ID: {}", "backup_controller_page_id": "ID: {}",
"backup_controller_page_info": "Informationen zur Sicherung", "backup_controller_page_info": "Informationen zur Sicherung",
"backup_controller_page_none_selected": "Keine ausgewählt", "backup_controller_page_none_selected": "Keine ausgewählt",
"backup_controller_page_remainder": "Übrig", "backup_controller_page_remainder": "Verbleibend",
"backup_controller_page_remainder_sub": "Noch zu sichernde Fotos und Videos", "backup_controller_page_remainder_sub": "Noch zu sichernde Fotos und Videos",
"backup_controller_page_select": "Auswählen", "backup_controller_page_select": "Auswählen",
"backup_controller_page_server_storage": "Server Speicher", "backup_controller_page_server_storage": "Server Speicher",
@@ -94,23 +98,25 @@
"backup_controller_page_uploading_file_info": "Informationen", "backup_controller_page_uploading_file_info": "Informationen",
"backup_err_only_album": "Das einzige Album kann nicht entfernt werden", "backup_err_only_album": "Das einzige Album kann nicht entfernt werden",
"backup_info_card_assets": "Elemente", "backup_info_card_assets": "Elemente",
"backup_manual_cancelled": "Cancelled", "backup_manual_cancelled": "Abgebrochen",
"backup_manual_failed": "Failed", "backup_manual_failed": "Fehlgeschlagen",
"backup_manual_in_progress": "Upload already in progress. Try after sometime", "backup_manual_in_progress": "Sicherung läuft bereits. Bitte später erneut versuchen",
"backup_manual_success": "Success", "backup_manual_success": "Erfolgreich",
"backup_manual_title": "Upload status", "backup_manual_title": "Sicherungsstatus",
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)", "cache_settings_album_thumbnails": "Vorschaubilder der Bibliothek ({} Elemente)",
"cache_settings_clear_cache_button": "Zwischenspeicher löschen", "cache_settings_clear_cache_button": "Zwischenspeicher löschen",
"cache_settings_clear_cache_button_title": "Löscht den Zwischenspeicher der App. Dies wird die Leistungsfähigkeit der App deutlich einschränken, bis der Zwischenspeicher wieder aufgebaut wurde.", "cache_settings_clear_cache_button_title": "Löscht den Zwischenspeicher der App. Dies wird die Leistungsfähigkeit der App deutlich einschränken, bis der Zwischenspeicher wieder aufgebaut wurde.",
"cache_settings_image_cache_size": "{} Bilder im Zwischenspeicher", "cache_settings_image_cache_size": "{} Bilder im Zwischenspeicher",
"cache_settings_statistics_album": "Library thumbnails", "cache_settings_statistics_album": "Vorschaubilder der Bibliothek",
"cache_settings_statistics_assets": "{} assets ({})", "cache_settings_statistics_assets": "{} Elemente ({})",
"cache_settings_statistics_full": "Full images", "cache_settings_statistics_full": "Originalbilder",
"cache_settings_statistics_shared": "Shared album thumbnails", "cache_settings_statistics_shared": "Vorschaubilder geteilter Alben",
"cache_settings_statistics_thumbnail": "Vorschaubilder", "cache_settings_statistics_thumbnail": "Vorschaubilder",
"cache_settings_statistics_title": "Zwischenspeicher Nutzung", "cache_settings_statistics_title": "Zwischenspeicher Nutzung",
"cache_settings_subtitle": "Kontrolliere wie Immich den Zwischenspeicher nutzen soll", "cache_settings_subtitle": "Kontrolliere wie Immich den Zwischenspeicher nutzen soll",
"cache_settings_thumbnail_size": "{} Vorschaubilder im Zwischenspeicher", "cache_settings_thumbnail_size": "{} Vorschaubilder im Zwischenspeicher",
"cache_settings_tile_subtitle": "Lokalen Speicher verwalten",
"cache_settings_tile_title": "Lokaler Speicher",
"cache_settings_title": "Zwischenspeicher Einstellungen", "cache_settings_title": "Zwischenspeicher Einstellungen",
"change_password_form_confirm_password": "Passwort bestätigen", "change_password_form_confirm_password": "Passwort bestätigen",
"change_password_form_description": "Hallo {firstName} {lastName}\n\nDas ist entweder das erste Mal dass du dich einloggst oder eine Anfrage zur Änderung deines Passwortes wurde gestellt. Bitte gebe das neue Passwort ein.", "change_password_form_description": "Hallo {firstName} {lastName}\n\nDas ist entweder das erste Mal dass du dich einloggst oder eine Anfrage zur Änderung deines Passwortes wurde gestellt. Bitte gebe das neue Passwort ein.",
@@ -119,21 +125,21 @@
"change_password_form_reenter_new_password": "Passwort erneut eingeben", "change_password_form_reenter_new_password": "Passwort erneut eingeben",
"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": "Erstelle ein neues Album", "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",
"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",
"control_bottom_app_bar_archive": "Archiv", "control_bottom_app_bar_archive": "Archiv",
"control_bottom_app_bar_create_new_album": "Neues Album erstellen", "control_bottom_app_bar_create_new_album": "Neues Album erstellen",
"control_bottom_app_bar_delete": "Löschen", "control_bottom_app_bar_delete": "Löschen",
"control_bottom_app_bar_favorite": "Favorit", "control_bottom_app_bar_favorite": "Favorit",
"control_bottom_app_bar_share": "Teilen", "control_bottom_app_bar_share": "Teilen",
"control_bottom_app_bar_share_to": "Share To", "control_bottom_app_bar_share_to": "Teilen mit",
"control_bottom_app_bar_stack": "Stack", "control_bottom_app_bar_stack": "Stapeln",
"control_bottom_app_bar_unarchive": "Dearchivieren", "control_bottom_app_bar_unarchive": "Dearchivieren",
"control_bottom_app_bar_upload": "Upload", "control_bottom_app_bar_upload": "Hochladen",
"create_album_page_untitled": "Unbenannt", "create_album_page_untitled": "Unbenannt",
"create_shared_album_page_create": "Erstellen", "create_shared_album_page_create": "Erstellen",
"create_shared_album_page_share": "Teilen", "create_shared_album_page_share": "Teilen",
@@ -147,16 +153,16 @@
"delete_dialog_alert": "Diese Elemente werden unwiderruflich von Immich und dem Gerät entfernt", "delete_dialog_alert": "Diese Elemente werden unwiderruflich von Immich und dem Gerät entfernt",
"delete_dialog_cancel": "Abbrechen", "delete_dialog_cancel": "Abbrechen",
"delete_dialog_ok": "Löschen", "delete_dialog_ok": "Löschen",
"delete_dialog_title": "Für immer löschen", "delete_dialog_title": "Endgültig löschen",
"delete_shared_link_dialog_content": "Are you sure you want to delete this shared link?", "delete_shared_link_dialog_content": "Bist du sicher, dass du diesen geteilten Link löschen möchtest?",
"delete_shared_link_dialog_title": "Delete Shared Link", "delete_shared_link_dialog_title": "Geteilten Link löschen",
"description_input_hint_text": "Beschreibung hinzufügen...", "description_input_hint_text": "Beschreibung hinzufügen...",
"description_input_submit_error": "Beschreibung konnte nicht geändert werden, bitte im Log für mehr Details nachsehen.", "description_input_submit_error": "Beschreibung konnte nicht geändert werden, bitte im Log für mehr Details nachsehen.",
"exif_bottom_sheet_description": "Beschreibung hinzufügen...", "exif_bottom_sheet_description": "Beschreibung hinzufügen...",
"exif_bottom_sheet_details": "DETAILS", "exif_bottom_sheet_details": "DETAILS",
"exif_bottom_sheet_location": "STANDORT", "exif_bottom_sheet_location": "STANDORT",
"experimental_settings_new_asset_list_subtitle": "In Arbeit", "experimental_settings_new_asset_list_subtitle": "In Arbeit",
"experimental_settings_new_asset_list_title": "Experimentelle Fotogitter aktivieren", "experimental_settings_new_asset_list_title": "Experimentelles Fotogitter aktivieren",
"experimental_settings_subtitle": "Benutzung auf eigene Gefahr!", "experimental_settings_subtitle": "Benutzung auf eigene Gefahr!",
"experimental_settings_title": "Experimentell", "experimental_settings_title": "Experimentell",
"favorites_page_no_favorites": "Keine favorisierten Inhalte gefunden", "favorites_page_no_favorites": "Keine favorisierten Inhalte gefunden",
@@ -164,39 +170,44 @@
"home_page_add_to_album_conflicts": "{added} Elemente zu {album} hinzugefügt. {failed} Elemente sind bereits vorhanden.", "home_page_add_to_album_conflicts": "{added} Elemente zu {album} hinzugefügt. {failed} Elemente sind bereits vorhanden.",
"home_page_add_to_album_err_local": "Kann lokale Elemente noch nicht zu Alben hinzufügen, überspringe", "home_page_add_to_album_err_local": "Kann lokale Elemente noch nicht zu Alben hinzufügen, überspringe",
"home_page_add_to_album_success": "{added} Elemente zu {album} hinzugefügt.", "home_page_add_to_album_success": "{added} Elemente zu {album} hinzugefügt.",
"home_page_album_err_partner": "Inhalte von Partnern können derzeit nicht zu Alben hinzugefügt werden",
"home_page_archive_err_local": "Kann lokale Elemente nicht archvieren, überspringe", "home_page_archive_err_local": "Kann lokale Elemente nicht archvieren, überspringe",
"home_page_archive_err_partner": "Inhalte von Partnern können nicht archiviert werden",
"home_page_building_timeline": "Zeitachse wird erstellt.", "home_page_building_timeline": "Zeitachse wird erstellt.",
"home_page_delete_err_partner": "Inhalte von Partnern können nicht gelöscht werden",
"home_page_favorite_err_local": "Kann lokale Elemente noch nicht favorisieren, überspringe", "home_page_favorite_err_local": "Kann lokale Elemente noch nicht favorisieren, überspringe",
"home_page_favorite_err_partner": "Inhalte von Partnern können nicht favorisiert werden",
"home_page_first_time_notice": "Wenn dies das erste Mal ist dass Du Immich nutzt, stelle bitte sicher, dass mindestens ein Album zur Sicherung ausgewählt ist, sodass die Zeitachse mit Fotos und Videos gefüllt werden kann.", "home_page_first_time_notice": "Wenn dies das erste Mal ist dass Du Immich nutzt, stelle bitte sicher, dass mindestens ein Album zur Sicherung ausgewählt ist, sodass die Zeitachse mit Fotos und Videos gefüllt werden kann.",
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping", "home_page_share_err_local": "Can not share local assets via link, skipping",
"home_page_upload_err_limit": "Max. 30 Elemente können gleichzeitig hochgeladen werden, überspringe",
"image_viewer_page_state_provider_download_error": "Fehler beim Herunterladen", "image_viewer_page_state_provider_download_error": "Fehler beim Herunterladen",
"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": "Share Error", "image_viewer_page_state_provider_share_error": "Fehler beim Teilen",
"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",
"library_page_favorites": "Favoriten", "library_page_favorites": "Favoriten",
"library_page_new_album": "Neues Album", "library_page_new_album": "Neues Album",
"library_page_sharing": "Teilen", "library_page_sharing": "Teilen",
"library_page_sort_created": "Zuletzt erstellt", "library_page_sort_created": "Zuletzt erstellt",
"library_page_sort_last_modified": "Last modified", "library_page_sort_last_modified": "Zuletzt bearbeitet",
"library_page_sort_most_recent_photo": "Most recent photo", "library_page_sort_most_recent_photo": "Neuestes Foto",
"library_page_sort_title": "Albumtitel", "library_page_sort_title": "Titel des Albums",
"login_disabled": "Login has been disabled", "login_disabled": "Login ist deaktiviert",
"login_form_api_exception": "API Fehler. Bitte die Serveradresse überprüfen und erneut versuchen.", "login_form_api_exception": "API Fehler. Bitte die Serveradresse überprüfen und erneut versuchen.",
"login_form_button_text": "Anmelden", "login_form_button_text": "Anmelden",
"login_form_email_hint": "deine@email.de", "login_form_email_hint": "deine@email.de",
"login_form_endpoint_hint": "http://deine-server-ip:port/api", "login_form_endpoint_hint": "http://deine-server-ip:port/api",
"login_form_endpoint_url": "Server URL", "login_form_endpoint_url": "Server-URL",
"login_form_err_http": "Bitte gebe http:// oder https:// an", "login_form_err_http": "Bitte gebe http:// oder https:// an",
"login_form_err_invalid_email": "Ungültige E-Mail", "login_form_err_invalid_email": "Ungültige E-Mail",
"login_form_err_invalid_url": "Ungültige URL", "login_form_err_invalid_url": "Ungültige URL",
"login_form_err_leading_whitespace": "Leerzichen am Anfang", "login_form_err_leading_whitespace": "Leerzeichen am Anfang",
"login_form_err_trailing_whitespace": "Leerzeichen am Ende", "login_form_err_trailing_whitespace": "Leerzeichen am Ende",
"login_form_failed_get_oauth_server_config": "Fehler beim Login per OAuth, Server-URL überprüfen", "login_form_failed_get_oauth_server_config": "Fehler beim Login per OAuth, Server-URL überprüfen",
"login_form_failed_get_oauth_server_disable": "OAuth-Funktion nicht verfügbar auf diesem Server.", "login_form_failed_get_oauth_server_disable": "OAuth-Funktion nicht verfügbar auf diesem Server.",
"login_form_failed_login": "Error logging you in, check server url, email and password", "login_form_failed_login": "Fehler beim Login, prüfe Server-URL, E-Mail und Passwort",
"login_form_handshake_exception": "There was an Handshake Exception with the server. Enable self-signed certificate support in the settings if you are using a self-signed certificate.", "login_form_handshake_exception": "Fehler beim Verbindungsaufbau mit dem Server. Falls du ein selbstsigniertes Zertifikat verwendest, aktiviere die Unterstützung in den Einstellungen.",
"login_form_label_email": "E-Mail", "login_form_label_email": "E-Mail",
"login_form_label_password": "Passwort", "login_form_label_password": "Passwort",
"login_form_next_button": "Weiter", "login_form_next_button": "Weiter",
@@ -204,26 +215,26 @@
"login_form_save_login": "Angemeldet bleiben", "login_form_save_login": "Angemeldet bleiben",
"login_form_server_empty": "Serveradresse eingeben.", "login_form_server_empty": "Serveradresse eingeben.",
"login_form_server_error": "Konnte nicht mit Server verbinden.", "login_form_server_error": "Konnte nicht mit Server verbinden.",
"login_password_changed_error": "There was an error updating your password", "login_password_changed_error": "Fehler beim Passwort ändern",
"login_password_changed_success": "Password updated successfully", "login_password_changed_success": "Passwort erfolgreich geändert",
"map_cannot_get_user_location": "Cannot get user's location", "map_cannot_get_user_location": "Standort konnte nicht ermittelt werden",
"map_location_dialog_cancel": "Cancel", "map_location_dialog_cancel": "Abbrechen",
"map_location_dialog_yes": "Yes", "map_location_dialog_yes": "Ja",
"map_location_service_disabled_content": "Location service needs to be enabled to display assets from your current location. Do you want to enable it now?", "map_location_service_disabled_content": "Ortungsdienste müssen aktiviert sein, um Inhalte am aktuellen Standort anzuzeigen. Willst du die Ortungsdienste aktivieren?",
"map_location_service_disabled_title": "Location Service disabled", "map_location_service_disabled_title": "Ortungsdienste deaktiviert",
"map_no_assets_in_bounds": "No photos in this area", "map_no_assets_in_bounds": "Keine Fotos in dieser Gegend",
"map_no_location_permission_content": "Location permission is needed to display assets from your current location. Do you want to allow it now?", "map_no_location_permission_content": "Ortungsdienste müssen aktiviert sein, um Inhalte am aktuellen Standort anzuzeigen. Willst du die Ortungsdienste aktivieren?",
"map_no_location_permission_title": "Location Permission denied", "map_no_location_permission_title": "Kein Zugriff auf den Standort",
"map_settings_dark_mode": "Dark mode", "map_settings_dark_mode": "Dunkler Modus",
"map_settings_dialog_cancel": "Cancel", "map_settings_dialog_cancel": "Abbrechen",
"map_settings_dialog_save": "Save", "map_settings_dialog_save": "Speichern",
"map_settings_dialog_title": "Map Settings", "map_settings_dialog_title": "Karteneinstellungen",
"map_settings_include_show_archived": "Include Archived", "map_settings_include_show_archived": "Archivierte anzeigen",
"map_settings_only_relative_range": "Date range", "map_settings_only_relative_range": "Datumsbereich",
"map_settings_only_show_favorites": "Show Favorite Only", "map_settings_only_show_favorites": "Nur Favoriten anzeigen",
"map_zoom_to_see_photos": "Zoom out to see photos", "map_zoom_to_see_photos": "Ansicht verkleinern um Fotos zu sehen",
"monthly_title_text_date_format": "MMMM y", "monthly_title_text_date_format": "MMMM y",
"motion_photos_page_title": "Live Photos", "motion_photos_page_title": "Live-Fotos",
"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",
@@ -231,33 +242,36 @@
"notification_permission_list_tile_enable_button": "Aktiviere Benachrichtigungen", "notification_permission_list_tile_enable_button": "Aktiviere Benachrichtigungen",
"notification_permission_list_tile_title": "Benachrichtigungs-Berechtigung", "notification_permission_list_tile_title": "Benachrichtigungs-Berechtigung",
"partner_page_add_partner": "Partner hinzufügen", "partner_page_add_partner": "Partner hinzufügen",
"partner_page_empty_message": "Your photos are not yet shared with any partner.", "partner_page_empty_message": "Deine Fotos sind noch nicht geteilt mit einem Partner",
"partner_page_no_more_users": "No more users to add", "partner_page_no_more_users": "Keine weiteren Nutzer",
"partner_page_partner_add_failed": "Failed to add partner", "partner_page_partner_add_failed": "Fehler beim Partner hinzufügen",
"partner_page_select_partner": "Partner auswählen", "partner_page_select_partner": "Partner auswählen",
"partner_page_shared_to_title": "Geteilt mit", "partner_page_shared_to_title": "Geteilt mit",
"partner_page_stop_sharing_content": "{} wird nicht mehr auf deine Fotos zugreifen können.", "partner_page_stop_sharing_content": "{} wird nicht mehr auf deine Fotos zugreifen können.",
"partner_page_stop_sharing_title": "Stop sharing your photos?", "partner_page_stop_sharing_title": "Deine Fotos nicht mehr teilen?",
"partner_page_title": "Partner", "partner_page_title": "Partner",
"permission_onboarding_back": "Back",
"permission_onboarding_continue_anyway": "Trotzdem fortfahren", "permission_onboarding_continue_anyway": "Trotzdem fortfahren",
"permission_onboarding_get_started": "Get started", "permission_onboarding_get_started": "Jetzt starten",
"permission_onboarding_go_to_settings": "Gehe zu Einstellungen", "permission_onboarding_go_to_settings": "Gehe zu Einstellungen",
"permission_onboarding_grant_permission": "Berechtigung erteilen", "permission_onboarding_grant_permission": "Berechtigung erteilen",
"permission_onboarding_log_out": "Abmelden", "permission_onboarding_log_out": "Abmelden",
"permission_onboarding_permission_denied": "Berechtigungen verweigert. Um Immich zu benutzen, Zugriff auf Fotos und Videos in Einstellungen erlauben.", "permission_onboarding_permission_denied": "Berechtigung verweigert. Um Immich zu benutzen, muss Zugriff auf Fotos und Videos in Einstellungen erlaubt werden.",
"permission_onboarding_permission_granted": "Berechtigung erteilt! Du bist startklar.", "permission_onboarding_permission_granted": "Berechtigung erteilt! Du bist startklar.",
"permission_onboarding_permission_limited": "Berechtigungen unzureichend. Um Immich das Sichern von ganzen Sammlungen zu ermöglichen, muss der Zugriff auf alle Fotos und Videos in den Einstellungen erlaubt werden.", "permission_onboarding_permission_limited": "Berechtigungen unzureichend. Um Immich das Sichern von ganzen Sammlungen zu ermöglichen, muss der Zugriff auf alle Fotos und Videos in den Einstellungen erlaubt werden.",
"permission_onboarding_request": "Immich benötigt Berechtigung um auf deine Fotos und Videos zuzugreifen.", "permission_onboarding_request": "Immich benötigt Berechtigung um auf deine Fotos und Videos zuzugreifen.",
"profile_drawer_app_logs": "Logs", "profile_drawer_app_logs": "Logs",
"profile_drawer_client_server_up_to_date": "App und Server sind aktuell", "profile_drawer_client_server_up_to_date": "App und Server sind aktuell",
"profile_drawer_documentation": "Dokumentation",
"profile_drawer_github": "GitHub",
"profile_drawer_settings": "Einstellungen", "profile_drawer_settings": "Einstellungen",
"profile_drawer_sign_out": "Abmelden", "profile_drawer_sign_out": "Abmelden",
"profile_drawer_trash": "Trash", "profile_drawer_trash": "Papierkorb",
"recently_added_page_title": "Zuletzt hinzugefügt", "recently_added_page_title": "Zuletzt hinzugefügt",
"search_bar_hint": "Durchsuche deine Fotos", "search_bar_hint": "Durchsuche deine Fotos",
"search_page_categories": "Kategorien", "search_page_categories": "Kategorien",
"search_page_favorites": "Favoriten", "search_page_favorites": "Favoriten",
"search_page_motion_photos": "Live Photos", "search_page_motion_photos": "Live-Fotos",
"search_page_no_objects": "Keine Objektinformationen verfügbar", "search_page_no_objects": "Keine Objektinformationen verfügbar",
"search_page_no_places": "Keine Informationen über Orte verfügbar", "search_page_no_places": "Keine Informationen über Orte verfügbar",
"search_page_people": "Personen", "search_page_people": "Personen",
@@ -265,7 +279,7 @@
"search_page_recently_added": "Zuletzt hinzugefügt", "search_page_recently_added": "Zuletzt hinzugefügt",
"search_page_screenshots": "Bildschirmfotos", "search_page_screenshots": "Bildschirmfotos",
"search_page_selfies": "Selfies", "search_page_selfies": "Selfies",
"search_page_things": "Dinge", "search_page_things": "Gegenstände und Tiere",
"search_page_videos": "Videos", "search_page_videos": "Videos",
"search_page_view_all_button": "Alle anzeigen", "search_page_view_all_button": "Alle anzeigen",
"search_page_your_activity": "Deine Aktivität", "search_page_your_activity": "Deine Aktivität",
@@ -274,55 +288,65 @@
"search_suggestion_list_smart_search_hint_2": "m:dein-suchbegriff", "search_suggestion_list_smart_search_hint_2": "m:dein-suchbegriff",
"select_additional_user_for_sharing_page_suggestions": "Vorschläge", "select_additional_user_for_sharing_page_suggestions": "Vorschläge",
"select_user_for_sharing_page_err_album": "Album konnte nicht erstellt werden", "select_user_for_sharing_page_err_album": "Album konnte nicht erstellt werden",
"select_user_for_sharing_page_share_suggestions": "Suggestions", "select_user_for_sharing_page_share_suggestions": "Empfehlungen",
"server_info_box_app_version": "App Version", "server_info_box_app_version": "App Version",
"server_info_box_server_url": "Server-URL",
"server_info_box_server_version": "Server Version", "server_info_box_server_version": "Server Version",
"setting_image_viewer_help": "Der Detailbildbetrachter lädt zuerst die kleine Miniaturansicht, dann die Vorschau in mittlerer Größe (falls aktiviert) und schließlich das Original (falls aktiviert).", "setting_image_viewer_help": "Der Detailbildbetrachter lädt zuerst die kleine Miniaturansicht, dann die Vorschau in mittlerer Größe (falls aktiviert) und schließlich das Original (falls aktiviert).",
"setting_image_viewer_original_subtitle": "Aktivieren, um das Originalbild in voller Auflösung (groß!) zu laden. Deaktivieren, um den Datenverbrauch zu reduzieren (sowohl im Netzwerk als auch im Gerätespeicher).", "setting_image_viewer_original_subtitle": "Aktivieren, um das Originalbild in voller Auflösung (groß!) zu laden. Deaktivieren, um den Datenverbrauch zu reduzieren (sowohl im Netzwerk als auch im Gerätespeicher).",
"setting_image_viewer_original_title": "Original laden", "setting_image_viewer_original_title": "Original laden",
"setting_image_viewer_preview_subtitle": "Aktivieren, um ein Bild mit mittlerer Auflösung zu laden. Deaktivieren, um entweder das Original direkt zu laden oder nur die Miniaturansicht zu verwenden.", "setting_image_viewer_preview_subtitle": "Aktivieren, um ein Bild mit mittlerer Auflösung zu laden. Deaktivieren, um entweder das Original direkt zu laden oder nur die Miniaturansicht zu verwenden.",
"setting_image_viewer_preview_title": "Vorschaubild laden", "setting_image_viewer_preview_title": "Vorschaubild laden",
"setting_notifications_notify_failures_grace_period": "Notify background backup failures: {}", "setting_notifications_notify_failures_grace_period": "Benachrichtigung über Fehler bei der Hintergrundsicherung: {}",
"setting_notifications_notify_hours": "{} Stunden", "setting_notifications_notify_hours": "{} Stunden",
"setting_notifications_notify_immediately": "sofort", "setting_notifications_notify_immediately": "sofort",
"setting_notifications_notify_minutes": "{} Minuten", "setting_notifications_notify_minutes": "{} Minuten",
"setting_notifications_notify_never": "niemals", "setting_notifications_notify_never": "niemals",
"setting_notifications_notify_seconds": "{} Sekunden", "setting_notifications_notify_seconds": "{} Sekunden",
"setting_notifications_single_progress_subtitle": "Detaillierte Upload Informationen für jedes Element.", "setting_notifications_single_progress_subtitle": "Detaillierter Upload-Fortschritt für jedes Element.",
"setting_notifications_single_progress_title": "Zeige Hintergrund-Sicherungs Detailfortschritt", "setting_notifications_single_progress_title": "Zeige detaillierten Fortschritt bei der Hintergrundsicherung",
"setting_notifications_subtitle": "Passe Deine Benachrichtigungen an", "setting_notifications_subtitle": "Benachrichtigungen anpassen",
"setting_notifications_title": "Benachrichtigungen", "setting_notifications_title": "Benachrichtigungen",
"setting_notifications_total_progress_subtitle": "Gesamter Upload-Fortschritt (abgeschlossen/Anzahl Elemente)", "setting_notifications_total_progress_subtitle": "Gesamter Upload-Fortschritt (abgeschlossen/Anzahl Elemente)",
"setting_notifications_total_progress_title": "Zeige Hintergrundsicherungsfortschritt", "setting_notifications_total_progress_title": "Zeige Gesamtfortschritt bei der Hintergrundsicherung",
"setting_pages_app_bar_settings": "Einstellungen", "setting_pages_app_bar_settings": "Einstellungen",
"settings_require_restart": "Bitte starte Immich neu, um diese Einstellung anzuwenden.", "settings_require_restart": "Bitte starte Immich neu, um diese Einstellung anzuwenden.",
"share_add": "Hinzufügen", "share_add": "Hinzufügen",
"share_add_photos": "Fotos hinzufügen", "share_add_photos": "Fotos hinzufügen",
"share_add_title": "Titel hinzufügen", "share_add_title": "Titel hinzufügen",
"share_create_album": "Album erstellen", "share_create_album": "Album erstellen",
"shared_album_activities_input_disable": "Kommentare sind deaktiviert.",
"shared_album_activities_input_hint": "Sag etwas",
"shared_album_activity_remove_content": "Möchtest du diese Aktivität entfernen?",
"shared_album_activity_remove_title": "Aktivität entfernen",
"shared_album_activity_setting_subtitle": "Lass andere reagieren.",
"shared_album_activity_setting_title": "Kommentare & Likes",
"share_dialog_preparing": "Vorbereiten...", "share_dialog_preparing": "Vorbereiten...",
"shared_link_app_bar_title": "Shared Links", "shared_link_app_bar_title": "Geteilte Links",
"shared_link_create_app_bar_title": "Create link to share", "shared_link_create_app_bar_title": "Link zum Teilen erstellen",
"shared_link_create_info": "Let anyone with the link see the selected photo(s)", "shared_link_create_info": "Alle, die über den Link verfügen, können die Fotos sehen",
"shared_link_create_submit_button": "Create link", "shared_link_create_submit_button": "Link erstellen",
"shared_link_edit_allow_download": "Allow public user to download", "shared_link_edit_allow_download": "Jeder darf herunterladen",
"shared_link_edit_allow_upload": "Allow public user to upload", "shared_link_edit_allow_upload": "Jeder darf hochladen",
"shared_link_edit_app_bar_title": "Edit link", "shared_link_edit_app_bar_title": "Link bearbeiten",
"shared_link_edit_change_expiry": "Change expiration time", "shared_link_edit_change_expiry": "Ablaufdatum bearbeiten",
"shared_link_edit_description": "Description", "shared_link_edit_description": "Beschreibung",
"shared_link_edit_description_hint": "Enter the share description", "shared_link_edit_description_hint": "Beschreibung eingeben",
"shared_link_edit_show_meta": "Show metadata", "shared_link_edit_expire_after": "Erlischt nach",
"shared_link_edit_submit_button": "Update link", "shared_link_edit_password": "Passwort",
"shared_link_empty": "You don't have any shared links", "shared_link_edit_password_hint": "Passwort eingeben",
"shared_link_manage_links": "Manage Shared links", "shared_link_edit_show_meta": "Metadaten anzeigen",
"share_done": "Done", "shared_link_edit_submit_button": "Link aktualisieren",
"shared_link_empty": "Du hast keine geteilten Links",
"shared_link_manage_links": "Geteilte Links verwalten",
"share_done": "Fertig",
"share_invite": "Zum Album einladen", "share_invite": "Zum Album einladen",
"sharing_page_album": "Geteilte Alben", "sharing_page_album": "Geteilte Alben",
"sharing_page_description": "Erstelle ein geteiltes Album um Fotos und Videos mit Personen in deinem Netzwerk zu teilen.", "sharing_page_description": "Erstelle ein geteiltes Album um Fotos und Videos mit Personen in deinem Netzwerk zu teilen.",
"sharing_page_empty_list": "LEERE LISTE", "sharing_page_empty_list": "LEERE LISTE",
"sharing_silver_appbar_create_shared_album": "Neues geteiltes Album", "sharing_silver_appbar_create_shared_album": "Neues geteiltes Album",
"sharing_silver_appbar_shared_links": "Shared links", "sharing_silver_appbar_shared_links": "Geteilte Links",
"sharing_silver_appbar_share_partner": "Teile mit Partner", "sharing_silver_appbar_share_partner": "Mit Partner teilen",
"tab_controller_nav_library": "Bibliothek", "tab_controller_nav_library": "Bibliothek",
"tab_controller_nav_photos": "Fotos", "tab_controller_nav_photos": "Fotos",
"tab_controller_nav_search": "Suche", "tab_controller_nav_search": "Suche",
@@ -337,30 +361,30 @@
"theme_setting_theme_title": "Theme", "theme_setting_theme_title": "Theme",
"theme_setting_three_stage_loading_subtitle": "Das dreistufige Ladeverfahren kann die Performance beim Laden verbessern, erhöht allerdings den Datenverbrauch deutlich", "theme_setting_three_stage_loading_subtitle": "Das dreistufige Ladeverfahren kann die Performance beim Laden verbessern, erhöht allerdings den Datenverbrauch deutlich",
"theme_setting_three_stage_loading_title": "Dreistufiges Laden aktivieren", "theme_setting_three_stage_loading_title": "Dreistufiges Laden aktivieren",
"translated_text_options": "Options", "translated_text_options": "Optionen",
"trash_page_delete": "Delete", "trash_page_delete": "Löschen",
"trash_page_delete_all": "Delete All", "trash_page_delete_all": "Alle löschen",
"trash_page_empty_trash_btn": "Empty trash", "trash_page_empty_trash_btn": "Papierkorb leeren",
"trash_page_empty_trash_dialog_content": "Do you want to empty your trashed assets? These items will be permanently removed from Immich", "trash_page_empty_trash_dialog_content": "Elemente im Papierkorb löschen? Diese Elemente werden dauerhaft von Immich entfernt",
"trash_page_empty_trash_dialog_ok": "Ok", "trash_page_empty_trash_dialog_ok": "Ok",
"trash_page_info": "Trashed items will be permanently deleted after {} days", "trash_page_info": "Elemente im Papierkorb werden nach {} Tagen endgültig gelöscht",
"trash_page_no_assets": "No trashed assets", "trash_page_no_assets": "Keine Elemente im Papierkorb",
"trash_page_restore": "Restore", "trash_page_restore": "Wiederherstellen",
"trash_page_restore_all": "Restore All", "trash_page_restore_all": "Alle wiederherstellen",
"trash_page_select_assets_btn": "Select assets", "trash_page_select_assets_btn": "Elemente auswählen",
"trash_page_select_btn": "Select", "trash_page_select_btn": "Auswählen",
"trash_page_title": "Trash ({})", "trash_page_title": "Papierkorb ({})",
"upload_dialog_cancel": "Cancel", "upload_dialog_cancel": "Abbrechen",
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?", "upload_dialog_info": "Willst du die ausgewählten Elemente auf dem Server sichern?",
"upload_dialog_ok": "Upload", "upload_dialog_ok": "Hochladen",
"upload_dialog_title": "Upload Asset", "upload_dialog_title": "Element hochladen",
"version_announcement_overlay_ack": "Ich habe verstanden", "version_announcement_overlay_ack": "Ich habe verstanden",
"version_announcement_overlay_release_notes": "Änderungsprotokoll", "version_announcement_overlay_release_notes": "Änderungsprotokoll",
"version_announcement_overlay_text_1": "Hallo mein Freund! Es gibt eine neue Version von", "version_announcement_overlay_text_1": "Hallo mein Freund! Es gibt eine neue Version von",
"version_announcement_overlay_text_2": "Bitte nehm dir die Zeit und lese das ", "version_announcement_overlay_text_2": "Bitte nehme dir die Zeit und lies das ",
"version_announcement_overlay_text_3": " und achte darauf, dass deine docker-compose und .env Dateien aktuell sind, vor allem wenn du ein System für automatische Updates benutzt (z.B. Watchtower).", "version_announcement_overlay_text_3": " und achte darauf, dass deine docker-compose und .env Dateien aktuell sind, vor allem wenn du ein System für automatische Updates benutzt (z.B. Watchtower).",
"version_announcement_overlay_title": "Neue Server-Version verfügbar \uD83C\uDF89", "version_announcement_overlay_title": "Neue Server-Version verfügbar \uD83C\uDF89",
"viewer_remove_from_stack": "Remove from Stack", "viewer_remove_from_stack": "Aus Stapel entfernen",
"viewer_stack_use_as_main_asset": "Use as Main Asset", "viewer_stack_use_as_main_asset": "An Stapelanfang",
"viewer_unstack": "Un-Stack" "viewer_unstack": "Stapel aufheben"
} }
+28 -5
View File
@@ -23,9 +23,13 @@
"album_viewer_appbar_share_err_title": "Failed to change album title", "album_viewer_appbar_share_err_title": "Failed to change album title",
"album_viewer_appbar_share_leave": "Leave album", "album_viewer_appbar_share_leave": "Leave album",
"album_viewer_appbar_share_remove": "Remove from album", "album_viewer_appbar_share_remove": "Remove from album",
"album_viewer_appbar_share_to": "Share To",
"album_viewer_page_share_add_users": "Add users", "album_viewer_page_share_add_users": "Add users",
"all_people_page_title": "People", "all_people_page_title": "People",
"all_videos_page_title": "Videos", "all_videos_page_title": "Videos",
"app_bar_signout_dialog_content": "Are you sure you wanna sign out?",
"app_bar_signout_dialog_ok": "Yes",
"app_bar_signout_dialog_title": "Sign out",
"archive_page_no_archived_assets": "No archived assets found", "archive_page_no_archived_assets": "No archived assets found",
"archive_page_title": "Archive ({})", "archive_page_title": "Archive ({})",
"asset_list_layout_settings_dynamic_layout_title": "Dynamic layout", "asset_list_layout_settings_dynamic_layout_title": "Dynamic layout",
@@ -111,6 +115,8 @@
"cache_settings_statistics_title": "Cache usage", "cache_settings_statistics_title": "Cache usage",
"cache_settings_subtitle": "Control the caching behaviour of the Immich mobile application", "cache_settings_subtitle": "Control the caching behaviour of the Immich mobile application",
"cache_settings_thumbnail_size": "Thumbnail cache size ({} assets)", "cache_settings_thumbnail_size": "Thumbnail cache size ({} assets)",
"cache_settings_tile_subtitle": "Control the local storage behaviour",
"cache_settings_tile_title": "Local Storage",
"cache_settings_title": "Caching Settings", "cache_settings_title": "Caching Settings",
"change_password_form_confirm_password": "Confirm Password", "change_password_form_confirm_password": "Confirm Password",
"change_password_form_description": "Hi {firstName} {lastName},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.", "change_password_form_description": "Hi {firstName} {lastName},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.",
@@ -164,10 +170,15 @@
"home_page_add_to_album_conflicts": "Added {added} assets to album {album}. {failed} assets are already in the album.", "home_page_add_to_album_conflicts": "Added {added} assets to album {album}. {failed} assets are already in the album.",
"home_page_add_to_album_err_local": "Can not add local assets to albums yet, skipping", "home_page_add_to_album_err_local": "Can not add local assets to albums yet, skipping",
"home_page_add_to_album_success": "Added {added} assets to album {album}.", "home_page_add_to_album_success": "Added {added} assets to album {album}.",
"home_page_album_err_partner": "Can not add partner assets to an album yet, skipping",
"home_page_archive_err_local": "Can not archive local assets yet, skipping", "home_page_archive_err_local": "Can not archive local assets yet, skipping",
"home_page_archive_err_partner": "Can not archive partner assets, skipping",
"home_page_building_timeline": "Building the timeline", "home_page_building_timeline": "Building the timeline",
"home_page_delete_err_partner": "Can not delete partner assets, skipping",
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping", "home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
"home_page_favorite_err_partner": "Can not favorite partner assets yet, skipping",
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).", "home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
"home_page_share_err_local": "Can not share local assets via link, skipping",
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping", "home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
"image_viewer_page_state_provider_download_error": "Download Error", "image_viewer_page_state_provider_download_error": "Download Error",
"image_viewer_page_state_provider_download_success": "Download Success", "image_viewer_page_state_provider_download_success": "Download Success",
@@ -239,6 +250,7 @@
"partner_page_stop_sharing_content": "{} will no longer be able to access your photos.", "partner_page_stop_sharing_content": "{} will no longer be able to access your photos.",
"partner_page_stop_sharing_title": "Stop sharing your photos?", "partner_page_stop_sharing_title": "Stop sharing your photos?",
"partner_page_title": "Partner", "partner_page_title": "Partner",
"permission_onboarding_back": "Back",
"permission_onboarding_continue_anyway": "Continue anyway", "permission_onboarding_continue_anyway": "Continue anyway",
"permission_onboarding_get_started": "Get started", "permission_onboarding_get_started": "Get started",
"permission_onboarding_go_to_settings": "Go to settings", "permission_onboarding_go_to_settings": "Go to settings",
@@ -250,6 +262,8 @@
"permission_onboarding_request": "Immich requires permission to view your photos and videos.", "permission_onboarding_request": "Immich requires permission to view your photos and videos.",
"profile_drawer_app_logs": "Logs", "profile_drawer_app_logs": "Logs",
"profile_drawer_client_server_up_to_date": "Client and Server are up-to-date", "profile_drawer_client_server_up_to_date": "Client and Server are up-to-date",
"profile_drawer_documentation": "Documentation",
"profile_drawer_github": "GitHub",
"profile_drawer_settings": "Settings", "profile_drawer_settings": "Settings",
"profile_drawer_sign_out": "Sign Out", "profile_drawer_sign_out": "Sign Out",
"profile_drawer_trash": "Trash", "profile_drawer_trash": "Trash",
@@ -276,7 +290,9 @@
"select_user_for_sharing_page_err_album": "Failed to create album", "select_user_for_sharing_page_err_album": "Failed to create album",
"select_user_for_sharing_page_share_suggestions": "Suggestions", "select_user_for_sharing_page_share_suggestions": "Suggestions",
"server_info_box_app_version": "App Version", "server_info_box_app_version": "App Version",
"server_info_box_server_url": "Server URL",
"server_info_box_server_version": "Server Version", "server_info_box_server_version": "Server Version",
"server_info_box_latest_release":"Latest Version",
"setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).", "setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).",
"setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).", "setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).",
"setting_image_viewer_original_title": "Load original image", "setting_image_viewer_original_title": "Load original image",
@@ -300,6 +316,12 @@
"share_add_photos": "Add photos", "share_add_photos": "Add photos",
"share_add_title": "Add a title", "share_add_title": "Add a title",
"share_create_album": "Create album", "share_create_album": "Create album",
"shared_album_activities_input_disable": "Comment is disabled",
"shared_album_activities_input_hint": "Say something",
"shared_album_activity_remove_content": "Do you want to delete this activity?",
"shared_album_activity_remove_title": "Delete Activity",
"shared_album_activity_setting_subtitle": "Let others respond",
"shared_album_activity_setting_title": "Comments & likes",
"share_dialog_preparing": "Preparing...", "share_dialog_preparing": "Preparing...",
"shared_link_app_bar_title": "Shared Links", "shared_link_app_bar_title": "Shared Links",
"shared_link_create_app_bar_title": "Create link to share", "shared_link_create_app_bar_title": "Create link to share",
@@ -311,6 +333,9 @@
"shared_link_edit_change_expiry": "Change expiration time", "shared_link_edit_change_expiry": "Change expiration time",
"shared_link_edit_description": "Description", "shared_link_edit_description": "Description",
"shared_link_edit_description_hint": "Enter the share description", "shared_link_edit_description_hint": "Enter the share description",
"shared_link_edit_expire_after": "Expire after",
"shared_link_edit_password": "Password",
"shared_link_edit_password_hint": "Enter the share password",
"shared_link_edit_show_meta": "Show metadata", "shared_link_edit_show_meta": "Show metadata",
"shared_link_edit_submit_button": "Update link", "shared_link_edit_submit_button": "Update link",
"shared_link_empty": "You don't have any shared links", "shared_link_empty": "You don't have any shared links",
@@ -361,8 +386,6 @@
"version_announcement_overlay_text_3": " and ensure your docker-compose and .env setup is up-to-date to prevent any misconfigurations, especially if you use WatchTower or any mechanism that handles updating your server application automatically.", "version_announcement_overlay_text_3": " and ensure your docker-compose and .env setup is up-to-date to prevent any misconfigurations, especially if you use WatchTower or any mechanism that handles updating your server application automatically.",
"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_unstack": "Un-Stack", "viewer_stack_use_as_main_asset": "Use as Main Asset",
"cache_settings_tile_title": "Local Storage", "viewer_unstack": "Un-Stack"
"cache_settings_tile_subtitle": "Control the local storage behaviour", }
"viewer_stack_use_as_main_asset": "Use as Main Asset"
}
+100 -76
View File
@@ -3,8 +3,8 @@
"add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}", "add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}",
"advanced_settings_prefer_remote_subtitle": "Algunos dispositivos tardan mucho en cargar las miniaturas de recursos encontrados el dispositivo. Activa esta opción para cargar imágenes remotas en su lugar.", "advanced_settings_prefer_remote_subtitle": "Algunos dispositivos tardan mucho en cargar las miniaturas de recursos encontrados el dispositivo. Activa esta opción para cargar imágenes remotas en su lugar.",
"advanced_settings_prefer_remote_title": "Preferir imágenes remotas", "advanced_settings_prefer_remote_title": "Preferir imágenes remotas",
"advanced_settings_self_signed_ssl_subtitle": "Skips SSL certificate verification for the server endpoint. Required for self-signed certificates.", "advanced_settings_self_signed_ssl_subtitle": "Omitir verificación del certificado SSL del servidor. Requerido para certificados autofirmados",
"advanced_settings_self_signed_ssl_title": "Allow self-signed SSL certificates", "advanced_settings_self_signed_ssl_title": "Permitir certificados autofirmados",
"advanced_settings_tile_subtitle": "Configuraciones avanzadas del usuario", "advanced_settings_tile_subtitle": "Configuraciones avanzadas del usuario",
"advanced_settings_tile_title": "Avanzado", "advanced_settings_tile_title": "Avanzado",
"advanced_settings_troubleshooting_subtitle": "Habilitar funciones adicionales para solución de problemas", "advanced_settings_troubleshooting_subtitle": "Habilitar funciones adicionales para solución de problemas",
@@ -23,9 +23,13 @@
"album_viewer_appbar_share_err_title": "Error al cambiar el título del álbum ", "album_viewer_appbar_share_err_title": "Error al cambiar el título del álbum ",
"album_viewer_appbar_share_leave": "Abandonar álbum ", "album_viewer_appbar_share_leave": "Abandonar álbum ",
"album_viewer_appbar_share_remove": "Eliminar del álbum ", "album_viewer_appbar_share_remove": "Eliminar del álbum ",
"album_viewer_appbar_share_to": "Share To",
"album_viewer_page_share_add_users": "Agregar usuarios", "album_viewer_page_share_add_users": "Agregar usuarios",
"all_people_page_title": "Personas", "all_people_page_title": "Personas",
"all_videos_page_title": "Videos", "all_videos_page_title": "Videos",
"app_bar_signout_dialog_content": "¿Estás seguro que quieres cerrar sesión?",
"app_bar_signout_dialog_ok": "Sí",
"app_bar_signout_dialog_title": "Cerrar sesión",
"archive_page_no_archived_assets": "No se encontraron recursos archivados", "archive_page_no_archived_assets": "No se encontraron recursos archivados",
"archive_page_title": "Archivo ({})", "archive_page_title": "Archivo ({})",
"asset_list_layout_settings_dynamic_layout_title": "Diseño dinámico", "asset_list_layout_settings_dynamic_layout_title": "Diseño dinámico",
@@ -59,7 +63,7 @@
"backup_controller_page_background_battery_info_title": "Optimizaciones de batería", "backup_controller_page_background_battery_info_title": "Optimizaciones de batería",
"backup_controller_page_background_charging": "Solo mientras se carga", "backup_controller_page_background_charging": "Solo mientras se carga",
"backup_controller_page_background_configure_error": "Error al configurar el servicio en segundo plano", "backup_controller_page_background_configure_error": "Error al configurar el servicio en segundo plano",
"backup_controller_page_background_delay": "Retraso en la copia de seguridad de nuevos activos: {}", "backup_controller_page_background_delay": "Retraso en la copia de seguridad de nuevos elementos: {}",
"backup_controller_page_background_description": "Activa el servicio en segundo plano para copiar automáticamente cualquier nuevos archivos sin necesidad de abrir la aplicación.", "backup_controller_page_background_description": "Activa el servicio en segundo plano para copiar automáticamente cualquier nuevos archivos sin necesidad de abrir la aplicación.",
"backup_controller_page_background_is_off": "La copia de seguridad en segundo plano automática está desactivada", "backup_controller_page_background_is_off": "La copia de seguridad en segundo plano automática está desactivada",
"backup_controller_page_background_is_on": "La copia de seguridad en segundo plano automática está activada", "backup_controller_page_background_is_on": "La copia de seguridad en segundo plano automática está activada",
@@ -71,7 +75,7 @@
"backup_controller_page_backup_sub": "Fotos y videos respaldados", "backup_controller_page_backup_sub": "Fotos y videos respaldados",
"backup_controller_page_cancel": "Cancelar", "backup_controller_page_cancel": "Cancelar",
"backup_controller_page_created": "Creado el: {}", "backup_controller_page_created": "Creado el: {}",
"backup_controller_page_desc_backup": "Active la copia de seguridad para cargar automáticamente los nuevos activos al servidor.", "backup_controller_page_desc_backup": "Active la copia de seguridad para cargar automáticamente los nuevos elementos al servidor.",
"backup_controller_page_excluded": "Excluido:", "backup_controller_page_excluded": "Excluido:",
"backup_controller_page_failed": "Fallidos ({})", "backup_controller_page_failed": "Fallidos ({})",
"backup_controller_page_filename": "Nombre del archivo: {} [{}]", "backup_controller_page_filename": "Nombre del archivo: {} [{}]",
@@ -94,11 +98,11 @@
"backup_controller_page_uploading_file_info": "Cargando información del archivo", "backup_controller_page_uploading_file_info": "Cargando información del archivo",
"backup_err_only_album": "No se puede eliminar el único álbum", "backup_err_only_album": "No se puede eliminar el único álbum",
"backup_info_card_assets": "archivos", "backup_info_card_assets": "archivos",
"backup_manual_cancelled": "Cancelled", "backup_manual_cancelled": "Cancelado",
"backup_manual_failed": "Failed", "backup_manual_failed": "Fallido",
"backup_manual_in_progress": "Upload already in progress. Try after sometime", "backup_manual_in_progress": "Subida en progreso. Espere",
"backup_manual_success": "Success", "backup_manual_success": "Éxito",
"backup_manual_title": "Upload status", "backup_manual_title": "Estado de la subida",
"cache_settings_album_thumbnails": "Miniaturas de la página de la biblioteca ({} archivos)", "cache_settings_album_thumbnails": "Miniaturas de la página de la biblioteca ({} archivos)",
"cache_settings_clear_cache_button": "Borrar caché", "cache_settings_clear_cache_button": "Borrar caché",
"cache_settings_clear_cache_button_title": "Borra la caché de la aplicación. Esto afectará significativamente el rendimiento de la aplicación hasta que se reconstruya la caché.", "cache_settings_clear_cache_button_title": "Borra la caché de la aplicación. Esto afectará significativamente el rendimiento de la aplicación hasta que se reconstruya la caché.",
@@ -111,6 +115,8 @@
"cache_settings_statistics_title": "Uso de caché", "cache_settings_statistics_title": "Uso de caché",
"cache_settings_subtitle": "Controla el comportamiento del almacenamiento en caché de la aplicación móvil Immich", "cache_settings_subtitle": "Controla el comportamiento del almacenamiento en caché de la aplicación móvil Immich",
"cache_settings_thumbnail_size": "Tamaño de la caché de miniaturas ({} archivos)", "cache_settings_thumbnail_size": "Tamaño de la caché de miniaturas ({} archivos)",
"cache_settings_tile_subtitle": "Controla el comportamiento del almacenamiento local",
"cache_settings_tile_title": "Almacenamiento local",
"cache_settings_title": "Configuración de la caché", "cache_settings_title": "Configuración de la caché",
"change_password_form_confirm_password": "Confirmar Contraseña", "change_password_form_confirm_password": "Confirmar Contraseña",
"change_password_form_description": "Hola {firstName} {lastName},\n\nEsta es la primera vez que inicias sesión en el sistema o se ha solicitado cambiar tu contraseña. Por favor, introduce la nueva contraseña a continuación.", "change_password_form_description": "Hola {firstName} {lastName},\n\nEsta es la primera vez que inicias sesión en el sistema o se ha solicitado cambiar tu contraseña. Por favor, introduce la nueva contraseña a continuación.",
@@ -130,10 +136,10 @@
"control_bottom_app_bar_delete": "Eliminar", "control_bottom_app_bar_delete": "Eliminar",
"control_bottom_app_bar_favorite": "Favorito", "control_bottom_app_bar_favorite": "Favorito",
"control_bottom_app_bar_share": "Compartir", "control_bottom_app_bar_share": "Compartir",
"control_bottom_app_bar_share_to": "Share To", "control_bottom_app_bar_share_to": "Enviar",
"control_bottom_app_bar_stack": "Stack", "control_bottom_app_bar_stack": "Apilar",
"control_bottom_app_bar_unarchive": "Desarchivar", "control_bottom_app_bar_unarchive": "Desarchivar",
"control_bottom_app_bar_upload": "Upload", "control_bottom_app_bar_upload": "Subir",
"create_album_page_untitled": "Sin título", "create_album_page_untitled": "Sin título",
"create_shared_album_page_create": "Crear", "create_shared_album_page_create": "Crear",
"create_shared_album_page_share": "Compartir", "create_shared_album_page_share": "Compartir",
@@ -148,8 +154,8 @@
"delete_dialog_cancel": "Cancelar", "delete_dialog_cancel": "Cancelar",
"delete_dialog_ok": "Eliminar", "delete_dialog_ok": "Eliminar",
"delete_dialog_title": "Eliminar Permanentemente", "delete_dialog_title": "Eliminar Permanentemente",
"delete_shared_link_dialog_content": "Are you sure you want to delete this shared link?", "delete_shared_link_dialog_content": "Estás seguro que quieres eliminar este enlace compartido",
"delete_shared_link_dialog_title": "Delete Shared Link", "delete_shared_link_dialog_title": "Eliminar enlace compartido",
"description_input_hint_text": "Agregar descripción...", "description_input_hint_text": "Agregar descripción...",
"description_input_submit_error": "Error al actualizar la descripción, verifica el registro para obtener más detalles", "description_input_submit_error": "Error al actualizar la descripción, verifica el registro para obtener más detalles",
"exif_bottom_sheet_description": "Agregar Descripción...", "exif_bottom_sheet_description": "Agregar Descripción...",
@@ -164,14 +170,19 @@
"home_page_add_to_album_conflicts": "{added} elementos agregados al álbum {album}.{failed} elementos ya existen en el álbum.", "home_page_add_to_album_conflicts": "{added} elementos agregados al álbum {album}.{failed} elementos ya existen en el álbum.",
"home_page_add_to_album_err_local": "Aún no se pueden agregar recursos locales a álbumes, omitiendo", "home_page_add_to_album_err_local": "Aún no se pueden agregar recursos locales a álbumes, omitiendo",
"home_page_add_to_album_success": "{added} elementos agregados al álbum {album}. ", "home_page_add_to_album_success": "{added} elementos agregados al álbum {album}. ",
"home_page_album_err_partner": "Can not add partner assets to an album yet, skipping",
"home_page_archive_err_local": "Los recursos locales no pueden ser archivados, omitiendo", "home_page_archive_err_local": "Los recursos locales no pueden ser archivados, omitiendo",
"home_page_archive_err_partner": "Can not archive partner assets, skipping",
"home_page_building_timeline": "Construyendo la línea de tiempo", "home_page_building_timeline": "Construyendo la línea de tiempo",
"home_page_delete_err_partner": "Can not delete partner assets, skipping",
"home_page_favorite_err_local": "Aún no se pueden archivar recursos locales, omitiendo", "home_page_favorite_err_local": "Aún no se pueden archivar recursos locales, omitiendo",
"home_page_favorite_err_partner": "Can not favorite partner assets yet, skipping",
"home_page_first_time_notice": "Si esta es la primera vez que usas la app, por favor, asegúrate de elegir un álbum de respaldo para que la línea de tiempo pueda cargar fotos y videos en los álbumes.", "home_page_first_time_notice": "Si esta es la primera vez que usas la app, por favor, asegúrate de elegir un álbum de respaldo para que la línea de tiempo pueda cargar fotos y videos en los álbumes.",
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping", "home_page_share_err_local": "Can not share local assets via link, skipping",
"home_page_upload_err_limit": "Solo se pueden subir 30 elementos simultáneamente, omitiendo",
"image_viewer_page_state_provider_download_error": "Error de descarga", "image_viewer_page_state_provider_download_error": "Error de descarga",
"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": "Share Error", "image_viewer_page_state_provider_share_error": "Error al compartir",
"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",
@@ -179,10 +190,10 @@
"library_page_new_album": "Nuevo álbum", "library_page_new_album": "Nuevo álbum",
"library_page_sharing": "Compartiendo", "library_page_sharing": "Compartiendo",
"library_page_sort_created": "Creado más recientemente", "library_page_sort_created": "Creado más recientemente",
"library_page_sort_last_modified": "Last modified", "library_page_sort_last_modified": "Última modificación",
"library_page_sort_most_recent_photo": "Most recent photo", "library_page_sort_most_recent_photo": "Foto más reciente",
"library_page_sort_title": "Título del álbum", "library_page_sort_title": "Título del álbum",
"login_disabled": "Login has been disabled", "login_disabled": "El inicio de sesión ha sido desactivado",
"login_form_api_exception": "Excepción producida por API. Por favor, verifica el URL del servidor e inténtalo de nuevo.", "login_form_api_exception": "Excepción producida por API. Por favor, verifica el URL del servidor e inténtalo de nuevo.",
"login_form_button_text": "Iniciar Sesión", "login_form_button_text": "Iniciar Sesión",
"login_form_email_hint": "tucorreo@correo.com", "login_form_email_hint": "tucorreo@correo.com",
@@ -196,7 +207,7 @@
"login_form_failed_get_oauth_server_config": "Error al iniciar sesión con OAuth, verifica la URL del servidor", "login_form_failed_get_oauth_server_config": "Error al iniciar sesión con OAuth, verifica la URL del servidor",
"login_form_failed_get_oauth_server_disable": "La función de OAuth no está disponible en este servidor", "login_form_failed_get_oauth_server_disable": "La función de OAuth no está disponible en este servidor",
"login_form_failed_login": "Error al iniciar sesión, comprueba la URL del servidor, el correo electrónico y la contraseña", "login_form_failed_login": "Error al iniciar sesión, comprueba la URL del servidor, el correo electrónico y la contraseña",
"login_form_handshake_exception": "There was an Handshake Exception with the server. Enable self-signed certificate support in the settings if you are using a self-signed certificate.", "login_form_handshake_exception": "Hubo un error de verificación del certificado del servidor. Activa el soporte para certificados autofirmados en las preferencias si estás usando un certificado autofirmado",
"login_form_label_email": "Correo", "login_form_label_email": "Correo",
"login_form_label_password": "Contraseña", "login_form_label_password": "Contraseña",
"login_form_next_button": "Siguiente", "login_form_next_button": "Siguiente",
@@ -204,24 +215,24 @@
"login_form_save_login": "Mantener la sesión iniciada", "login_form_save_login": "Mantener la sesión iniciada",
"login_form_server_empty": "Agrega la URL del servidor.", "login_form_server_empty": "Agrega la URL del servidor.",
"login_form_server_error": "No se pudo conectar al servidor.", "login_form_server_error": "No se pudo conectar al servidor.",
"login_password_changed_error": "There was an error updating your password", "login_password_changed_error": "Hubo un error actualizando la contraseña",
"login_password_changed_success": "Password updated successfully", "login_password_changed_success": "Contraseña cambiado con éxito",
"map_cannot_get_user_location": "Cannot get user's location", "map_cannot_get_user_location": "No se pudo obtener la posición del usuario",
"map_location_dialog_cancel": "Cancel", "map_location_dialog_cancel": "Cancelar",
"map_location_dialog_yes": "Yes", "map_location_dialog_yes": "",
"map_location_service_disabled_content": "Location service needs to be enabled to display assets from your current location. Do you want to enable it now?", "map_location_service_disabled_content": "Los servicios de ubicación deben estar activados para mostrar elementos de tu ubicación actual. Deseas activarlos ahora?",
"map_location_service_disabled_title": "Location Service disabled", "map_location_service_disabled_title": "Servicios de ubicación desactivados",
"map_no_assets_in_bounds": "No photos in this area", "map_no_assets_in_bounds": "No hay fotos en esta zona",
"map_no_location_permission_content": "Location permission is needed to display assets from your current location. Do you want to allow it now?", "map_no_location_permission_content": "Se necesitan permisos de ubicación para mostrar elementos de tu ubicación actual. Deseas activarlos ahora?",
"map_no_location_permission_title": "Location Permission denied", "map_no_location_permission_title": "Permisos de ubicación denegados",
"map_settings_dark_mode": "Dark mode", "map_settings_dark_mode": "Modo oscuro",
"map_settings_dialog_cancel": "Cancel", "map_settings_dialog_cancel": "Cancelar",
"map_settings_dialog_save": "Save", "map_settings_dialog_save": "Guardar",
"map_settings_dialog_title": "Map Settings", "map_settings_dialog_title": "Ajustes mapa",
"map_settings_include_show_archived": "Include Archived", "map_settings_include_show_archived": "Incluir archivados",
"map_settings_only_relative_range": "Date range", "map_settings_only_relative_range": "Rango de fechas",
"map_settings_only_show_favorites": "Show Favorite Only", "map_settings_only_show_favorites": "Mostrar solo favoritas",
"map_zoom_to_see_photos": "Zoom out to see photos", "map_zoom_to_see_photos": "Alejar para ver fotos",
"monthly_title_text_date_format": "MMMM y", "monthly_title_text_date_format": "MMMM y",
"motion_photos_page_title": "Foto en Movimiento", "motion_photos_page_title": "Foto en Movimiento",
"notification_permission_dialog_cancel": "Cancelar", "notification_permission_dialog_cancel": "Cancelar",
@@ -239,6 +250,7 @@
"partner_page_stop_sharing_content": "{} ya no podrá acceder a tus fotos", "partner_page_stop_sharing_content": "{} ya no podrá acceder a tus fotos",
"partner_page_stop_sharing_title": "¿Dejar de compartir tus fotos?", "partner_page_stop_sharing_title": "¿Dejar de compartir tus fotos?",
"partner_page_title": "Compañero", "partner_page_title": "Compañero",
"permission_onboarding_back": "Back",
"permission_onboarding_continue_anyway": "Continuar de todos modos", "permission_onboarding_continue_anyway": "Continuar de todos modos",
"permission_onboarding_get_started": "Empezar", "permission_onboarding_get_started": "Empezar",
"permission_onboarding_go_to_settings": "Ir a configuración", "permission_onboarding_go_to_settings": "Ir a configuración",
@@ -250,9 +262,11 @@
"permission_onboarding_request": "Immich requiere permiso para ver tus fotos y videos.", "permission_onboarding_request": "Immich requiere permiso para ver tus fotos y videos.",
"profile_drawer_app_logs": "Registros", "profile_drawer_app_logs": "Registros",
"profile_drawer_client_server_up_to_date": "El Cliente y el Servidor están actualizados", "profile_drawer_client_server_up_to_date": "El Cliente y el Servidor están actualizados",
"profile_drawer_documentation": "Documentación",
"profile_drawer_github": "GitHub",
"profile_drawer_settings": "Configuración", "profile_drawer_settings": "Configuración",
"profile_drawer_sign_out": "Cerrar Sesión", "profile_drawer_sign_out": "Cerrar Sesión",
"profile_drawer_trash": "Trash", "profile_drawer_trash": "Papelera",
"recently_added_page_title": "Recién Agregadas", "recently_added_page_title": "Recién Agregadas",
"search_bar_hint": "Busca tus fotos", "search_bar_hint": "Busca tus fotos",
"search_page_categories": "Categorías", "search_page_categories": "Categorías",
@@ -276,6 +290,7 @@
"select_user_for_sharing_page_err_album": "Fallo al crear el álbum", "select_user_for_sharing_page_err_album": "Fallo al crear el álbum",
"select_user_for_sharing_page_share_suggestions": "Sugerencias", "select_user_for_sharing_page_share_suggestions": "Sugerencias",
"server_info_box_app_version": "Versión de la Aplicación", "server_info_box_app_version": "Versión de la Aplicación",
"server_info_box_server_url": "URL del servidor",
"server_info_box_server_version": "Versión del Servidor", "server_info_box_server_version": "Versión del Servidor",
"setting_image_viewer_help": "El visor de detalles carga primero la miniatura pequeña, luego carga la vista previa de tamaño mediano (si está habilitada), finalmente carga la original (si está habilitada).", "setting_image_viewer_help": "El visor de detalles carga primero la miniatura pequeña, luego carga la vista previa de tamaño mediano (si está habilitada), finalmente carga la original (si está habilitada).",
"setting_image_viewer_original_subtitle": "Activar para cargar la imagen en resolución original (¡muy grande!). Deshabilitar para reducir el consumo de datos (de red y caché).", "setting_image_viewer_original_subtitle": "Activar para cargar la imagen en resolución original (¡muy grande!). Deshabilitar para reducir el consumo de datos (de red y caché).",
@@ -300,35 +315,44 @@
"share_add_photos": "Agregar fotos", "share_add_photos": "Agregar fotos",
"share_add_title": "Agregar un título", "share_add_title": "Agregar un título",
"share_create_album": "Crear álbum", "share_create_album": "Crear álbum",
"shared_album_activities_input_disable": "Comment is disabled",
"shared_album_activities_input_hint": "Say something",
"shared_album_activity_remove_content": "Do you want to delete this activity?",
"shared_album_activity_remove_title": "Delete Activity",
"shared_album_activity_setting_subtitle": "Let others respond",
"shared_album_activity_setting_title": "Comments & likes",
"share_dialog_preparing": "Preparando...", "share_dialog_preparing": "Preparando...",
"shared_link_app_bar_title": "Shared Links", "shared_link_app_bar_title": "Enlaces compartidos",
"shared_link_create_app_bar_title": "Create link to share", "shared_link_create_app_bar_title": "Crear enlace compartido",
"shared_link_create_info": "Let anyone with the link see the selected photo(s)", "shared_link_create_info": "Cualquier persona con el enlace puede ver las fotos seleccionadas",
"shared_link_create_submit_button": "Create link", "shared_link_create_submit_button": "Crear enlace",
"shared_link_edit_allow_download": "Allow public user to download", "shared_link_edit_allow_download": "Permitir descargar a usuarios públicos",
"shared_link_edit_allow_upload": "Allow public user to upload", "shared_link_edit_allow_upload": "Permitir subir a usuarios públicos",
"shared_link_edit_app_bar_title": "Edit link", "shared_link_edit_app_bar_title": "Editar enlace",
"shared_link_edit_change_expiry": "Change expiration time", "shared_link_edit_change_expiry": "Cambiar fecha de caducidad",
"shared_link_edit_description": "Description", "shared_link_edit_description": "Descripción",
"shared_link_edit_description_hint": "Enter the share description", "shared_link_edit_description_hint": "Introduce la descripción del enlace",
"shared_link_edit_show_meta": "Show metadata", "shared_link_edit_expire_after": "Expire after",
"shared_link_edit_submit_button": "Update link", "shared_link_edit_password": "Contraseña",
"shared_link_empty": "You don't have any shared links", "shared_link_edit_password_hint": "Introduce la contraseña del enlace",
"shared_link_manage_links": "Manage Shared links", "shared_link_edit_show_meta": "Mostrar metadatos",
"share_done": "Done", "shared_link_edit_submit_button": "Actualizar enlace",
"shared_link_empty": "No tienes enlaces compartidos",
"shared_link_manage_links": "Administrar enlaces compartidos",
"share_done": "Hecho",
"share_invite": "Invitar al álbum", "share_invite": "Invitar al álbum",
"sharing_page_album": "Álbumes compartidos", "sharing_page_album": "Álbumes compartidos",
"sharing_page_description": "Crea álbumes compartidos para compartir fotos y vídeos con las personas de tu red.", "sharing_page_description": "Crea álbumes compartidos para compartir fotos y vídeos con las personas de tu red.",
"sharing_page_empty_list": "LISTA VACIA", "sharing_page_empty_list": "LISTA VACIA",
"sharing_silver_appbar_create_shared_album": "Crear un álbum compartido", "sharing_silver_appbar_create_shared_album": "Crear un álbum compartido",
"sharing_silver_appbar_shared_links": "Shared links", "sharing_silver_appbar_shared_links": "Enlaces compartidos",
"sharing_silver_appbar_share_partner": "Compartir con el compañero", "sharing_silver_appbar_share_partner": "Compartir con el compañero",
"tab_controller_nav_library": "Biblioteca", "tab_controller_nav_library": "Biblioteca",
"tab_controller_nav_photos": "Fotos", "tab_controller_nav_photos": "Fotos",
"tab_controller_nav_search": "Buscar", "tab_controller_nav_search": "Buscar",
"tab_controller_nav_sharing": "Compartiendo", "tab_controller_nav_sharing": "Compartiendo",
"theme_setting_asset_list_storage_indicator_title": "Mostrar indicador de almacenamiento en las miniaturas de los archivos", "theme_setting_asset_list_storage_indicator_title": "Mostrar indicador de almacenamiento en las miniaturas de los archivos",
"theme_setting_asset_list_tiles_per_row_title": "Número de activos por fila ({})", "theme_setting_asset_list_tiles_per_row_title": "Número de elementos por fila ({})",
"theme_setting_dark_mode_switch": "Modo oscuro", "theme_setting_dark_mode_switch": "Modo oscuro",
"theme_setting_image_viewer_quality_subtitle": "Ajustar la calidad del visor de detalles de imágenes", "theme_setting_image_viewer_quality_subtitle": "Ajustar la calidad del visor de detalles de imágenes",
"theme_setting_image_viewer_quality_title": "Calidad del visor de imágenes", "theme_setting_image_viewer_quality_title": "Calidad del visor de imágenes",
@@ -337,30 +361,30 @@
"theme_setting_theme_title": "Tema", "theme_setting_theme_title": "Tema",
"theme_setting_three_stage_loading_subtitle": "La carga en tres etapas puede aumentar el rendimiento de carga pero provoca un consumo de red significativamente mayor", "theme_setting_three_stage_loading_subtitle": "La carga en tres etapas puede aumentar el rendimiento de carga pero provoca un consumo de red significativamente mayor",
"theme_setting_three_stage_loading_title": "Activar carga en tres etapas", "theme_setting_three_stage_loading_title": "Activar carga en tres etapas",
"translated_text_options": "Options", "translated_text_options": "Opciones",
"trash_page_delete": "Delete", "trash_page_delete": "Eliminar",
"trash_page_delete_all": "Delete All", "trash_page_delete_all": "Eliminar todos",
"trash_page_empty_trash_btn": "Empty trash", "trash_page_empty_trash_btn": "Vaciar papelera",
"trash_page_empty_trash_dialog_content": "Do you want to empty your trashed assets? These items will be permanently removed from Immich", "trash_page_empty_trash_dialog_content": "Estás seguro que quieres eliminar los elementos? Estos elementos serán eliminados de Immich permanentemente",
"trash_page_empty_trash_dialog_ok": "Ok", "trash_page_empty_trash_dialog_ok": "",
"trash_page_info": "Trashed items will be permanently deleted after {} days", "trash_page_info": "Los archivos en la papelera serán eliminados automáticamente después de {} días",
"trash_page_no_assets": "No trashed assets", "trash_page_no_assets": "No hay elementos en la papelera",
"trash_page_restore": "Restore", "trash_page_restore": "Restaurar",
"trash_page_restore_all": "Restore All", "trash_page_restore_all": "Restaurar todos",
"trash_page_select_assets_btn": "Select assets", "trash_page_select_assets_btn": "Seleccionar elementos",
"trash_page_select_btn": "Select", "trash_page_select_btn": "Seleccionar",
"trash_page_title": "Trash ({})", "trash_page_title": "Papelera ({})",
"upload_dialog_cancel": "Cancel", "upload_dialog_cancel": "Cancelar",
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?", "upload_dialog_info": "Quieres hacer una copia de seguridad al servidor de los elementos seleccionados?",
"upload_dialog_ok": "Upload", "upload_dialog_ok": "Subir",
"upload_dialog_title": "Upload Asset", "upload_dialog_title": "Subir elementos",
"version_announcement_overlay_ack": "Aceptar", "version_announcement_overlay_ack": "Aceptar",
"version_announcement_overlay_release_notes": "notas de versión", "version_announcement_overlay_release_notes": "notas de versión",
"version_announcement_overlay_text_1": "Hola amigo, hay una nueva versión de", "version_announcement_overlay_text_1": "Hola amigo, hay una nueva versión de",
"version_announcement_overlay_text_2": "por favor, tómate tu tiempo para visitar las ", "version_announcement_overlay_text_2": "por favor, tómate tu tiempo para visitar las ",
"version_announcement_overlay_text_3": " y asegúrate de que la configuración de docker-compose y .env estén actualizadas para evitar cualquier error de configuración, especialmente si utilizas WatchTower o cualquier mecanismo que actualice automáticamente la aplicación del servidor.", "version_announcement_overlay_text_3": " y asegúrate de que la configuración de docker-compose y .env estén actualizadas para evitar cualquier error de configuración, especialmente si utilizas WatchTower o cualquier mecanismo que actualice automáticamente la aplicación del servidor.",
"version_announcement_overlay_title": "Nueva versión del servidor disponible \uD83C\uDF89", "version_announcement_overlay_title": "Nueva versión del servidor disponible \uD83C\uDF89",
"viewer_remove_from_stack": "Remove from Stack", "viewer_remove_from_stack": "Quitar de la pila",
"viewer_stack_use_as_main_asset": "Use as Main Asset", "viewer_stack_use_as_main_asset": "Usar como elemento principal",
"viewer_unstack": "Un-Stack" "viewer_unstack": "Desapilar"
} }
+99 -75
View File
@@ -3,8 +3,8 @@
"add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}", "add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}",
"advanced_settings_prefer_remote_subtitle": "Algunos dispositivos tardan mucho en cargar las miniaturas de recursos encontrados el dispositivo. Activa esta opción para cargar imágenes remotas en su lugar.", "advanced_settings_prefer_remote_subtitle": "Algunos dispositivos tardan mucho en cargar las miniaturas de recursos encontrados el dispositivo. Activa esta opción para cargar imágenes remotas en su lugar.",
"advanced_settings_prefer_remote_title": "Preferir imágenes remotas", "advanced_settings_prefer_remote_title": "Preferir imágenes remotas",
"advanced_settings_self_signed_ssl_subtitle": "Skips SSL certificate verification for the server endpoint. Required for self-signed certificates.", "advanced_settings_self_signed_ssl_subtitle": "Omitir verificación del certificado SSL del servidor. Requerido para certificados autofirmados",
"advanced_settings_self_signed_ssl_title": "Allow self-signed SSL certificates", "advanced_settings_self_signed_ssl_title": "Permitir certificados autofirmados",
"advanced_settings_tile_subtitle": "Configuraciones avanzadas del usuario", "advanced_settings_tile_subtitle": "Configuraciones avanzadas del usuario",
"advanced_settings_tile_title": "Avanzado", "advanced_settings_tile_title": "Avanzado",
"advanced_settings_troubleshooting_subtitle": "Habilitar funciones adicionales para solución de problemas", "advanced_settings_troubleshooting_subtitle": "Habilitar funciones adicionales para solución de problemas",
@@ -23,9 +23,13 @@
"album_viewer_appbar_share_err_title": "Error al cambiar el título del álbum", "album_viewer_appbar_share_err_title": "Error al cambiar el título del álbum",
"album_viewer_appbar_share_leave": "Abandonar álbum ", "album_viewer_appbar_share_leave": "Abandonar álbum ",
"album_viewer_appbar_share_remove": "Eliminar del álbum", "album_viewer_appbar_share_remove": "Eliminar del álbum",
"album_viewer_appbar_share_to": "Share To",
"album_viewer_page_share_add_users": "Agregar usuarios", "album_viewer_page_share_add_users": "Agregar usuarios",
"all_people_page_title": "Personas", "all_people_page_title": "Personas",
"all_videos_page_title": "Videos", "all_videos_page_title": "Videos",
"app_bar_signout_dialog_content": "¿Estás seguro que quieres cerrar sesión?",
"app_bar_signout_dialog_ok": "Sí",
"app_bar_signout_dialog_title": "Cerrar sesión",
"archive_page_no_archived_assets": "No se encontraron recursos archivados", "archive_page_no_archived_assets": "No se encontraron recursos archivados",
"archive_page_title": "Archivo ({})", "archive_page_title": "Archivo ({})",
"asset_list_layout_settings_dynamic_layout_title": "Diseño dinámico", "asset_list_layout_settings_dynamic_layout_title": "Diseño dinámico",
@@ -59,7 +63,7 @@
"backup_controller_page_background_battery_info_title": "Optimizaciones de batería", "backup_controller_page_background_battery_info_title": "Optimizaciones de batería",
"backup_controller_page_background_charging": "Solo mientras se carga", "backup_controller_page_background_charging": "Solo mientras se carga",
"backup_controller_page_background_configure_error": "Error al configurar el servicio en segundo plano", "backup_controller_page_background_configure_error": "Error al configurar el servicio en segundo plano",
"backup_controller_page_background_delay": "Retraso en la copia de seguridad de nuevos activos: {}", "backup_controller_page_background_delay": "Retraso en la copia de seguridad de nuevos elementos: {}",
"backup_controller_page_background_description": "Activa el servicio en segundo plano para copiar automáticamente cualquier nuevos archivos sin necesidad de abrir la aplicación.", "backup_controller_page_background_description": "Activa el servicio en segundo plano para copiar automáticamente cualquier nuevos archivos sin necesidad de abrir la aplicación.",
"backup_controller_page_background_is_off": "La copia de seguridad en segundo plano automática está desactivada", "backup_controller_page_background_is_off": "La copia de seguridad en segundo plano automática está desactivada",
"backup_controller_page_background_is_on": "La copia de seguridad en segundo plano automática está desactivada", "backup_controller_page_background_is_on": "La copia de seguridad en segundo plano automática está desactivada",
@@ -94,11 +98,11 @@
"backup_controller_page_uploading_file_info": "Cargando información del archivo", "backup_controller_page_uploading_file_info": "Cargando información del archivo",
"backup_err_only_album": "No se puede eliminar el único álbum", "backup_err_only_album": "No se puede eliminar el único álbum",
"backup_info_card_assets": "archivos", "backup_info_card_assets": "archivos",
"backup_manual_cancelled": "Cancelled", "backup_manual_cancelled": "Cancelado",
"backup_manual_failed": "Failed", "backup_manual_failed": "Fallido",
"backup_manual_in_progress": "Upload already in progress. Try after sometime", "backup_manual_in_progress": "Subida en progreso. Espere",
"backup_manual_success": "Success", "backup_manual_success": "Éxito",
"backup_manual_title": "Upload status", "backup_manual_title": "Estado de la subida",
"cache_settings_album_thumbnails": "Miniaturas de la página de la biblioteca ({} archivos)", "cache_settings_album_thumbnails": "Miniaturas de la página de la biblioteca ({} archivos)",
"cache_settings_clear_cache_button": "Borrar caché", "cache_settings_clear_cache_button": "Borrar caché",
"cache_settings_clear_cache_button_title": "Borra la caché de la aplicación. Esto afectará significativamente el rendimiento de la aplicación hasta que se reconstruya la caché.", "cache_settings_clear_cache_button_title": "Borra la caché de la aplicación. Esto afectará significativamente el rendimiento de la aplicación hasta que se reconstruya la caché.",
@@ -111,6 +115,8 @@
"cache_settings_statistics_title": "Uso de caché", "cache_settings_statistics_title": "Uso de caché",
"cache_settings_subtitle": "Controla el comportamiento del almacenamiento en caché de la aplicación móvil Immich", "cache_settings_subtitle": "Controla el comportamiento del almacenamiento en caché de la aplicación móvil Immich",
"cache_settings_thumbnail_size": "Tamaño de la caché de miniaturas ({} archivos)", "cache_settings_thumbnail_size": "Tamaño de la caché de miniaturas ({} archivos)",
"cache_settings_tile_subtitle": "Controla el comportamiento del almacenamiento local",
"cache_settings_tile_title": "Almacenamiento local",
"cache_settings_title": "Configuración de la caché", "cache_settings_title": "Configuración de la caché",
"change_password_form_confirm_password": "Confirmar Contraseña", "change_password_form_confirm_password": "Confirmar Contraseña",
"change_password_form_description": "Hola {firstName} {lastName},\n\nEsta es la primera vez que inicias sesión en el sistema o se ha solicitado cambiar tu contraseña. Por favor, introduce la nueva contraseña a continuación.", "change_password_form_description": "Hola {firstName} {lastName},\n\nEsta es la primera vez que inicias sesión en el sistema o se ha solicitado cambiar tu contraseña. Por favor, introduce la nueva contraseña a continuación.",
@@ -130,10 +136,10 @@
"control_bottom_app_bar_delete": "Eliminar", "control_bottom_app_bar_delete": "Eliminar",
"control_bottom_app_bar_favorite": "Favorito", "control_bottom_app_bar_favorite": "Favorito",
"control_bottom_app_bar_share": "Compartir", "control_bottom_app_bar_share": "Compartir",
"control_bottom_app_bar_share_to": "Share To", "control_bottom_app_bar_share_to": "Enviar",
"control_bottom_app_bar_stack": "Stack", "control_bottom_app_bar_stack": "Apilar",
"control_bottom_app_bar_unarchive": "Desarchivar", "control_bottom_app_bar_unarchive": "Desarchivar",
"control_bottom_app_bar_upload": "Upload", "control_bottom_app_bar_upload": "Subir",
"create_album_page_untitled": "Sin título", "create_album_page_untitled": "Sin título",
"create_shared_album_page_create": "Crear", "create_shared_album_page_create": "Crear",
"create_shared_album_page_share": "Compartir", "create_shared_album_page_share": "Compartir",
@@ -148,8 +154,8 @@
"delete_dialog_cancel": "Cancelar", "delete_dialog_cancel": "Cancelar",
"delete_dialog_ok": "Eliminar", "delete_dialog_ok": "Eliminar",
"delete_dialog_title": "Eliminar permanentemente", "delete_dialog_title": "Eliminar permanentemente",
"delete_shared_link_dialog_content": "Are you sure you want to delete this shared link?", "delete_shared_link_dialog_content": "Estás seguro que quieres eliminar este enlace compartido",
"delete_shared_link_dialog_title": "Delete Shared Link", "delete_shared_link_dialog_title": "Eliminar enlace compartido",
"description_input_hint_text": "Agregar descripción...", "description_input_hint_text": "Agregar descripción...",
"description_input_submit_error": "Error al actualizar la descripción, verifica el registro para obtener más detalles", "description_input_submit_error": "Error al actualizar la descripción, verifica el registro para obtener más detalles",
"exif_bottom_sheet_description": "Agregar Descripción...", "exif_bottom_sheet_description": "Agregar Descripción...",
@@ -164,14 +170,19 @@
"home_page_add_to_album_conflicts": "{added} elementos agregados al álbum {album}.\n{failed} elementos ya existen en el álbum.", "home_page_add_to_album_conflicts": "{added} elementos agregados al álbum {album}.\n{failed} elementos ya existen en el álbum.",
"home_page_add_to_album_err_local": "Aún no se pueden agregar recursos locales a álbumes, omitiendo", "home_page_add_to_album_err_local": "Aún no se pueden agregar recursos locales a álbumes, omitiendo",
"home_page_add_to_album_success": "{added} elementos agregados al álbum {album}. ", "home_page_add_to_album_success": "{added} elementos agregados al álbum {album}. ",
"home_page_album_err_partner": "Can not add partner assets to an album yet, skipping",
"home_page_archive_err_local": "Los recursos locales no pueden ser archivados, omitiendo", "home_page_archive_err_local": "Los recursos locales no pueden ser archivados, omitiendo",
"home_page_archive_err_partner": "Can not archive partner assets, skipping",
"home_page_building_timeline": "Construyendo la línea de tiempo", "home_page_building_timeline": "Construyendo la línea de tiempo",
"home_page_delete_err_partner": "Can not delete partner assets, skipping",
"home_page_favorite_err_local": "Aún no se pueden archivar recursos locales, omitiendo", "home_page_favorite_err_local": "Aún no se pueden archivar recursos locales, omitiendo",
"home_page_favorite_err_partner": "Can not favorite partner assets yet, skipping",
"home_page_first_time_notice": "Si esta es la primera vez que usas la app, por favor, asegúrate de elegir un álbum de respaldo para que la línea de tiempo pueda cargar fotos y videos en los álbumes.", "home_page_first_time_notice": "Si esta es la primera vez que usas la app, por favor, asegúrate de elegir un álbum de respaldo para que la línea de tiempo pueda cargar fotos y videos en los álbumes.",
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping", "home_page_share_err_local": "Can not share local assets via link, skipping",
"home_page_upload_err_limit": "Solo se pueden subir 30 elementos simultáneamente, omitiendo",
"image_viewer_page_state_provider_download_error": "Error de descarga", "image_viewer_page_state_provider_download_error": "Error de descarga",
"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": "Share Error", "image_viewer_page_state_provider_share_error": "Error al compartir",
"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",
@@ -179,10 +190,10 @@
"library_page_new_album": "Nuevo álbum", "library_page_new_album": "Nuevo álbum",
"library_page_sharing": "Compartiendo", "library_page_sharing": "Compartiendo",
"library_page_sort_created": "Creado más recientemente", "library_page_sort_created": "Creado más recientemente",
"library_page_sort_last_modified": "Last modified", "library_page_sort_last_modified": "Última modificación",
"library_page_sort_most_recent_photo": "Most recent photo", "library_page_sort_most_recent_photo": "Foto más reciente",
"library_page_sort_title": "Título del álbum", "library_page_sort_title": "Título del álbum",
"login_disabled": "Login has been disabled", "login_disabled": "El inicio de sesión ha sido desactivado",
"login_form_api_exception": "Excepción producida por API. Por favor, verifica el URL del servidor e inténtalo de nuevo.", "login_form_api_exception": "Excepción producida por API. Por favor, verifica el URL del servidor e inténtalo de nuevo.",
"login_form_button_text": "Iniciar sesión", "login_form_button_text": "Iniciar sesión",
"login_form_email_hint": "tucorreo@correo.com", "login_form_email_hint": "tucorreo@correo.com",
@@ -196,7 +207,7 @@
"login_form_failed_get_oauth_server_config": "Error al iniciar sesión con OAuth, verifica la URL del servidor", "login_form_failed_get_oauth_server_config": "Error al iniciar sesión con OAuth, verifica la URL del servidor",
"login_form_failed_get_oauth_server_disable": "La función de OAuth no está disponible en este servidor", "login_form_failed_get_oauth_server_disable": "La función de OAuth no está disponible en este servidor",
"login_form_failed_login": "Error al iniciar sesión, comprueba la URL del servidor, el correo electrónico y la contraseña", "login_form_failed_login": "Error al iniciar sesión, comprueba la URL del servidor, el correo electrónico y la contraseña",
"login_form_handshake_exception": "There was an Handshake Exception with the server. Enable self-signed certificate support in the settings if you are using a self-signed certificate.", "login_form_handshake_exception": "Hubo un error de verificación del certificado del servidor. Activa el soporte para certificados autofirmados en las preferencias si estás usando un certificado autofirmado",
"login_form_label_email": "Correo electrónico", "login_form_label_email": "Correo electrónico",
"login_form_label_password": "Contraseña", "login_form_label_password": "Contraseña",
"login_form_next_button": "Siguiente", "login_form_next_button": "Siguiente",
@@ -204,24 +215,24 @@
"login_form_save_login": "Permanecer conectado", "login_form_save_login": "Permanecer conectado",
"login_form_server_empty": "Agrega la URL del servidor.", "login_form_server_empty": "Agrega la URL del servidor.",
"login_form_server_error": "No se pudo conectar al servidor.", "login_form_server_error": "No se pudo conectar al servidor.",
"login_password_changed_error": "There was an error updating your password", "login_password_changed_error": "Hubo un error actualizando la contraseña",
"login_password_changed_success": "Password updated successfully", "login_password_changed_success": "Contraseña cambiado con éxito",
"map_cannot_get_user_location": "Cannot get user's location", "map_cannot_get_user_location": "No se pudo obtener la posición del usuario",
"map_location_dialog_cancel": "Cancel", "map_location_dialog_cancel": "Cancelar",
"map_location_dialog_yes": "Yes", "map_location_dialog_yes": "",
"map_location_service_disabled_content": "Location service needs to be enabled to display assets from your current location. Do you want to enable it now?", "map_location_service_disabled_content": "Los servicios de localización deben estar activados para mostrar elementos de tu ubicación actual. Deseas activarlos ahora?",
"map_location_service_disabled_title": "Location Service disabled", "map_location_service_disabled_title": "Servicios de localización desactivados",
"map_no_assets_in_bounds": "No photos in this area", "map_no_assets_in_bounds": "No hay fotos en esta zona",
"map_no_location_permission_content": "Location permission is needed to display assets from your current location. Do you want to allow it now?", "map_no_location_permission_content": "Se necesitan permisos de ubicación para mostrar elementos de tu ubicación actual. Deseas activarlos ahora?",
"map_no_location_permission_title": "Location Permission denied", "map_no_location_permission_title": "Permisos de ubicación denegados",
"map_settings_dark_mode": "Dark mode", "map_settings_dark_mode": "Modo oscuro",
"map_settings_dialog_cancel": "Cancel", "map_settings_dialog_cancel": "Cancelar",
"map_settings_dialog_save": "Save", "map_settings_dialog_save": "Guardar",
"map_settings_dialog_title": "Map Settings", "map_settings_dialog_title": "Ajustes mapa",
"map_settings_include_show_archived": "Include Archived", "map_settings_include_show_archived": "Incluir archivados",
"map_settings_only_relative_range": "Date range", "map_settings_only_relative_range": "Rango de fechas",
"map_settings_only_show_favorites": "Show Favorite Only", "map_settings_only_show_favorites": "Mostrar solo favoritas",
"map_zoom_to_see_photos": "Zoom out to see photos", "map_zoom_to_see_photos": "Alejar para ver fotos",
"monthly_title_text_date_format": "MMMM y", "monthly_title_text_date_format": "MMMM y",
"motion_photos_page_title": "Foto en Movimiento", "motion_photos_page_title": "Foto en Movimiento",
"notification_permission_dialog_cancel": "Cancelar", "notification_permission_dialog_cancel": "Cancelar",
@@ -239,6 +250,7 @@
"partner_page_stop_sharing_content": "{} ya no podrá acceder a tus fotos", "partner_page_stop_sharing_content": "{} ya no podrá acceder a tus fotos",
"partner_page_stop_sharing_title": "¿Dejar de compartir tus fotos?", "partner_page_stop_sharing_title": "¿Dejar de compartir tus fotos?",
"partner_page_title": "Compañero", "partner_page_title": "Compañero",
"permission_onboarding_back": "Back",
"permission_onboarding_continue_anyway": "Continuar de todos modos", "permission_onboarding_continue_anyway": "Continuar de todos modos",
"permission_onboarding_get_started": "Empezar", "permission_onboarding_get_started": "Empezar",
"permission_onboarding_go_to_settings": "Ir a configuración", "permission_onboarding_go_to_settings": "Ir a configuración",
@@ -250,9 +262,11 @@
"permission_onboarding_request": "Immich requiere permiso para ver tus fotos y videos.", "permission_onboarding_request": "Immich requiere permiso para ver tus fotos y videos.",
"profile_drawer_app_logs": "Registros", "profile_drawer_app_logs": "Registros",
"profile_drawer_client_server_up_to_date": "El cliente y el servidor están actualizados", "profile_drawer_client_server_up_to_date": "El cliente y el servidor están actualizados",
"profile_drawer_documentation": "Documentación",
"profile_drawer_github": "GitHub",
"profile_drawer_settings": "Configuración", "profile_drawer_settings": "Configuración",
"profile_drawer_sign_out": "Cerrar sesión", "profile_drawer_sign_out": "Cerrar sesión",
"profile_drawer_trash": "Trash", "profile_drawer_trash": "Papelera",
"recently_added_page_title": "Recién Agregadas", "recently_added_page_title": "Recién Agregadas",
"search_bar_hint": "Busca tus fotos", "search_bar_hint": "Busca tus fotos",
"search_page_categories": "Categorías", "search_page_categories": "Categorías",
@@ -276,6 +290,7 @@
"select_user_for_sharing_page_err_album": "Error al crear álbum", "select_user_for_sharing_page_err_album": "Error al crear álbum",
"select_user_for_sharing_page_share_suggestions": "Sugerencias", "select_user_for_sharing_page_share_suggestions": "Sugerencias",
"server_info_box_app_version": "Versión de la Aplicación", "server_info_box_app_version": "Versión de la Aplicación",
"server_info_box_server_url": "URL del servidor",
"server_info_box_server_version": "Versión del Servidor", "server_info_box_server_version": "Versión del Servidor",
"setting_image_viewer_help": "El visor de detalles carga primero la miniatura pequeña, luego carga la vista previa de tamaño mediano (si está habilitada), finalmente carga la original (si está habilitada).", "setting_image_viewer_help": "El visor de detalles carga primero la miniatura pequeña, luego carga la vista previa de tamaño mediano (si está habilitada), finalmente carga la original (si está habilitada).",
"setting_image_viewer_original_subtitle": "Activar para cargar la imagen en resolución original (¡muy grande!). Deshabilitar para reducir el consumo de datos (de red y caché).", "setting_image_viewer_original_subtitle": "Activar para cargar la imagen en resolución original (¡muy grande!). Deshabilitar para reducir el consumo de datos (de red y caché).",
@@ -300,35 +315,44 @@
"share_add_photos": "Agregar fotos", "share_add_photos": "Agregar fotos",
"share_add_title": "Agregar un título", "share_add_title": "Agregar un título",
"share_create_album": "Crear álbum", "share_create_album": "Crear álbum",
"shared_album_activities_input_disable": "Comment is disabled",
"shared_album_activities_input_hint": "Say something",
"shared_album_activity_remove_content": "Do you want to delete this activity?",
"shared_album_activity_remove_title": "Delete Activity",
"shared_album_activity_setting_subtitle": "Let others respond",
"shared_album_activity_setting_title": "Comments & likes",
"share_dialog_preparing": "Preparando...", "share_dialog_preparing": "Preparando...",
"shared_link_app_bar_title": "Shared Links", "shared_link_app_bar_title": "Enlaces compartidos",
"shared_link_create_app_bar_title": "Create link to share", "shared_link_create_app_bar_title": "Crear enlace compartido",
"shared_link_create_info": "Let anyone with the link see the selected photo(s)", "shared_link_create_info": "Cualquier persona con el enlace puede ver las fotos seleccionadas",
"shared_link_create_submit_button": "Create link", "shared_link_create_submit_button": "Crear enlace",
"shared_link_edit_allow_download": "Allow public user to download", "shared_link_edit_allow_download": "Permitir descargar a usuarios públicos",
"shared_link_edit_allow_upload": "Allow public user to upload", "shared_link_edit_allow_upload": "Permitir subir a usuarios públicos",
"shared_link_edit_app_bar_title": "Edit link", "shared_link_edit_app_bar_title": "Editar enlace",
"shared_link_edit_change_expiry": "Change expiration time", "shared_link_edit_change_expiry": "Cambiar fecha de caducidad",
"shared_link_edit_description": "Description", "shared_link_edit_description": "Descripción",
"shared_link_edit_description_hint": "Enter the share description", "shared_link_edit_description_hint": "Introduce la descripción del enlace",
"shared_link_edit_show_meta": "Show metadata", "shared_link_edit_expire_after": "Expire after",
"shared_link_edit_submit_button": "Update link", "shared_link_edit_password": "Contraseña",
"shared_link_empty": "You don't have any shared links", "shared_link_edit_password_hint": "Introduce la contraseña del enlace",
"shared_link_manage_links": "Manage Shared links", "shared_link_edit_show_meta": "Mostrar metadatos",
"share_done": "Done", "shared_link_edit_submit_button": "Actualizar enlace",
"shared_link_empty": "No tienes enlaces compartidos",
"shared_link_manage_links": "Administrar enlaces compartidos",
"share_done": "Hecho",
"share_invite": "Invitar al álbum", "share_invite": "Invitar al álbum",
"sharing_page_album": "Álbumes compartidos", "sharing_page_album": "Álbumes compartidos",
"sharing_page_description": "Crea álbumes compartidos para compartir fotos y videos con personas de tu red.", "sharing_page_description": "Crea álbumes compartidos para compartir fotos y videos con personas de tu red.",
"sharing_page_empty_list": "LISTA VACIA", "sharing_page_empty_list": "LISTA VACIA",
"sharing_silver_appbar_create_shared_album": "Crear álbum compartido", "sharing_silver_appbar_create_shared_album": "Crear álbum compartido",
"sharing_silver_appbar_shared_links": "Shared links", "sharing_silver_appbar_shared_links": "Enlaces compartidos",
"sharing_silver_appbar_share_partner": "Compartir con compañero", "sharing_silver_appbar_share_partner": "Compartir con compañero",
"tab_controller_nav_library": "Biblioteca", "tab_controller_nav_library": "Biblioteca",
"tab_controller_nav_photos": "Fotos", "tab_controller_nav_photos": "Fotos",
"tab_controller_nav_search": "Buscar", "tab_controller_nav_search": "Buscar",
"tab_controller_nav_sharing": "Compartiendo", "tab_controller_nav_sharing": "Compartiendo",
"theme_setting_asset_list_storage_indicator_title": "Mostrar indicador de almacenamiento en las miniaturas de los archivos", "theme_setting_asset_list_storage_indicator_title": "Mostrar indicador de almacenamiento en las miniaturas de los archivos",
"theme_setting_asset_list_tiles_per_row_title": "Número de activos por fila ({})", "theme_setting_asset_list_tiles_per_row_title": "Número de elementos por fila ({})",
"theme_setting_dark_mode_switch": "Modo oscuro", "theme_setting_dark_mode_switch": "Modo oscuro",
"theme_setting_image_viewer_quality_subtitle": "Ajustar la calidad del visor de detalles de imágenes", "theme_setting_image_viewer_quality_subtitle": "Ajustar la calidad del visor de detalles de imágenes",
"theme_setting_image_viewer_quality_title": "Calidad del visor de imágenes", "theme_setting_image_viewer_quality_title": "Calidad del visor de imágenes",
@@ -337,30 +361,30 @@
"theme_setting_theme_title": "Tema", "theme_setting_theme_title": "Tema",
"theme_setting_three_stage_loading_subtitle": "La carga en tres etapas puede aumentar el rendimiento de carga pero provoca un consumo de red significativamente mayor", "theme_setting_three_stage_loading_subtitle": "La carga en tres etapas puede aumentar el rendimiento de carga pero provoca un consumo de red significativamente mayor",
"theme_setting_three_stage_loading_title": "Activar carga en tres etapas", "theme_setting_three_stage_loading_title": "Activar carga en tres etapas",
"translated_text_options": "Options", "translated_text_options": "Opciones",
"trash_page_delete": "Delete", "trash_page_delete": "Eliminar",
"trash_page_delete_all": "Delete All", "trash_page_delete_all": "Eliminar todos",
"trash_page_empty_trash_btn": "Empty trash", "trash_page_empty_trash_btn": "Vaciar papelera",
"trash_page_empty_trash_dialog_content": "Do you want to empty your trashed assets? These items will be permanently removed from Immich", "trash_page_empty_trash_dialog_content": "Estás seguro que quieres eliminar los elementos? Estos elementos serán eliminados de Immich permanentemente",
"trash_page_empty_trash_dialog_ok": "Ok", "trash_page_empty_trash_dialog_ok": "",
"trash_page_info": "Trashed items will be permanently deleted after {} days", "trash_page_info": "Los archivos en la papelera serán eliminados automáticamente después de {} días",
"trash_page_no_assets": "No trashed assets", "trash_page_no_assets": "No hay elementos en la papelera",
"trash_page_restore": "Restore", "trash_page_restore": "Restaurar",
"trash_page_restore_all": "Restore All", "trash_page_restore_all": "Restaurar todos",
"trash_page_select_assets_btn": "Select assets", "trash_page_select_assets_btn": "Seleccionar elementos",
"trash_page_select_btn": "Select", "trash_page_select_btn": "Seleccionar",
"trash_page_title": "Trash ({})", "trash_page_title": "Papelera ({})",
"upload_dialog_cancel": "Cancel", "upload_dialog_cancel": "Cancelar",
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?", "upload_dialog_info": "Quieres hacer una copia de seguridad al servidor de los elementos seleccionados?",
"upload_dialog_ok": "Upload", "upload_dialog_ok": "Subir",
"upload_dialog_title": "Upload Asset", "upload_dialog_title": "Subir elementos",
"version_announcement_overlay_ack": "Aceptar", "version_announcement_overlay_ack": "Aceptar",
"version_announcement_overlay_release_notes": "notas de la versión", "version_announcement_overlay_release_notes": "notas de la versión",
"version_announcement_overlay_text_1": "Hola, amigo, hay una nueva versión de", "version_announcement_overlay_text_1": "Hola, amigo, hay una nueva versión de",
"version_announcement_overlay_text_2": "por favor, tómate tu tiempo para visitar las ", "version_announcement_overlay_text_2": "por favor, tómate tu tiempo para visitar las ",
"version_announcement_overlay_text_3": " y asegúrate de que la configuración de docker-compose y .env estén actualizadas para evitar cualquier error de configuración, especialmente si utilizas WatchTower o cualquier mecanismo que actualice automáticamente la aplicación del servidor.", "version_announcement_overlay_text_3": " y asegúrate de que la configuración de docker-compose y .env estén actualizadas para evitar cualquier error de configuración, especialmente si utilizas WatchTower o cualquier mecanismo que actualice automáticamente la aplicación del servidor.",
"version_announcement_overlay_title": "Nueva versión del servidor disponible \uD83C\uDF89", "version_announcement_overlay_title": "Nueva versión del servidor disponible \uD83C\uDF89",
"viewer_remove_from_stack": "Remove from Stack", "viewer_remove_from_stack": "Quitar de la pila",
"viewer_stack_use_as_main_asset": "Use as Main Asset", "viewer_stack_use_as_main_asset": "Usar como elemento principal",
"viewer_unstack": "Un-Stack" "viewer_unstack": "Desapilar"
} }
+100 -76
View File
@@ -3,8 +3,8 @@
"add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}", "add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}",
"advanced_settings_prefer_remote_subtitle": "Algunos dispositivos tardan mucho en cargar las miniaturas de recursos encontrados el dispositivo. Activa esta opción para cargar imágenes remotas en su lugar.", "advanced_settings_prefer_remote_subtitle": "Algunos dispositivos tardan mucho en cargar las miniaturas de recursos encontrados el dispositivo. Activa esta opción para cargar imágenes remotas en su lugar.",
"advanced_settings_prefer_remote_title": "Preferir imágenes remotas", "advanced_settings_prefer_remote_title": "Preferir imágenes remotas",
"advanced_settings_self_signed_ssl_subtitle": "Skips SSL certificate verification for the server endpoint. Required for self-signed certificates.", "advanced_settings_self_signed_ssl_subtitle": "Omitir verificación del certificado SSL del servidor. Requerido para certificados autofirmados",
"advanced_settings_self_signed_ssl_title": "Allow self-signed SSL certificates", "advanced_settings_self_signed_ssl_title": "Permitir certificados autofirmados",
"advanced_settings_tile_subtitle": "Configuraciones avanzadas del usuario", "advanced_settings_tile_subtitle": "Configuraciones avanzadas del usuario",
"advanced_settings_tile_title": "Avanzado", "advanced_settings_tile_title": "Avanzado",
"advanced_settings_troubleshooting_subtitle": "Habilitar funciones adicionales para solución de problemas", "advanced_settings_troubleshooting_subtitle": "Habilitar funciones adicionales para solución de problemas",
@@ -23,9 +23,13 @@
"album_viewer_appbar_share_err_title": "Error al cambiar el título del álbum", "album_viewer_appbar_share_err_title": "Error al cambiar el título del álbum",
"album_viewer_appbar_share_leave": "Abandonar álbum ", "album_viewer_appbar_share_leave": "Abandonar álbum ",
"album_viewer_appbar_share_remove": "Eliminar del álbum", "album_viewer_appbar_share_remove": "Eliminar del álbum",
"album_viewer_appbar_share_to": "Share To",
"album_viewer_page_share_add_users": "Agregar usuarios", "album_viewer_page_share_add_users": "Agregar usuarios",
"all_people_page_title": "Personas", "all_people_page_title": "Personas",
"all_videos_page_title": "Videos", "all_videos_page_title": "Videos",
"app_bar_signout_dialog_content": "¿Estás seguro que quieres cerrar sesión?",
"app_bar_signout_dialog_ok": "Sí",
"app_bar_signout_dialog_title": "Cerrar sesión",
"archive_page_no_archived_assets": "No se encontraron recursos archivados", "archive_page_no_archived_assets": "No se encontraron recursos archivados",
"archive_page_title": "Archivo ({})", "archive_page_title": "Archivo ({})",
"asset_list_layout_settings_dynamic_layout_title": "Diseño dinámico", "asset_list_layout_settings_dynamic_layout_title": "Diseño dinámico",
@@ -59,7 +63,7 @@
"backup_controller_page_background_battery_info_title": "Optimizaciones de batería", "backup_controller_page_background_battery_info_title": "Optimizaciones de batería",
"backup_controller_page_background_charging": "Solo mientras se carga", "backup_controller_page_background_charging": "Solo mientras se carga",
"backup_controller_page_background_configure_error": "Error al configurar el servicio en segundo plano", "backup_controller_page_background_configure_error": "Error al configurar el servicio en segundo plano",
"backup_controller_page_background_delay": "Retraso en la copia de seguridad de nuevos activos: {}", "backup_controller_page_background_delay": "Retraso en la copia de seguridad de nuevos elementos: {}",
"backup_controller_page_background_description": "Activa el servicio en segundo plano para copiar automáticamente cualquier nuevos archivos sin necesidad de abrir la aplicación.", "backup_controller_page_background_description": "Activa el servicio en segundo plano para copiar automáticamente cualquier nuevos archivos sin necesidad de abrir la aplicación.",
"backup_controller_page_background_is_off": "La copia de seguridad en segundo plano automática está desactivada", "backup_controller_page_background_is_off": "La copia de seguridad en segundo plano automática está desactivada",
"backup_controller_page_background_is_on": "La copia de seguridad en segundo plano automática está desactivada", "backup_controller_page_background_is_on": "La copia de seguridad en segundo plano automática está desactivada",
@@ -71,7 +75,7 @@
"backup_controller_page_backup_sub": "Fotos y videos respaldados", "backup_controller_page_backup_sub": "Fotos y videos respaldados",
"backup_controller_page_cancel": "Cancelar", "backup_controller_page_cancel": "Cancelar",
"backup_controller_page_created": "Creado el: {}", "backup_controller_page_created": "Creado el: {}",
"backup_controller_page_desc_backup": "Activa la copia de seguridad en primer plano para cargar automáticamente nuevos recursos al servidor al abrir la aplicación.", "backup_controller_page_desc_backup": "Active la copia de seguridad para cargar automáticamente los nuevos elementos al servidor.",
"backup_controller_page_excluded": "Excluido:", "backup_controller_page_excluded": "Excluido:",
"backup_controller_page_failed": "Fallidos ({})", "backup_controller_page_failed": "Fallidos ({})",
"backup_controller_page_filename": "Nombre del archivo: {} [{}]", "backup_controller_page_filename": "Nombre del archivo: {} [{}]",
@@ -94,11 +98,11 @@
"backup_controller_page_uploading_file_info": "Cargando información del archivo", "backup_controller_page_uploading_file_info": "Cargando información del archivo",
"backup_err_only_album": "No se puede eliminar el único álbum", "backup_err_only_album": "No se puede eliminar el único álbum",
"backup_info_card_assets": "archivos", "backup_info_card_assets": "archivos",
"backup_manual_cancelled": "Cancelled", "backup_manual_cancelled": "Cancelado",
"backup_manual_failed": "Failed", "backup_manual_failed": "Fallido",
"backup_manual_in_progress": "Upload already in progress. Try after sometime", "backup_manual_in_progress": "Subida en progreso. Espere",
"backup_manual_success": "Success", "backup_manual_success": "Éxito",
"backup_manual_title": "Upload status", "backup_manual_title": "Estado de la subida",
"cache_settings_album_thumbnails": "Miniaturas de la página de la biblioteca ({} archivos)", "cache_settings_album_thumbnails": "Miniaturas de la página de la biblioteca ({} archivos)",
"cache_settings_clear_cache_button": "Borrar caché", "cache_settings_clear_cache_button": "Borrar caché",
"cache_settings_clear_cache_button_title": "Borra la caché de la aplicación. Esto afectará significativamente el rendimiento de la aplicación hasta que se reconstruya la caché.", "cache_settings_clear_cache_button_title": "Borra la caché de la aplicación. Esto afectará significativamente el rendimiento de la aplicación hasta que se reconstruya la caché.",
@@ -111,6 +115,8 @@
"cache_settings_statistics_title": "Uso de caché", "cache_settings_statistics_title": "Uso de caché",
"cache_settings_subtitle": "Controla el comportamiento del almacenamiento en caché de la aplicación móvil Immich", "cache_settings_subtitle": "Controla el comportamiento del almacenamiento en caché de la aplicación móvil Immich",
"cache_settings_thumbnail_size": "Tamaño de la caché de miniaturas ({} archivos)", "cache_settings_thumbnail_size": "Tamaño de la caché de miniaturas ({} archivos)",
"cache_settings_tile_subtitle": "Controla el comportamiento del almacenamiento local",
"cache_settings_tile_title": "Almacenamiento local",
"cache_settings_title": "Configuración de la caché", "cache_settings_title": "Configuración de la caché",
"change_password_form_confirm_password": "Confirmar Contraseña", "change_password_form_confirm_password": "Confirmar Contraseña",
"change_password_form_description": "Hola {firstName} {lastName},\n\nEsta es la primera vez que inicias sesión en el sistema o se ha solicitado cambiar tu contraseña. Por favor, introduce la nueva contraseña a continuación.", "change_password_form_description": "Hola {firstName} {lastName},\n\nEsta es la primera vez que inicias sesión en el sistema o se ha solicitado cambiar tu contraseña. Por favor, introduce la nueva contraseña a continuación.",
@@ -130,10 +136,10 @@
"control_bottom_app_bar_delete": "Eliminar", "control_bottom_app_bar_delete": "Eliminar",
"control_bottom_app_bar_favorite": "Favorito", "control_bottom_app_bar_favorite": "Favorito",
"control_bottom_app_bar_share": "Compartir", "control_bottom_app_bar_share": "Compartir",
"control_bottom_app_bar_share_to": "Share To", "control_bottom_app_bar_share_to": "Enviar",
"control_bottom_app_bar_stack": "Stack", "control_bottom_app_bar_stack": "Apilar",
"control_bottom_app_bar_unarchive": "Desarchivar", "control_bottom_app_bar_unarchive": "Desarchivar",
"control_bottom_app_bar_upload": "Upload", "control_bottom_app_bar_upload": "Subir",
"create_album_page_untitled": "Sin título", "create_album_page_untitled": "Sin título",
"create_shared_album_page_create": "Crear", "create_shared_album_page_create": "Crear",
"create_shared_album_page_share": "Compartir", "create_shared_album_page_share": "Compartir",
@@ -148,8 +154,8 @@
"delete_dialog_cancel": "Cancelar", "delete_dialog_cancel": "Cancelar",
"delete_dialog_ok": "Eliminar", "delete_dialog_ok": "Eliminar",
"delete_dialog_title": "Eliminar permanentemente", "delete_dialog_title": "Eliminar permanentemente",
"delete_shared_link_dialog_content": "Are you sure you want to delete this shared link?", "delete_shared_link_dialog_content": "Estás seguro que quieres eliminar este enlace compartido",
"delete_shared_link_dialog_title": "Delete Shared Link", "delete_shared_link_dialog_title": "Eliminar enlace compartido",
"description_input_hint_text": "Agregar descripción...", "description_input_hint_text": "Agregar descripción...",
"description_input_submit_error": "Error al actualizar la descripción, verifica el registro para obtener más detalles", "description_input_submit_error": "Error al actualizar la descripción, verifica el registro para obtener más detalles",
"exif_bottom_sheet_description": "Agregar Descripción...", "exif_bottom_sheet_description": "Agregar Descripción...",
@@ -164,14 +170,19 @@
"home_page_add_to_album_conflicts": "{added} elementos agregados al álbum {album}.\n{failed} elementos ya existen en el álbum.", "home_page_add_to_album_conflicts": "{added} elementos agregados al álbum {album}.\n{failed} elementos ya existen en el álbum.",
"home_page_add_to_album_err_local": "Aún no se pueden agregar recursos locales a álbumes, omitiendo", "home_page_add_to_album_err_local": "Aún no se pueden agregar recursos locales a álbumes, omitiendo",
"home_page_add_to_album_success": "{added} elementos agregados al álbum {album}. ", "home_page_add_to_album_success": "{added} elementos agregados al álbum {album}. ",
"home_page_album_err_partner": "Can not add partner assets to an album yet, skipping",
"home_page_archive_err_local": "Los recursos locales no pueden ser archivados, omitiendo", "home_page_archive_err_local": "Los recursos locales no pueden ser archivados, omitiendo",
"home_page_archive_err_partner": "Can not archive partner assets, skipping",
"home_page_building_timeline": "Construyendo la línea de tiempo", "home_page_building_timeline": "Construyendo la línea de tiempo",
"home_page_delete_err_partner": "Can not delete partner assets, skipping",
"home_page_favorite_err_local": "Aún no se pueden archivar recursos locales, omitiendo", "home_page_favorite_err_local": "Aún no se pueden archivar recursos locales, omitiendo",
"home_page_favorite_err_partner": "Can not favorite partner assets yet, skipping",
"home_page_first_time_notice": "Si esta es la primera vez que usas la app, por favor, asegúrate de elegir un álbum de respaldo para que la línea de tiempo pueda cargar fotos y videos en los álbumes.", "home_page_first_time_notice": "Si esta es la primera vez que usas la app, por favor, asegúrate de elegir un álbum de respaldo para que la línea de tiempo pueda cargar fotos y videos en los álbumes.",
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping", "home_page_share_err_local": "Can not share local assets via link, skipping",
"home_page_upload_err_limit": "Solo se pueden subir 30 elementos simultáneamente, omitiendo",
"image_viewer_page_state_provider_download_error": "Error de descarga", "image_viewer_page_state_provider_download_error": "Error de descarga",
"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": "Share Error", "image_viewer_page_state_provider_share_error": "Error al compartir",
"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",
@@ -179,10 +190,10 @@
"library_page_new_album": "Nuevo álbum", "library_page_new_album": "Nuevo álbum",
"library_page_sharing": "Compartiendo", "library_page_sharing": "Compartiendo",
"library_page_sort_created": "Creado más recientemente", "library_page_sort_created": "Creado más recientemente",
"library_page_sort_last_modified": "Last modified", "library_page_sort_last_modified": "Última modificación",
"library_page_sort_most_recent_photo": "Most recent photo", "library_page_sort_most_recent_photo": "Foto más reciente",
"library_page_sort_title": "Título del álbum", "library_page_sort_title": "Título del álbum",
"login_disabled": "Login has been disabled", "login_disabled": "El inicio de sesión ha sido desactivado",
"login_form_api_exception": "Excepción producida por API. Por favor, verifica el URL del servidor e inténtalo de nuevo.", "login_form_api_exception": "Excepción producida por API. Por favor, verifica el URL del servidor e inténtalo de nuevo.",
"login_form_button_text": "Iniciar sesión", "login_form_button_text": "Iniciar sesión",
"login_form_email_hint": "tucorreo@correo.com", "login_form_email_hint": "tucorreo@correo.com",
@@ -196,7 +207,7 @@
"login_form_failed_get_oauth_server_config": "Error al iniciar sesión con OAuth, verifica la URL del servidor", "login_form_failed_get_oauth_server_config": "Error al iniciar sesión con OAuth, verifica la URL del servidor",
"login_form_failed_get_oauth_server_disable": "La función de OAuth no está disponible en este servidor", "login_form_failed_get_oauth_server_disable": "La función de OAuth no está disponible en este servidor",
"login_form_failed_login": "Error al iniciar sesión, comprueba la URL del servidor, el correo electrónico y la contraseña", "login_form_failed_login": "Error al iniciar sesión, comprueba la URL del servidor, el correo electrónico y la contraseña",
"login_form_handshake_exception": "There was an Handshake Exception with the server. Enable self-signed certificate support in the settings if you are using a self-signed certificate.", "login_form_handshake_exception": "Hubo un error de verificación del certificado del servidor. Activa el soporte para certificados autofirmados en las preferencias si estás usando un certificado autofirmado",
"login_form_label_email": "Correo electrónico", "login_form_label_email": "Correo electrónico",
"login_form_label_password": "Contraseña", "login_form_label_password": "Contraseña",
"login_form_next_button": "Siguiente", "login_form_next_button": "Siguiente",
@@ -204,24 +215,24 @@
"login_form_save_login": "Permanecer conectado", "login_form_save_login": "Permanecer conectado",
"login_form_server_empty": "Agrega la URL del servidor.", "login_form_server_empty": "Agrega la URL del servidor.",
"login_form_server_error": "No se pudo conectar al servidor.", "login_form_server_error": "No se pudo conectar al servidor.",
"login_password_changed_error": "There was an error updating your password", "login_password_changed_error": "Hubo un error actualizando la contraseña",
"login_password_changed_success": "Password updated successfully", "login_password_changed_success": "Contraseña cambiado con éxito",
"map_cannot_get_user_location": "Cannot get user's location", "map_cannot_get_user_location": "No se pudo obtener la posición del usuario",
"map_location_dialog_cancel": "Cancel", "map_location_dialog_cancel": "Cancelar",
"map_location_dialog_yes": "Yes", "map_location_dialog_yes": "",
"map_location_service_disabled_content": "Location service needs to be enabled to display assets from your current location. Do you want to enable it now?", "map_location_service_disabled_content": "Los servicios de localización deben estar activados para mostrar elementos de tu ubicación actual. Deseas activarlos ahora?",
"map_location_service_disabled_title": "Location Service disabled", "map_location_service_disabled_title": "Servicios de localización desactivados",
"map_no_assets_in_bounds": "No photos in this area", "map_no_assets_in_bounds": "No hay fotos en esta zona",
"map_no_location_permission_content": "Location permission is needed to display assets from your current location. Do you want to allow it now?", "map_no_location_permission_content": "Se necesitan permisos de ubicación para mostrar elementos de tu ubicación actual. Deseas activarlos ahora?",
"map_no_location_permission_title": "Location Permission denied", "map_no_location_permission_title": "Permisos de ubicación denegados",
"map_settings_dark_mode": "Dark mode", "map_settings_dark_mode": "Modo oscuro",
"map_settings_dialog_cancel": "Cancel", "map_settings_dialog_cancel": "Cancelar",
"map_settings_dialog_save": "Save", "map_settings_dialog_save": "Guardar",
"map_settings_dialog_title": "Map Settings", "map_settings_dialog_title": "Ajustes mapa",
"map_settings_include_show_archived": "Include Archived", "map_settings_include_show_archived": "Incluir archivados",
"map_settings_only_relative_range": "Date range", "map_settings_only_relative_range": "Rango de fechas",
"map_settings_only_show_favorites": "Show Favorite Only", "map_settings_only_show_favorites": "Mostrar solo favoritas",
"map_zoom_to_see_photos": "Zoom out to see photos", "map_zoom_to_see_photos": "Alejar para ver fotos",
"monthly_title_text_date_format": "MMMM y", "monthly_title_text_date_format": "MMMM y",
"motion_photos_page_title": "Foto en Movimiento", "motion_photos_page_title": "Foto en Movimiento",
"notification_permission_dialog_cancel": "Cancelar", "notification_permission_dialog_cancel": "Cancelar",
@@ -239,6 +250,7 @@
"partner_page_stop_sharing_content": "{} ya no podrá acceder a tus fotos", "partner_page_stop_sharing_content": "{} ya no podrá acceder a tus fotos",
"partner_page_stop_sharing_title": "¿Dejar de compartir tus fotos?", "partner_page_stop_sharing_title": "¿Dejar de compartir tus fotos?",
"partner_page_title": "Compañero", "partner_page_title": "Compañero",
"permission_onboarding_back": "Back",
"permission_onboarding_continue_anyway": "Continuar de todos modos", "permission_onboarding_continue_anyway": "Continuar de todos modos",
"permission_onboarding_get_started": "Empezar", "permission_onboarding_get_started": "Empezar",
"permission_onboarding_go_to_settings": "Ir a configuración", "permission_onboarding_go_to_settings": "Ir a configuración",
@@ -250,9 +262,11 @@
"permission_onboarding_request": "Immich requiere permiso para ver tus fotos y videos.", "permission_onboarding_request": "Immich requiere permiso para ver tus fotos y videos.",
"profile_drawer_app_logs": "Registros", "profile_drawer_app_logs": "Registros",
"profile_drawer_client_server_up_to_date": "El cliente y el servidor están actualizados", "profile_drawer_client_server_up_to_date": "El cliente y el servidor están actualizados",
"profile_drawer_documentation": "Documentación",
"profile_drawer_github": "GitHub",
"profile_drawer_settings": "Configuración", "profile_drawer_settings": "Configuración",
"profile_drawer_sign_out": "Cerrar sesión", "profile_drawer_sign_out": "Cerrar sesión",
"profile_drawer_trash": "Trash", "profile_drawer_trash": "Papelera",
"recently_added_page_title": "Recién Agregadas", "recently_added_page_title": "Recién Agregadas",
"search_bar_hint": "Busca tus fotos", "search_bar_hint": "Busca tus fotos",
"search_page_categories": "Categorías", "search_page_categories": "Categorías",
@@ -276,6 +290,7 @@
"select_user_for_sharing_page_err_album": "Error al crear álbum", "select_user_for_sharing_page_err_album": "Error al crear álbum",
"select_user_for_sharing_page_share_suggestions": "Sugerencias", "select_user_for_sharing_page_share_suggestions": "Sugerencias",
"server_info_box_app_version": "Versión de la Aplicación", "server_info_box_app_version": "Versión de la Aplicación",
"server_info_box_server_url": "URL del servidor",
"server_info_box_server_version": "Versión del Servidor", "server_info_box_server_version": "Versión del Servidor",
"setting_image_viewer_help": "El visor de detalles carga primero la miniatura pequeña, luego carga la vista previa de tamaño mediano (si está habilitada), finalmente carga la original (si está habilitada).", "setting_image_viewer_help": "El visor de detalles carga primero la miniatura pequeña, luego carga la vista previa de tamaño mediano (si está habilitada), finalmente carga la original (si está habilitada).",
"setting_image_viewer_original_subtitle": "Activar para cargar la imagen en resolución original (¡muy grande!). Deshabilitar para reducir el consumo de datos (de red y caché).", "setting_image_viewer_original_subtitle": "Activar para cargar la imagen en resolución original (¡muy grande!). Deshabilitar para reducir el consumo de datos (de red y caché).",
@@ -300,35 +315,44 @@
"share_add_photos": "Agregar fotos", "share_add_photos": "Agregar fotos",
"share_add_title": "Agregar un título", "share_add_title": "Agregar un título",
"share_create_album": "Crear álbum", "share_create_album": "Crear álbum",
"shared_album_activities_input_disable": "Comment is disabled",
"shared_album_activities_input_hint": "Say something",
"shared_album_activity_remove_content": "Do you want to delete this activity?",
"shared_album_activity_remove_title": "Delete Activity",
"shared_album_activity_setting_subtitle": "Let others respond",
"shared_album_activity_setting_title": "Comments & likes",
"share_dialog_preparing": "Preparando...", "share_dialog_preparing": "Preparando...",
"shared_link_app_bar_title": "Shared Links", "shared_link_app_bar_title": "Enlaces compartidos",
"shared_link_create_app_bar_title": "Create link to share", "shared_link_create_app_bar_title": "Crear enlace compartido",
"shared_link_create_info": "Let anyone with the link see the selected photo(s)", "shared_link_create_info": "Cualquier persona con el enlace puede ver las fotos seleccionadas",
"shared_link_create_submit_button": "Create link", "shared_link_create_submit_button": "Crear enlace",
"shared_link_edit_allow_download": "Allow public user to download", "shared_link_edit_allow_download": "Permitir descargar a usuarios públicos",
"shared_link_edit_allow_upload": "Allow public user to upload", "shared_link_edit_allow_upload": "Permitir subir a usuarios públicos",
"shared_link_edit_app_bar_title": "Edit link", "shared_link_edit_app_bar_title": "Editar enlace",
"shared_link_edit_change_expiry": "Change expiration time", "shared_link_edit_change_expiry": "Cambiar fecha de caducidad",
"shared_link_edit_description": "Description", "shared_link_edit_description": "Descripción",
"shared_link_edit_description_hint": "Enter the share description", "shared_link_edit_description_hint": "Introduce la descripción del enlace",
"shared_link_edit_show_meta": "Show metadata", "shared_link_edit_expire_after": "Expire after",
"shared_link_edit_submit_button": "Update link", "shared_link_edit_password": "Contraseña",
"shared_link_empty": "You don't have any shared links", "shared_link_edit_password_hint": "Introduce la contraseña del enlace",
"shared_link_manage_links": "Manage Shared links", "shared_link_edit_show_meta": "Mostrar metadatos",
"share_done": "Done", "shared_link_edit_submit_button": "Actualizar enlace",
"shared_link_empty": "No tienes enlaces compartidos",
"shared_link_manage_links": "Administrar enlaces compartidos",
"share_done": "Hecho",
"share_invite": "Invitar al álbum", "share_invite": "Invitar al álbum",
"sharing_page_album": "Álbumes compartidos", "sharing_page_album": "Álbumes compartidos",
"sharing_page_description": "Crea álbumes compartidos para compartir fotos y videos con personas de tu red.", "sharing_page_description": "Crea álbumes compartidos para compartir fotos y videos con personas de tu red.",
"sharing_page_empty_list": "LISTA VACIA", "sharing_page_empty_list": "LISTA VACIA",
"sharing_silver_appbar_create_shared_album": "Crear álbum compartido", "sharing_silver_appbar_create_shared_album": "Crear álbum compartido",
"sharing_silver_appbar_shared_links": "Shared links", "sharing_silver_appbar_shared_links": "Enlaces compartidos",
"sharing_silver_appbar_share_partner": "Compartir con compañero", "sharing_silver_appbar_share_partner": "Compartir con compañero",
"tab_controller_nav_library": "Biblioteca", "tab_controller_nav_library": "Biblioteca",
"tab_controller_nav_photos": "Fotos", "tab_controller_nav_photos": "Fotos",
"tab_controller_nav_search": "Buscar", "tab_controller_nav_search": "Buscar",
"tab_controller_nav_sharing": "Compartiendo", "tab_controller_nav_sharing": "Compartiendo",
"theme_setting_asset_list_storage_indicator_title": "Mostrar indicador de almacenamiento en las miniaturas de los archivos", "theme_setting_asset_list_storage_indicator_title": "Mostrar indicador de almacenamiento en las miniaturas de los archivos",
"theme_setting_asset_list_tiles_per_row_title": "Número de activos por fila ({})", "theme_setting_asset_list_tiles_per_row_title": "Número de elementos por fila ({})",
"theme_setting_dark_mode_switch": "Modo oscuro", "theme_setting_dark_mode_switch": "Modo oscuro",
"theme_setting_image_viewer_quality_subtitle": "Ajustar la calidad del visor de detalles de imágenes", "theme_setting_image_viewer_quality_subtitle": "Ajustar la calidad del visor de detalles de imágenes",
"theme_setting_image_viewer_quality_title": "Calidad del visor de imágenes", "theme_setting_image_viewer_quality_title": "Calidad del visor de imágenes",
@@ -337,30 +361,30 @@
"theme_setting_theme_title": "Tema", "theme_setting_theme_title": "Tema",
"theme_setting_three_stage_loading_subtitle": "La carga en tres etapas puede aumentar el rendimiento de carga pero provoca un consumo de red significativamente mayor", "theme_setting_three_stage_loading_subtitle": "La carga en tres etapas puede aumentar el rendimiento de carga pero provoca un consumo de red significativamente mayor",
"theme_setting_three_stage_loading_title": "Activar carga en tres etapas", "theme_setting_three_stage_loading_title": "Activar carga en tres etapas",
"translated_text_options": "Options", "translated_text_options": "Opciones",
"trash_page_delete": "Delete", "trash_page_delete": "Eliminar",
"trash_page_delete_all": "Delete All", "trash_page_delete_all": "Eliminar todos",
"trash_page_empty_trash_btn": "Empty trash", "trash_page_empty_trash_btn": "Vaciar papelera",
"trash_page_empty_trash_dialog_content": "Do you want to empty your trashed assets? These items will be permanently removed from Immich", "trash_page_empty_trash_dialog_content": "Estás seguro que quieres eliminar los elementos? Estos elementos serán eliminados de Immich permanentemente",
"trash_page_empty_trash_dialog_ok": "Ok", "trash_page_empty_trash_dialog_ok": "",
"trash_page_info": "Trashed items will be permanently deleted after {} days", "trash_page_info": "Los archivos en la papelera serán eliminados automáticamente después de {} días",
"trash_page_no_assets": "No trashed assets", "trash_page_no_assets": "No hay elementos en la papelera",
"trash_page_restore": "Restore", "trash_page_restore": "Restaurar",
"trash_page_restore_all": "Restore All", "trash_page_restore_all": "Restaurar todos",
"trash_page_select_assets_btn": "Select assets", "trash_page_select_assets_btn": "Seleccionar elementos",
"trash_page_select_btn": "Select", "trash_page_select_btn": "Seleccionar",
"trash_page_title": "Trash ({})", "trash_page_title": "Papelera ({})",
"upload_dialog_cancel": "Cancel", "upload_dialog_cancel": "Cancelar",
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?", "upload_dialog_info": "Quieres hacer una copia de seguridad al servidor de los elementos seleccionados?",
"upload_dialog_ok": "Upload", "upload_dialog_ok": "Subir",
"upload_dialog_title": "Upload Asset", "upload_dialog_title": "Subir elementos",
"version_announcement_overlay_ack": "Aceptar", "version_announcement_overlay_ack": "Aceptar",
"version_announcement_overlay_release_notes": "notas de la versión", "version_announcement_overlay_release_notes": "notas de la versión",
"version_announcement_overlay_text_1": "Hola, amigo, hay una nueva versión de", "version_announcement_overlay_text_1": "Hola, amigo, hay una nueva versión de",
"version_announcement_overlay_text_2": "por favor, tómate tu tiempo para visitar las ", "version_announcement_overlay_text_2": "por favor, tómate tu tiempo para visitar las ",
"version_announcement_overlay_text_3": " y asegúrate de que la configuración de docker-compose y .env estén actualizadas para evitar cualquier error de configuración, especialmente si utilizas WatchTower o cualquier mecanismo que actualice automáticamente la aplicación del servidor.", "version_announcement_overlay_text_3": " y asegúrate de que la configuración de docker-compose y .env estén actualizadas para evitar cualquier error de configuración, especialmente si utilizas WatchTower o cualquier mecanismo que actualice automáticamente la aplicación del servidor.",
"version_announcement_overlay_title": "Nueva versión del servidor disponible \uD83C\uDF89", "version_announcement_overlay_title": "Nueva versión del servidor disponible \uD83C\uDF89",
"viewer_remove_from_stack": "Remove from Stack", "viewer_remove_from_stack": "Quitar de la pila",
"viewer_stack_use_as_main_asset": "Use as Main Asset", "viewer_stack_use_as_main_asset": "Usar como elemento principal",
"viewer_unstack": "Un-Stack" "viewer_unstack": "Desapilar"
} }
+388
View File
@@ -0,0 +1,388 @@
{
"add_to_album_bottom_sheet_added": "Agregado a {album}",
"add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}",
"advanced_settings_prefer_remote_subtitle": "Algunos dispositivos tardan mucho en cargar las miniaturas de recursos encontrados en el dispositivo. Activa esta opción para cargar imágenes remotas en su lugar.",
"advanced_settings_prefer_remote_title": "Preferir imágenes remotas",
"advanced_settings_self_signed_ssl_subtitle": "Omite la verificación del certificado SSL para la URL del servidor. Requerido para certificados autofirmados.",
"advanced_settings_self_signed_ssl_title": "Permitir certificados SSL autofirmados",
"advanced_settings_tile_subtitle": "Configuraciones avanzadas de usuario",
"advanced_settings_tile_title": "Avanzado",
"advanced_settings_troubleshooting_subtitle": "Habilitar funciones adicionales para solución de problemas",
"advanced_settings_troubleshooting_title": "Solución de problemas",
"album_info_card_backup_album_excluded": "EXCLUIDOS",
"album_info_card_backup_album_included": "INCLUIDOS",
"album_thumbnail_card_item": "1 elemento",
"album_thumbnail_card_items": "{} elementos",
"album_thumbnail_card_shared": " · Compartido",
"album_thumbnail_owned": "Propio",
"album_thumbnail_shared_by": "Compartido por {}",
"album_viewer_appbar_share_delete": "Eliminar álbum",
"album_viewer_appbar_share_err_delete": "No se ha podido eliminar el álbum",
"album_viewer_appbar_share_err_leave": "No se ha podido abandonar el álbum",
"album_viewer_appbar_share_err_remove": "Hay problemas para remover los archivos del álbum",
"album_viewer_appbar_share_err_title": "Error al cambiar el título del álbum",
"album_viewer_appbar_share_leave": "Abandonar álbum",
"album_viewer_appbar_share_remove": "Remover del álbum",
"album_viewer_appbar_share_to": "Compartir con",
"album_viewer_page_share_add_users": "Agregar usuarios",
"all_people_page_title": "Personas",
"all_videos_page_title": "Videos",
"app_bar_signout_dialog_content": "¿Estás seguro de que quieres cerrar sesión?",
"app_bar_signout_dialog_ok": "Sí",
"app_bar_signout_dialog_title": "Cerrar sesión",
"archive_page_no_archived_assets": "No se encontraron recursos archivados",
"archive_page_title": "Archivo ({})",
"asset_list_layout_settings_dynamic_layout_title": "Diseño dinámico",
"asset_list_layout_settings_group_automatically": "Automático",
"asset_list_layout_settings_group_by": "Agrupar recursos por",
"asset_list_layout_settings_group_by_month": "Mes",
"asset_list_layout_settings_group_by_month_day": "Mes + día",
"asset_list_settings_subtitle": "Configuraciones del diseño de la cuadrícula de fotos",
"asset_list_settings_title": "Cuadrícula de fotos",
"backup_album_selection_page_albums_device": "Álbumes en el dispositivo ({})",
"backup_album_selection_page_albums_tap": "Pulsar para incluir, pulsar dos veces para excluir",
"backup_album_selection_page_assets_scatter": "Los archivos pueden dispersarse en varios álbumes. De este modo, los álbumes pueden ser incluidos o excluidos durante el proceso de copia de seguridad.",
"backup_album_selection_page_select_albums": "Seleccionar álbumes",
"backup_album_selection_page_selection_info": "Información de la selección",
"backup_album_selection_page_total_assets": "Total de archivos únicos",
"backup_all": "Todos",
"backup_background_service_backup_failed_message": "Error al copiar archivos. Reintentando…",
"backup_background_service_connection_failed_message": "Error al conectar con el servidor. Reintentando…",
"backup_background_service_current_upload_notification": "Subiendo {}",
"backup_background_service_default_notification": "Verificando si hay nuevos archivos…",
"backup_background_service_error_title": "Error de copia de seguridad",
"backup_background_service_in_progress_notification": "Creando copia de seguridad de tus archivos…",
"backup_background_service_upload_failure_notification": "Error al subir {}",
"backup_controller_page_albums": "Álbumes de respaldo",
"backup_controller_page_background_app_refresh_disabled_content": "Activa la actualización en segundo plano de la aplicación en Configuración > General > Actualización en segundo plano para usar la copia de seguridad en segundo plano.",
"backup_controller_page_background_app_refresh_disabled_title": "Actualización en segundo plano desactivada",
"backup_controller_page_background_app_refresh_enable_button_text": "Ir a configuración",
"backup_controller_page_background_battery_info_link": "Muéstrame cómo",
"backup_controller_page_background_battery_info_message": "Para obtener la mejor experiencia de copia de seguridad en segundo plano, desactiva cualquier optimización de batería que restrinja la actividad en segundo plano para Immich.\n\nDado que esto es específico en cada dispositivo, busca la información necesaria del fabricante de tu dispositivo.",
"backup_controller_page_background_battery_info_ok": "Ok",
"backup_controller_page_background_battery_info_title": "Optimizaciones de batería",
"backup_controller_page_background_charging": "Sólo mientras se carga",
"backup_controller_page_background_configure_error": "Error al configurar el servicio en segundo plano",
"backup_controller_page_background_delay": "Retraso en la copia de seguridad de nuevos recursos: {}",
"backup_controller_page_background_description": "Activa el servicio en segundo plano para copiar automáticamente cualquier nuevo recurso sin necesidad de abrir la aplicación",
"backup_controller_page_background_is_off": "La copia de seguridad en segundo plano automática está desactivada",
"backup_controller_page_background_is_on": "La copia de seguridad en segundo plano automática está activada",
"backup_controller_page_background_turn_off": "Desactivar el servicio en segundo plano",
"backup_controller_page_background_turn_on": "Activar el servicio en segundo plano",
"backup_controller_page_background_wifi": "Sólo en WiFi",
"backup_controller_page_backup": "Respaldo",
"backup_controller_page_backup_selected": "Seleccionado: ",
"backup_controller_page_backup_sub": "Fotos y videos respaldados",
"backup_controller_page_cancel": "Cancelar",
"backup_controller_page_created": "Creado el: {}",
"backup_controller_page_desc_backup": "Activa la copia de seguridad en primer plano para subir automáticamente nuevos recursos al servidor al abrir la aplicación.",
"backup_controller_page_excluded": "Excluído: ",
"backup_controller_page_failed": "Fallidos ({})",
"backup_controller_page_filename": "Nombre del archivo: {} [{}]",
"backup_controller_page_id": "ID: {}",
"backup_controller_page_info": "Información del respaldo",
"backup_controller_page_none_selected": "Ninguno seleccionado",
"backup_controller_page_remainder": "Restante",
"backup_controller_page_remainder_sub": "Fotos y videos restantes para hacer una copia de seguridad de la selección",
"backup_controller_page_select": "Seleccionar",
"backup_controller_page_server_storage": "Almacenamiento del servidor",
"backup_controller_page_start_backup": "Iniciar respaldo",
"backup_controller_page_status_off": "La copia de seguridad automática en primer plano está desactivada",
"backup_controller_page_status_on": "La copia de seguridad automática en primer plano está activada",
"backup_controller_page_storage_format": "{} de {} usado",
"backup_controller_page_to_backup": "Álbumes a respaldar",
"backup_controller_page_total": "Total",
"backup_controller_page_total_sub": "Todas las fotos y videos únicos de los álbumes seleccionados",
"backup_controller_page_turn_off": "Desactivar la copia de seguridad en primer plano",
"backup_controller_page_turn_on": "Activar la copia de seguridad en primer plano",
"backup_controller_page_uploading_file_info": "Subiendo información del archivo",
"backup_err_only_album": "No se puede eliminar el único álbum",
"backup_info_card_assets": "recursos",
"backup_manual_cancelled": "Cancelado",
"backup_manual_failed": "Fallido",
"backup_manual_in_progress": "Subida ya en progreso. Inténtalo después de un tiempo",
"backup_manual_success": "Exitoso",
"backup_manual_title": "Estado de subida",
"cache_settings_album_thumbnails": "Miniaturas de la página de la biblioteca ({} recursos)",
"cache_settings_clear_cache_button": "Borrar caché",
"cache_settings_clear_cache_button_title": "Borra la caché de la aplicación. Esto afectará significativamente el rendimiento de la aplicación hasta que se reconstruya la caché.",
"cache_settings_image_cache_size": "Tamaño de la caché de imágenes ({} recursos)",
"cache_settings_statistics_album": "Miniaturas de la biblioteca",
"cache_settings_statistics_assets": "{} recursos ({})",
"cache_settings_statistics_full": "Imágenes completas",
"cache_settings_statistics_shared": "Miniaturas de álbumes compartidos",
"cache_settings_statistics_thumbnail": "Miniaturas",
"cache_settings_statistics_title": "Uso de caché",
"cache_settings_subtitle": "Controla el comportamiento de la caché de la aplicación móvil Immich",
"cache_settings_thumbnail_size": "Tamaño de la caché de miniaturas ({} recursos)",
"cache_settings_tile_subtitle": "Controla el comportamiento del almacenamiento local",
"cache_settings_tile_title": "Almacenamiento local",
"cache_settings_title": "Configuración de la caché",
"change_password_form_confirm_password": "Confirmar Contraseña",
"change_password_form_description": "Hola {name},\n\nÉsta es la primera vez que inicias sesión en el sistema o se ha solicitado cambiar tu contraseña. Por favor, introduce la nueva contraseña a continuación.",
"change_password_form_new_password": "Nueva Contraseña",
"change_password_form_password_mismatch": "Las contraseñas no coinciden",
"change_password_form_reenter_new_password": "Vuelve a ingresar la nueva contraseña",
"common_add_to_album": "Agregar al álbum",
"common_change_password": "Cambiar Contraseña",
"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_shared": "Compartido",
"control_bottom_app_bar_add_to_album": "Agregar al álbum",
"control_bottom_app_bar_album_info": "{} elementos",
"control_bottom_app_bar_album_info_shared": "{} elementos · Compartido",
"control_bottom_app_bar_archive": "Archivar",
"control_bottom_app_bar_create_new_album": "Crear nuevo álbum",
"control_bottom_app_bar_delete": "Eliminar",
"control_bottom_app_bar_favorite": "Favorito",
"control_bottom_app_bar_share": "Compartir",
"control_bottom_app_bar_share_to": "Compartir con",
"control_bottom_app_bar_stack": "Apilar",
"control_bottom_app_bar_unarchive": "Desarchivar",
"control_bottom_app_bar_upload": "Subir",
"create_album_page_untitled": "Sin título",
"create_shared_album_page_create": "Crear",
"create_shared_album_page_share": "Compartir",
"create_shared_album_page_share_add_assets": "AGREGAR RECURSOS",
"create_shared_album_page_share_select_photos": "Seleccionar fotos",
"curated_location_page_title": "Lugares",
"curated_object_page_title": "Objetos",
"daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd de MMM, yyyy",
"date_format": "E d, LLL y • h:mm a",
"delete_dialog_alert": "Estos elementos se eliminarán permanentemente de Immich y de tu dispositivo",
"delete_dialog_cancel": "Cancelar",
"delete_dialog_ok": "Eliminar",
"delete_dialog_title": "Eliminar permanentemente",
"delete_shared_link_dialog_content": "¿Estás seguro de que quieres eliminar este enlace compartido?",
"delete_shared_link_dialog_title": "Eliminar enlace compartido",
"description_input_hint_text": "Agregar descripción...",
"description_input_submit_error": "Error al actualizar la descripción, verifica el registro para obtener más detalles",
"exif_bottom_sheet_description": "Agregar Descripción...",
"exif_bottom_sheet_details": "DETALLES",
"exif_bottom_sheet_location": "UBICACIÓN",
"experimental_settings_new_asset_list_subtitle": "Trabajo en progreso",
"experimental_settings_new_asset_list_title": "Habilitar cuadrícula fotográfica experimental",
"experimental_settings_subtitle": "¡Úsalo bajo tu propio riesgo!",
"experimental_settings_title": "Experimental",
"favorites_page_no_favorites": "No se encontraron recursos marcados como favoritos",
"favorites_page_title": "Favoritos",
"home_page_add_to_album_conflicts": "{added} recursos agregados al álbum {album}.\n{failed} recursos ya existen en el álbum.",
"home_page_add_to_album_err_local": "Aún no se pueden agregar recursos locales a álbumes, omitiendo",
"home_page_add_to_album_success": "{added} recursos agregados al álbum {album}.",
"home_page_archive_err_local": "Aún no se pueden archivar recursos locales, omitiendo",
"home_page_building_timeline": "Construyendo la línea de tiempo",
"home_page_favorite_err_local": "Aún no se pueden marcar recursos locales como favoritos, omitiendo",
"home_page_first_time_notice": "Si ésta es la primera vez que usas la app, por favor, asegúrate de elegir un álbum de respaldo para que la línea de tiempo pueda cargar fotos y videos en los álbumes.",
"home_page_upload_err_limit": "Sólo se pueden subir un máximo de 30 recursos a la vez, omitiendo",
"home_page_favorite_err_partner": "Aún no se pueden marcar recursos de compañeros como favoritos, omitiendo",
"home_page_album_err_partner": "Aún no se pueden agregar recursos de compañeros a un álbum, omitiendo",
"home_page_archive_err_partner": "Aún no se pueden archivar recursos de compañeros, omitiendo",
"home_page_delete_err_partner": "Aún no se pueden eliminar recursos de compañeros, omitiendo",
"image_viewer_page_state_provider_download_error": "Error de descarga",
"image_viewer_page_state_provider_download_success": "Descarga exitosa",
"image_viewer_page_state_provider_share_error": "Error al compartir",
"library_page_albums": "Álbumes",
"library_page_archive": "Archivo",
"library_page_device_albums": "Álbumes en el dispositivo",
"library_page_favorites": "Favoritos",
"library_page_new_album": "Nuevo álbum",
"library_page_sharing": "Compartiendo",
"library_page_sort_created": "Creado más recientemente",
"library_page_sort_last_modified": "Modificado más recientemente",
"library_page_sort_most_recent_photo": "Foto más reciente",
"library_page_sort_title": "Título del álbum",
"login_disabled": "El inicio de sesión ha sido deshabilitado",
"login_form_api_exception": "Excepción de API. Por favor, verifica la URL del servidor e inténtalo de nuevo.",
"login_form_button_text": "Iniciar sesión",
"login_form_email_hint": "tucorreo@correo.com",
"login_form_endpoint_hint": "http://ip-de-tu-servidor:puerto/api",
"login_form_endpoint_url": "URL del servidor",
"login_form_err_http": "Por favor, especifique http:// o https://",
"login_form_err_invalid_email": "Correo electrónico inválido",
"login_form_err_invalid_url": "URL inválido",
"login_form_err_leading_whitespace": "Espacio en blanco inicial",
"login_form_err_trailing_whitespace": "Espacio en blanco al final",
"login_form_failed_get_oauth_server_config": "Error al iniciar sesión con OAuth, verifica la URL del servidor",
"login_form_failed_get_oauth_server_disable": "La función de OAuth no está disponible en este servidor",
"login_form_failed_login": "Error al iniciar sesión, comprueba la URL del servidor, el correo electrónico y la contraseña",
"login_form_handshake_exception": "Hubo una excepción de handshake con el servidor. Habilita el soporte de certificado autofirmado en la configuración si estás usando un certificado autofirmado.",
"login_form_label_email": "Correo electrónico",
"login_form_label_password": "Contraseña",
"login_form_next_button": "Siguiente",
"login_form_password_hint": "contraseña",
"login_form_save_login": "Permanecer conectado",
"login_form_server_empty": "Introduce la URL del servidor.",
"login_form_server_error": "No se pudo conectar al servidor.",
"login_password_changed_error": "Hubo un error al actualizar tu contraseña",
"login_password_changed_success": "Contraseña actualizada exitosamente",
"map_cannot_get_user_location": "No se puede obtener la ubicación del usuario",
"map_location_dialog_cancel": "Cancelar",
"map_location_dialog_yes": "Sí",
"map_location_service_disabled_content": "El servicio de ubicación debe estar habilitado para mostrar recursos desde tu ubicación actual. ¿Quieres habilitarlo ahora?",
"map_location_service_disabled_title": "Servicio de ubicación deshabilitado",
"map_no_assets_in_bounds": "No hay fotos en esta área",
"map_no_location_permission_content": "Se necesita permiso de ubicación para mostrar recursos desde tu ubicación actual. ¿Quieres permitirlo ahora?",
"map_no_location_permission_title": "Permiso de ubicación denegado",
"map_settings_dark_mode": "Modo oscuro",
"map_settings_dialog_cancel": "Cancelar",
"map_settings_dialog_save": "Guardar",
"map_settings_dialog_title": "Configuración del mapa",
"map_settings_include_show_archived": "Incluir archivados",
"map_settings_only_relative_range": "Rango de fechas",
"map_settings_only_show_favorites": "Mostrar sólo favoritos",
"map_zoom_to_see_photos": "Aleja el mapa para ver las fotos",
"monthly_title_text_date_format": "MMMM y",
"motion_photos_page_title": "Fotos en movimiento",
"notification_permission_dialog_cancel": "Cancelar",
"notification_permission_dialog_content": "Para activar las notificaciones, ve a Configuración y selecciona permitir.",
"notification_permission_dialog_settings": "Configuración",
"notification_permission_list_tile_content": "Concede permiso para activar las notificaciones.",
"notification_permission_list_tile_enable_button": "Activar notificaciones",
"notification_permission_list_tile_title": "Permisos de notificación",
"partner_page_add_partner": "Agregar compañero",
"partner_page_empty_message": "Tus fotos aún no se han compartido con ningún compañero.",
"partner_page_no_more_users": "No hay más usuarios para agregar",
"partner_page_partner_add_failed": "Error al agregar compañero",
"partner_page_select_partner": "Seleccionar compañero",
"partner_page_shared_to_title": "Compartido con",
"partner_page_stop_sharing_content": "{} ya no podrá acceder a tus fotos",
"partner_page_stop_sharing_title": "¿Dejar de compartir tus fotos?",
"partner_page_title": "Compañero",
"permission_onboarding_continue_anyway": "Continuar de todos modos",
"permission_onboarding_get_started": "Empezar",
"permission_onboarding_go_to_settings": "Ir a configuración",
"permission_onboarding_grant_permission": "Conceder permiso",
"permission_onboarding_log_out": "Cerrar sesión",
"permission_onboarding_permission_denied": "Permiso denegado. Para usar Immich, concede permisos de fotos y videos en Configuración.",
"permission_onboarding_permission_granted": "¡Permiso concedido! Todo listo.",
"permission_onboarding_permission_limited": "Permiso limitado. Para permitir que Immich haga copia de seguridad y gestione toda tu colección de galería, concede permisos de fotos y videos en Configuración.",
"permission_onboarding_request": "Immich requiere permiso para ver tus fotos y videos.",
"profile_drawer_app_logs": "Registros",
"profile_drawer_client_server_up_to_date": "El cliente y el servidor están actualizados",
"profile_drawer_documentation": "Documentación",
"profile_drawer_github": "GitHub",
"profile_drawer_settings": "Configuración",
"profile_drawer_sign_out": "Cerrar sesión",
"profile_drawer_trash": "Papelera",
"recently_added_page_title": "Recién Agregados",
"search_bar_hint": "Busca tus fotos",
"search_page_categories": "Categorías",
"search_page_favorites": "Favoritos",
"search_page_motion_photos": "Fotos en .ovimiento",
"search_page_no_objects": "No hay información de objetos disponible",
"search_page_no_places": "No hay información de lugares disponible",
"search_page_people": "Personas",
"search_page_places": "Lugares",
"search_page_recently_added": "Recién agregados",
"search_page_screenshots": "Capturas de pantalla",
"search_page_selfies": "Selfies",
"search_page_things": "Cosas",
"search_page_videos": "Videos",
"search_page_view_all_button": "Ver todo",
"search_page_your_activity": "Tu actividad",
"search_result_page_new_search_hint": "Nueva búsqueda",
"search_suggestion_list_smart_search_hint_1": "La búsqueda inteligente está habilitada por defecto, para buscar metadatos utiliza la sintaxis ",
"search_suggestion_list_smart_search_hint_2": "m:tu-término-de-búsqueda",
"select_additional_user_for_sharing_page_suggestions": "Sugerencias",
"select_user_for_sharing_page_err_album": "Error al crear álbum",
"select_user_for_sharing_page_share_suggestions": "Sugerencias",
"server_info_box_app_version": "Versión de la Aplicación",
"server_info_box_server_url": "URL del Servidor",
"server_info_box_server_version": "Versión del Servidor",
"setting_image_viewer_help": "El visor de detalles carga primero la miniatura pequeña, luego carga la vista previa de tamaño mediano (si está habilitada), finalmente carga la original (si está habilitada).",
"setting_image_viewer_original_subtitle": "Activar para cargar la imagen en resolución original (¡muy grande!). Deshabilitar para reducir el consumo de datos (de red y caché).",
"setting_image_viewer_original_title": "Cargar imagen original",
"setting_image_viewer_preview_subtitle": "Activar para cargar una imagen de resolución media. Deshabilitar para cargar directamente la imagen original o usar una miniatura.",
"setting_image_viewer_preview_title": "Cargar imagen de previsualización",
"setting_notifications_notify_failures_grace_period": "Notificar fallos de copia de seguridad en segundo plano: {}",
"setting_notifications_notify_hours": "{} horas",
"setting_notifications_notify_immediately": "inmediatamente",
"setting_notifications_notify_minutes": "{} minutos",
"setting_notifications_notify_never": "nunca",
"setting_notifications_notify_seconds": "{} segundos",
"setting_notifications_single_progress_subtitle": "Información detallada del progreso de subida de cada recurso",
"setting_notifications_single_progress_title": "Mostrar progreso detallado de copia de seguridad en segundo plano",
"setting_notifications_subtitle": "Ajusta tus preferencias de notificación",
"setting_notifications_title": "Notificaciones",
"setting_notifications_total_progress_subtitle": "Progreso general de subida (recursos completados/totales)",
"setting_notifications_total_progress_title": "Mostrar progreso total de copia de seguridad en segundo plano",
"setting_pages_app_bar_settings": "Configuración",
"settings_require_restart": "Por favor, reinicia Immich para aplicar este ajuste",
"share_add": "Agregar",
"share_add_photos": "Agregar fotos",
"share_add_title": "Agregar un título",
"share_create_album": "Crear álbum",
"shared_album_activities_input_disable": "Los comentarios están deshabilitados",
"shared_album_activities_input_hint": "Di algo",
"shared_album_activity_remove_content": "¿Quieres eliminar esta actividad?",
"shared_album_activity_remove_title": "Eliminar actividad",
"shared_album_activity_setting_subtitle": "Permitir que otros respondan",
"shared_album_activity_setting_title": "Comentarios y me gusta",
"share_dialog_preparing": "Preparando...",
"shared_link_app_bar_title": "Enlaces compartidos",
"shared_link_create_app_bar_title": "Crear enlace para compartir",
"shared_link_create_info": "Permitir que cualquiera con el enlace vea la(s) foto(s) seleccionada(s)",
"shared_link_create_submit_button": "Crear enlace",
"shared_link_edit_allow_download": "Permitir que el usuario público pueda descargar",
"shared_link_edit_allow_upload": "Permitir que el usuario público pueda subir",
"shared_link_edit_app_bar_title": "Editar enlace",
"shared_link_edit_change_expiry": "Cambiar tiempo de expiración",
"shared_link_edit_description": "Descripción",
"shared_link_edit_description_hint": "Introduce la descripción del enlace",
"shared_link_edit_expire_after": "Expirar después de",
"shared_link_edit_password": "Contraseña",
"shared_link_edit_password_hint": "Introduce la contraseña del enlace",
"shared_link_edit_show_meta": "Mostrar metadatos",
"shared_link_edit_submit_button": "Actualizar enlace",
"shared_link_empty": "No tienes ningún enlace compartido",
"shared_link_manage_links": "Administrar enlaces compartidos",
"share_done": "Hecho",
"share_invite": "Invitar al álbum",
"sharing_page_album": "Álbumes compartidos",
"sharing_page_description": "Crea álbumes compartidos para compartir fotos y videos con personas de tu red.",
"sharing_page_empty_list": "LISTA VACÍA",
"sharing_silver_appbar_create_shared_album": "Crear álbum compartido",
"sharing_silver_appbar_shared_links": "Enlaces compartidos",
"sharing_silver_appbar_share_partner": "Compartir con compañero",
"tab_controller_nav_library": "Biblioteca",
"tab_controller_nav_photos": "Fotos",
"tab_controller_nav_search": "Buscar",
"tab_controller_nav_sharing": "Compartidos",
"theme_setting_asset_list_storage_indicator_title": "Mostrar indicador de almacenamiento en las miniaturas de los recursos",
"theme_setting_asset_list_tiles_per_row_title": "Número de recursos por fila ({})",
"theme_setting_dark_mode_switch": "Modo oscuro",
"theme_setting_image_viewer_quality_subtitle": "Ajustar la calidad del visor de detalles de imágenes",
"theme_setting_image_viewer_quality_title": "Calidad del visor de imágenes",
"theme_setting_system_theme_switch": "Automático (seguir ajuste del sistema)",
"theme_setting_theme_subtitle": "Elige la configuración del tema de la aplicación",
"theme_setting_theme_title": "Tema",
"theme_setting_three_stage_loading_subtitle": "La carga en tres etapas puede aumentar el rendimiento de carga pero provoca un consumo de red significativamente mayor",
"theme_setting_three_stage_loading_title": "Activar carga en tres etapas",
"translated_text_options": "Opciones",
"trash_page_delete": "Eliminar",
"trash_page_delete_all": "Eliminar todos",
"trash_page_empty_trash_btn": "Vaciar papelera",
"trash_page_empty_trash_dialog_content": "¿Quieres vaciar los recursos de la papelera? Estos elementos serán eliminados permanentemente de Immich",
"trash_page_empty_trash_dialog_ok": "Ok",
"trash_page_info": "Los elementos en la papelera serán borrados permanentemente luego de {} días",
"trash_page_no_assets": "No hay recursos en la papelera",
"trash_page_restore": "Restaurar",
"trash_page_restore_all": "Restaurar todos",
"trash_page_select_assets_btn": "Seleccionar recursos",
"trash_page_select_btn": "Seleccionar",
"trash_page_title": "Papelera ({})",
"upload_dialog_cancel": "Cancelar",
"upload_dialog_info": "¿Quieres respaldar los recursos seleccionados en el servidor?",
"upload_dialog_ok": "Subir",
"upload_dialog_title": "Subir recurso",
"version_announcement_overlay_ack": "Aceptar",
"version_announcement_overlay_release_notes": "notas de la versión",
"version_announcement_overlay_text_1": "Hola, amigo, hay una nueva versión de",
"version_announcement_overlay_text_2": "por favor, tómate tu tiempo para visitar las ",
"version_announcement_overlay_text_3": " y asegúrate de que la configuración de docker-compose y .env estén actualizadas para evitar cualquier error de configuración, especialmente si utilizas WatchTower o cualquier mecanismo que actualice automáticamente la aplicación del servidor.",
"version_announcement_overlay_title": "Nueva versión del servidor disponible \uD83C\uDF89",
"viewer_remove_from_stack": "Eliminar de la pila",
"viewer_stack_use_as_main_asset": "Utilizar como recurso principal",
"viewer_unstack": "Desapilar"
}
+85 -61
View File
@@ -3,8 +3,8 @@
"add_to_album_bottom_sheet_already_exists": "Kohde on jo albumissa {album}", "add_to_album_bottom_sheet_already_exists": "Kohde on jo albumissa {album}",
"advanced_settings_prefer_remote_subtitle": "Jotkut laitteet ovat erittäin hitaita lataamaan esikatselukuvia laitteen kohteista. Aktivoi tämä asetus käyttääksesi etäkuvia.", "advanced_settings_prefer_remote_subtitle": "Jotkut laitteet ovat erittäin hitaita lataamaan esikatselukuvia laitteen kohteista. Aktivoi tämä asetus käyttääksesi etäkuvia.",
"advanced_settings_prefer_remote_title": "Suosi etäkuvia", "advanced_settings_prefer_remote_title": "Suosi etäkuvia",
"advanced_settings_self_signed_ssl_subtitle": "Skips SSL certificate verification for the server endpoint. Required for self-signed certificates.", "advanced_settings_self_signed_ssl_subtitle": "Ohita SSL sertifikaattivarmennus palvelimen päätepisteellä. Vaaditaan self-signed -sertifikaateissa.",
"advanced_settings_self_signed_ssl_title": "Allow self-signed SSL certificates", "advanced_settings_self_signed_ssl_title": "Salli self-signed SSL -sertifikaatit",
"advanced_settings_tile_subtitle": "Edistyneen käyttäjän asetukset", "advanced_settings_tile_subtitle": "Edistyneen käyttäjän asetukset",
"advanced_settings_tile_title": "Edistyneet", "advanced_settings_tile_title": "Edistyneet",
"advanced_settings_troubleshooting_subtitle": "Kytke vianetsinnän lisäominaisuudet päälle", "advanced_settings_troubleshooting_subtitle": "Kytke vianetsinnän lisäominaisuudet päälle",
@@ -23,9 +23,13 @@
"album_viewer_appbar_share_err_title": "Albumin nimen muuttaminen epäonnistui", "album_viewer_appbar_share_err_title": "Albumin nimen muuttaminen epäonnistui",
"album_viewer_appbar_share_leave": "Poistu albumista", "album_viewer_appbar_share_leave": "Poistu albumista",
"album_viewer_appbar_share_remove": "Poista albumista", "album_viewer_appbar_share_remove": "Poista albumista",
"album_viewer_appbar_share_to": "Jaa",
"album_viewer_page_share_add_users": "Lisää käyttäjiä", "album_viewer_page_share_add_users": "Lisää käyttäjiä",
"all_people_page_title": "Ihmiset", "all_people_page_title": "Ihmiset",
"all_videos_page_title": "Videot", "all_videos_page_title": "Videot",
"app_bar_signout_dialog_content": "Haluatko varmasti kirjautua ulos?",
"app_bar_signout_dialog_ok": "Kyllä",
"app_bar_signout_dialog_title": "Kirjaudu ulos",
"archive_page_no_archived_assets": "Arkistoituja kohteita ei löytynyt", "archive_page_no_archived_assets": "Arkistoituja kohteita ei löytynyt",
"archive_page_title": "Arkisto ({})", "archive_page_title": "Arkisto ({})",
"asset_list_layout_settings_dynamic_layout_title": "Dynaaminen asetelma", "asset_list_layout_settings_dynamic_layout_title": "Dynaaminen asetelma",
@@ -111,6 +115,8 @@
"cache_settings_statistics_title": "Välimuistin käyttö", "cache_settings_statistics_title": "Välimuistin käyttö",
"cache_settings_subtitle": "Hallitse Immich-mobiilisovelluksen välimuistin käyttöä", "cache_settings_subtitle": "Hallitse Immich-mobiilisovelluksen välimuistin käyttöä",
"cache_settings_thumbnail_size": "Esikatselukuvien välimuistin koko ({} kohdetta)", "cache_settings_thumbnail_size": "Esikatselukuvien välimuistin koko ({} kohdetta)",
"cache_settings_tile_subtitle": "Hallitse paikallista tallenustilaa",
"cache_settings_tile_title": "Paikallinen tallennustila",
"cache_settings_title": "Välimuistin asetukset", "cache_settings_title": "Välimuistin asetukset",
"change_password_form_confirm_password": "Vahvista salasana", "change_password_form_confirm_password": "Vahvista salasana",
"change_password_form_description": "Hei {firstName} {lastName},\n\nTämä on joko ensimmäinen kirjautumisesi järjestelmään tai salasanan vaihtaminen vaihtaminen on pakotettu. Ole hyvä ja syötä uusi salasana alle.", "change_password_form_description": "Hei {firstName} {lastName},\n\nTämä on joko ensimmäinen kirjautumisesi järjestelmään tai salasanan vaihtaminen vaihtaminen on pakotettu. Ole hyvä ja syötä uusi salasana alle.",
@@ -130,10 +136,10 @@
"control_bottom_app_bar_delete": "Poista", "control_bottom_app_bar_delete": "Poista",
"control_bottom_app_bar_favorite": "Suosikki", "control_bottom_app_bar_favorite": "Suosikki",
"control_bottom_app_bar_share": "Jaa", "control_bottom_app_bar_share": "Jaa",
"control_bottom_app_bar_share_to": "Share To", "control_bottom_app_bar_share_to": "Jaa",
"control_bottom_app_bar_stack": "Stack", "control_bottom_app_bar_stack": "Pinoa",
"control_bottom_app_bar_unarchive": "Palauta arkistosta", "control_bottom_app_bar_unarchive": "Palauta arkistosta",
"control_bottom_app_bar_upload": "Upload", "control_bottom_app_bar_upload": "Siirrä palvelimelle",
"create_album_page_untitled": "Nimetön", "create_album_page_untitled": "Nimetön",
"create_shared_album_page_create": "Luo", "create_shared_album_page_create": "Luo",
"create_shared_album_page_share": "Jaa", "create_shared_album_page_share": "Jaa",
@@ -148,8 +154,8 @@
"delete_dialog_cancel": "Peruuta", "delete_dialog_cancel": "Peruuta",
"delete_dialog_ok": "Poista", "delete_dialog_ok": "Poista",
"delete_dialog_title": "Poista pysyvästi", "delete_dialog_title": "Poista pysyvästi",
"delete_shared_link_dialog_content": "Are you sure you want to delete this shared link?", "delete_shared_link_dialog_content": "Oletko varma, että haluat poistaa jaetun linkin?",
"delete_shared_link_dialog_title": "Delete Shared Link", "delete_shared_link_dialog_title": "Poista jaettu linkki",
"description_input_hint_text": "Lisää kuvaus...", "description_input_hint_text": "Lisää kuvaus...",
"description_input_submit_error": "Virhe kuvauksen päivittämisessä, tarkista lisätiedot lokista", "description_input_submit_error": "Virhe kuvauksen päivittämisessä, tarkista lisätiedot lokista",
"exif_bottom_sheet_description": "Lisää kuvaus…", "exif_bottom_sheet_description": "Lisää kuvaus…",
@@ -164,14 +170,19 @@
"home_page_add_to_album_conflicts": "Lisätty {added} kohdetta albumiin {album}. {failed} kohdetta on jo albumissa.", "home_page_add_to_album_conflicts": "Lisätty {added} kohdetta albumiin {album}. {failed} kohdetta on jo albumissa.",
"home_page_add_to_album_err_local": "Paikallisten kohteiden lisääminen albumeihin ei ole mahdollista, ohitetaan", "home_page_add_to_album_err_local": "Paikallisten kohteiden lisääminen albumeihin ei ole mahdollista, ohitetaan",
"home_page_add_to_album_success": "Lisätty {added} kohdetta albumiin {album}.", "home_page_add_to_album_success": "Lisätty {added} kohdetta albumiin {album}.",
"home_page_album_err_partner": "Kumppanin kohteita ei voi vielä lisätä albumiin. Hypätään yli",
"home_page_archive_err_local": "Paikallisten kohteiden arkistointi ei ole mahdollista, ohitetaan", "home_page_archive_err_local": "Paikallisten kohteiden arkistointi ei ole mahdollista, ohitetaan",
"home_page_archive_err_partner": "Kumppanin kohteita ei voi arkistoida. Hypätään yli",
"home_page_building_timeline": "Rakennetaan aikajanaa", "home_page_building_timeline": "Rakennetaan aikajanaa",
"home_page_delete_err_partner": "Kumppanin kohteita ei voi poistaa.Hypätään yli",
"home_page_favorite_err_local": "Paikallisten kohteiden lisääminen suosikkeihin ei ole mahdollista, ohitetaan", "home_page_favorite_err_local": "Paikallisten kohteiden lisääminen suosikkeihin ei ole mahdollista, ohitetaan",
"home_page_favorite_err_partner": "Kumppanin kohteita ei voi vielä merkitä suosikiksi. Hypätään yli",
"home_page_first_time_notice": "Jos käytät sovellusta ensimmäistä kertaa, muista valita varmuuskopioitavat albumi(t), jotta aikajanalla voi olla kuvia ja videoita.", "home_page_first_time_notice": "Jos käytät sovellusta ensimmäistä kertaa, muista valita varmuuskopioitavat albumi(t), jotta aikajanalla voi olla kuvia ja videoita.",
"home_page_share_err_local": "Can not share local assets via link, skipping",
"home_page_upload_err_limit": "Voit lähettää palvelimelle enintään 30 kohdetta kerrallaan, ohitetaan", "home_page_upload_err_limit": "Voit lähettää palvelimelle enintään 30 kohdetta kerrallaan, ohitetaan",
"image_viewer_page_state_provider_download_error": "Lataus epäonnistui", "image_viewer_page_state_provider_download_error": "Lataus epäonnistui",
"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": "Share Error", "image_viewer_page_state_provider_share_error": "Jakovirhe",
"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",
@@ -179,8 +190,8 @@
"library_page_new_album": "Uusi albumi", "library_page_new_album": "Uusi albumi",
"library_page_sharing": "Jakaminen", "library_page_sharing": "Jakaminen",
"library_page_sort_created": "Viimeisin luotu", "library_page_sort_created": "Viimeisin luotu",
"library_page_sort_last_modified": "Last modified", "library_page_sort_last_modified": "Viimeksi muokattu",
"library_page_sort_most_recent_photo": "Most recent photo", "library_page_sort_most_recent_photo": "Viimeisin kuva",
"library_page_sort_title": "Albumin otsikko", "library_page_sort_title": "Albumin otsikko",
"login_disabled": "Kirjautuminen on poistettu käytöstä", "login_disabled": "Kirjautuminen on poistettu käytöstä",
"login_form_api_exception": "API-virhe. Tarkista palvelimen URL-osoite ja yritä uudelleen.", "login_form_api_exception": "API-virhe. Tarkista palvelimen URL-osoite ja yritä uudelleen.",
@@ -196,7 +207,7 @@
"login_form_failed_get_oauth_server_config": "Virhe kirjauduttaessa OAuth:lla, tarkista palvelimen URL", "login_form_failed_get_oauth_server_config": "Virhe kirjauduttaessa OAuth:lla, tarkista palvelimen URL",
"login_form_failed_get_oauth_server_disable": "OAuth-ominaisuus ei ole käytössä tällä palvelimella", "login_form_failed_get_oauth_server_disable": "OAuth-ominaisuus ei ole käytössä tällä palvelimella",
"login_form_failed_login": "Virhe kirjautumisessa. Tarkista palvelimen URL, sähköpostiosoite ja salasana.", "login_form_failed_login": "Virhe kirjautumisessa. Tarkista palvelimen URL, sähköpostiosoite ja salasana.",
"login_form_handshake_exception": "There was an Handshake Exception with the server. Enable self-signed certificate support in the settings if you are using a self-signed certificate.", "login_form_handshake_exception": "Tapahtui poikkeus kättelyssä palvelimen kanssa. Kytke päälle self-signed -sertifikaattituki asetuksista, mikäli käytät self-signed -sertifikaatteja.",
"login_form_label_email": "Sähköposti", "login_form_label_email": "Sähköposti",
"login_form_label_password": "Salasana", "login_form_label_password": "Salasana",
"login_form_next_button": "Seuraava", "login_form_next_button": "Seuraava",
@@ -204,24 +215,24 @@
"login_form_save_login": "Pysy kirjautuneena", "login_form_save_login": "Pysy kirjautuneena",
"login_form_server_empty": "Syötä palvelimen URL-osoite.", "login_form_server_empty": "Syötä palvelimen URL-osoite.",
"login_form_server_error": "Palvelimeen ei saatu yhteyttä.", "login_form_server_error": "Palvelimeen ei saatu yhteyttä.",
"login_password_changed_error": "There was an error updating your password", "login_password_changed_error": "Salasanan päivityksessä tapahtui virhe",
"login_password_changed_success": "Password updated successfully", "login_password_changed_success": "Salasan päivitetty onnistuneesti",
"map_cannot_get_user_location": "Cannot get user's location", "map_cannot_get_user_location": "Käyttäjän sijaintia ei voitu määrittää",
"map_location_dialog_cancel": "Cancel", "map_location_dialog_cancel": "Peruuta",
"map_location_dialog_yes": "Yes", "map_location_dialog_yes": "Kyllä",
"map_location_service_disabled_content": "Location service needs to be enabled to display assets from your current location. Do you want to enable it now?", "map_location_service_disabled_content": "Paikannuspalvelun pitää olla päälle kytkettynä, jotta nykyisen sijaintisi kohteita voidaan näyttää. Haluatko kytkeä sen päälle?",
"map_location_service_disabled_title": "Location Service disabled", "map_location_service_disabled_title": "Paikannuspalvelu pois päältä",
"map_no_assets_in_bounds": "No photos in this area", "map_no_assets_in_bounds": "Ei kuvia tällä alueella",
"map_no_location_permission_content": "Location permission is needed to display assets from your current location. Do you want to allow it now?", "map_no_location_permission_content": "Paikannuslupa tarvitaan, jotta nykyisen sijainnin kohteita voidaan näyttää. Haluatko sallia pääsyn sijaintiin?",
"map_no_location_permission_title": "Location Permission denied", "map_no_location_permission_title": "Paikannuslupa estetty",
"map_settings_dark_mode": "Dark mode", "map_settings_dark_mode": "Tumma tila",
"map_settings_dialog_cancel": "Cancel", "map_settings_dialog_cancel": "Peruuta",
"map_settings_dialog_save": "Save", "map_settings_dialog_save": "Tallenna",
"map_settings_dialog_title": "Map Settings", "map_settings_dialog_title": "Kartta-asetukset",
"map_settings_include_show_archived": "Include Archived", "map_settings_include_show_archived": "Sisällytä arkistoidut",
"map_settings_only_relative_range": "Date range", "map_settings_only_relative_range": "Päivämäärän rajaus",
"map_settings_only_show_favorites": "Show Favorite Only", "map_settings_only_show_favorites": "Näytä vain suosikit",
"map_zoom_to_see_photos": "Zoom out to see photos", "map_zoom_to_see_photos": "Tarkenna nähdäksesi kuvat",
"monthly_title_text_date_format": "MMMM y", "monthly_title_text_date_format": "MMMM y",
"motion_photos_page_title": "Liikekuvat", "motion_photos_page_title": "Liikekuvat",
"notification_permission_dialog_cancel": "Peruuta", "notification_permission_dialog_cancel": "Peruuta",
@@ -239,6 +250,7 @@
"partner_page_stop_sharing_content": "{} ei voi enää käyttää kuviasi.", "partner_page_stop_sharing_content": "{} ei voi enää käyttää kuviasi.",
"partner_page_stop_sharing_title": "Lopetetaanko kuvien jakaminen?", "partner_page_stop_sharing_title": "Lopetetaanko kuvien jakaminen?",
"partner_page_title": "Kumppani", "partner_page_title": "Kumppani",
"permission_onboarding_back": "Back",
"permission_onboarding_continue_anyway": "Jatka silti", "permission_onboarding_continue_anyway": "Jatka silti",
"permission_onboarding_get_started": "Aloittaminen", "permission_onboarding_get_started": "Aloittaminen",
"permission_onboarding_go_to_settings": "Siirry asetuksiin", "permission_onboarding_go_to_settings": "Siirry asetuksiin",
@@ -250,9 +262,11 @@
"permission_onboarding_request": "Immich vaatii käyttöoikeuden kuvien ja videoiden käyttämiseen.", "permission_onboarding_request": "Immich vaatii käyttöoikeuden kuvien ja videoiden käyttämiseen.",
"profile_drawer_app_logs": "Lokit", "profile_drawer_app_logs": "Lokit",
"profile_drawer_client_server_up_to_date": "Asiakassovellus ja palvelin ovat ajan tasalla", "profile_drawer_client_server_up_to_date": "Asiakassovellus ja palvelin ovat ajan tasalla",
"profile_drawer_documentation": "Dokumentaatio",
"profile_drawer_github": "GitHub",
"profile_drawer_settings": "Asetukset", "profile_drawer_settings": "Asetukset",
"profile_drawer_sign_out": "Kirjaudu ulos", "profile_drawer_sign_out": "Kirjaudu ulos",
"profile_drawer_trash": "Trash", "profile_drawer_trash": "Roskakori",
"recently_added_page_title": "Viimeksi lisätyt", "recently_added_page_title": "Viimeksi lisätyt",
"search_bar_hint": "Etsi kuvia", "search_bar_hint": "Etsi kuvia",
"search_page_categories": "Kategoriat", "search_page_categories": "Kategoriat",
@@ -276,6 +290,7 @@
"select_user_for_sharing_page_err_album": "Albumin luonti epäonnistui", "select_user_for_sharing_page_err_album": "Albumin luonti epäonnistui",
"select_user_for_sharing_page_share_suggestions": "Ehdotukset", "select_user_for_sharing_page_share_suggestions": "Ehdotukset",
"server_info_box_app_version": "Sovelluksen versio", "server_info_box_app_version": "Sovelluksen versio",
"server_info_box_server_url": "Palvelimen URL-osoite",
"server_info_box_server_version": "Palvelimen versio", "server_info_box_server_version": "Palvelimen versio",
"setting_image_viewer_help": "Sovellus lataa ensin pienen esikatselukuvan, toisena keskitarkkuuksisen kuvan (jos käytössä) ja kolmantena alkuperäisen täysitarkkuuksisen kuvan (jos käytössä)", "setting_image_viewer_help": "Sovellus lataa ensin pienen esikatselukuvan, toisena keskitarkkuuksisen kuvan (jos käytössä) ja kolmantena alkuperäisen täysitarkkuuksisen kuvan (jos käytössä)",
"setting_image_viewer_original_subtitle": "Ota käyttöön ladataksesi alkuperäinen täysitarkkuuksinen kuva (suuri!). Poista käytöstä vähentääksesi datan käyttöä (sekä verkossa että laitteen välimuistissa).", "setting_image_viewer_original_subtitle": "Ota käyttöön ladataksesi alkuperäinen täysitarkkuuksinen kuva (suuri!). Poista käytöstä vähentääksesi datan käyttöä (sekä verkossa että laitteen välimuistissa).",
@@ -300,28 +315,37 @@
"share_add_photos": "Lisää kuvia", "share_add_photos": "Lisää kuvia",
"share_add_title": "Lisää nimi", "share_add_title": "Lisää nimi",
"share_create_album": "Luo albumi", "share_create_album": "Luo albumi",
"shared_album_activities_input_disable": "Kommentointi on kytketty pois päältä",
"shared_album_activities_input_hint": "Sano jotain",
"shared_album_activity_remove_content": "Haluatko poistaa tämän aktiviteetin?",
"shared_album_activity_remove_title": "Poista aktiviteetti",
"shared_album_activity_setting_subtitle": "Anna muiden vastata",
"shared_album_activity_setting_title": "Kommentit ja tykkäykset",
"share_dialog_preparing": "Valmistellaan...", "share_dialog_preparing": "Valmistellaan...",
"shared_link_app_bar_title": "Shared Links", "shared_link_app_bar_title": "Jaetut linkit",
"shared_link_create_app_bar_title": "Create link to share", "shared_link_create_app_bar_title": "Luo linkki jaettavaksi",
"shared_link_create_info": "Let anyone with the link see the selected photo(s)", "shared_link_create_info": "Salli kaikkien linkinhaltijoiden nähdä valitut kuvat",
"shared_link_create_submit_button": "Create link", "shared_link_create_submit_button": "Luo linkki",
"shared_link_edit_allow_download": "Allow public user to download", "shared_link_edit_allow_download": "Salli julkisen käyttäjän ladata palvelimelta",
"shared_link_edit_allow_upload": "Allow public user to upload", "shared_link_edit_allow_upload": "Salli julkisen käyttäjän siirtää palvelimelle",
"shared_link_edit_app_bar_title": "Edit link", "shared_link_edit_app_bar_title": "Muokkaa linkkiä",
"shared_link_edit_change_expiry": "Change expiration time", "shared_link_edit_change_expiry": "Muuta erääntymisaikaa",
"shared_link_edit_description": "Description", "shared_link_edit_description": "Kuvaus",
"shared_link_edit_description_hint": "Enter the share description", "shared_link_edit_description_hint": "Lisää jaon kuvaus",
"shared_link_edit_show_meta": "Show metadata", "shared_link_edit_expire_after": "Umpeutuu",
"shared_link_edit_submit_button": "Update link", "shared_link_edit_password": "Salasana",
"shared_link_empty": "You don't have any shared links", "shared_link_edit_password_hint": "Syötä jaon salasana",
"shared_link_manage_links": "Manage Shared links", "shared_link_edit_show_meta": "Näytä metadata",
"share_done": "Done", "shared_link_edit_submit_button": "Päivitä linkki",
"shared_link_empty": "Sinulla ei ole jaettuja linkkejä",
"shared_link_manage_links": "Hallitse jaettuja linkkejä",
"share_done": "Valmis",
"share_invite": "Kutsu albumiin", "share_invite": "Kutsu albumiin",
"sharing_page_album": "Jaetut albumit", "sharing_page_album": "Jaetut albumit",
"sharing_page_description": "Luo jaettuja albumeja jakaaksesi kuvia ja videoita läheisillesi.", "sharing_page_description": "Luo jaettuja albumeja jakaaksesi kuvia ja videoita läheisillesi.",
"sharing_page_empty_list": "TYHJÄ LISTA", "sharing_page_empty_list": "TYHJÄ LISTA",
"sharing_silver_appbar_create_shared_album": "Luo jaettu albumi", "sharing_silver_appbar_create_shared_album": "Luo jaettu albumi",
"sharing_silver_appbar_shared_links": "Shared links", "sharing_silver_appbar_shared_links": "Jaetut linkit",
"sharing_silver_appbar_share_partner": "Jaa kumppanille", "sharing_silver_appbar_share_partner": "Jaa kumppanille",
"tab_controller_nav_library": "Kirjasto", "tab_controller_nav_library": "Kirjasto",
"tab_controller_nav_photos": "Kuvat", "tab_controller_nav_photos": "Kuvat",
@@ -337,19 +361,19 @@
"theme_setting_theme_title": "Teema", "theme_setting_theme_title": "Teema",
"theme_setting_three_stage_loading_subtitle": "Kolmivaiheinen lataaminen saattaa parantaa latauksen suorituskykyä, mutta lisää kaistankäyttöä huomattavasti.", "theme_setting_three_stage_loading_subtitle": "Kolmivaiheinen lataaminen saattaa parantaa latauksen suorituskykyä, mutta lisää kaistankäyttöä huomattavasti.",
"theme_setting_three_stage_loading_title": "Ota kolmivaiheinen lataus käyttöön", "theme_setting_three_stage_loading_title": "Ota kolmivaiheinen lataus käyttöön",
"translated_text_options": "Options", "translated_text_options": "Vaihtoehdot",
"trash_page_delete": "Delete", "trash_page_delete": "Poista",
"trash_page_delete_all": "Delete All", "trash_page_delete_all": "Poista kaikki",
"trash_page_empty_trash_btn": "Empty trash", "trash_page_empty_trash_btn": "Tyhjennä roskakori",
"trash_page_empty_trash_dialog_content": "Do you want to empty your trashed assets? These items will be permanently removed from Immich", "trash_page_empty_trash_dialog_content": "Haluatko poistaa roskakoriin siirretyt kohteet? Kohteet poistetaan lopullisesti Immich:sta.",
"trash_page_empty_trash_dialog_ok": "Ok", "trash_page_empty_trash_dialog_ok": "Ok",
"trash_page_info": "Trashed items will be permanently deleted after {} days", "trash_page_info": "Roskakoriin siirretyt kohteet poistetaan lopullisesti {} päivän jälkeen",
"trash_page_no_assets": "No trashed assets", "trash_page_no_assets": "Ei poistettuja kohteita",
"trash_page_restore": "Restore", "trash_page_restore": "Palauta",
"trash_page_restore_all": "Restore All", "trash_page_restore_all": "Palauta kaikki",
"trash_page_select_assets_btn": "Select assets", "trash_page_select_assets_btn": "Valitse kohteet",
"trash_page_select_btn": "Select", "trash_page_select_btn": "Valitse",
"trash_page_title": "Trash ({})", "trash_page_title": "Roskakori",
"upload_dialog_cancel": "Peruuta", "upload_dialog_cancel": "Peruuta",
"upload_dialog_info": "Haluatko varmuuskopioida valitut kohteet palvelimelle?", "upload_dialog_info": "Haluatko varmuuskopioida valitut kohteet palvelimelle?",
"upload_dialog_ok": "Lähetä", "upload_dialog_ok": "Lähetä",
@@ -360,7 +384,7 @@
"version_announcement_overlay_text_2": "Ota hetki aikaa vieraillaksesi", "version_announcement_overlay_text_2": "Ota hetki aikaa vieraillaksesi",
"version_announcement_overlay_text_3": "ja varmista, että käyttämäsi docker-compose ja .env-asetukset ovat ajantasalla välttyäksesi asetusongelmilta. Varsinkin jos käytät WatchToweria tai jotain muuta mekanismia päivittääksesi palvelinsovellusta automaattisesti.", "version_announcement_overlay_text_3": "ja varmista, että käyttämäsi docker-compose ja .env-asetukset ovat ajantasalla välttyäksesi asetusongelmilta. Varsinkin jos käytät WatchToweria tai jotain muuta mekanismia päivittääksesi palvelinsovellusta automaattisesti.",
"version_announcement_overlay_title": "Uusi palvelinversio saatavilla \uD83C\uDF89", "version_announcement_overlay_title": "Uusi palvelinversio saatavilla \uD83C\uDF89",
"viewer_remove_from_stack": "Remove from Stack", "viewer_remove_from_stack": "Poista pinosta",
"viewer_stack_use_as_main_asset": "Use as Main Asset", "viewer_stack_use_as_main_asset": "Käytä pääkohteena",
"viewer_unstack": "Un-Stack" "viewer_unstack": "Pura pino"
} }
+384
View File
@@ -0,0 +1,384 @@
{
"add_to_album_bottom_sheet_added": "Ajouté à {album}",
"add_to_album_bottom_sheet_already_exists": "Déjà dans {album}",
"advanced_settings_prefer_remote_subtitle": "Certains appareils sont très lents à charger des vignettes à partir de ressources présentes sur l'appareil. Activez ce paramètre pour charger des images externes à la place.",
"advanced_settings_prefer_remote_title": "Préférer les images externes",
"advanced_settings_self_signed_ssl_subtitle": "Permet d'ignorer la vérification du certificat SSL pour le point d'accès du serveur. Requis pour les certificats auto-signés.",
"advanced_settings_self_signed_ssl_title": "Autoriser les certificats SSL auto-signés",
"advanced_settings_tile_subtitle": "Paramètres d'utilisateur avancés",
"advanced_settings_tile_title": "Avancé",
"advanced_settings_troubleshooting_subtitle": "Activer des fonctions supplémentaires pour le dépannage",
"advanced_settings_troubleshooting_title": "Dépannage",
"album_info_card_backup_album_excluded": "EXCLUS",
"album_info_card_backup_album_included": "INCLUS",
"album_thumbnail_card_item": "1 élément",
"album_thumbnail_card_items": "{} éléments",
"album_thumbnail_card_shared": " · Partagé",
"album_thumbnail_owned": "Possédé",
"album_thumbnail_shared_by": "Partagé par {}",
"album_viewer_appbar_share_delete": "Supprimer l'album",
"album_viewer_appbar_share_err_delete": "Échec de la suppression de l'album",
"album_viewer_appbar_share_err_leave": "Impossible de quitter l'album",
"album_viewer_appbar_share_err_remove": "Il y a des problèmes lors de la suppression des éléments de l'album",
"album_viewer_appbar_share_err_title": "Échec de la modification du titre de l'album",
"album_viewer_appbar_share_leave": "Quitter l'album",
"album_viewer_appbar_share_remove": "Retirer de l'album",
"album_viewer_appbar_share_to": "Partager à",
"album_viewer_page_share_add_users": "Ajouter des utilisateurs",
"all_people_page_title": "Personnes",
"all_videos_page_title": "Vidéos",
"app_bar_signout_dialog_content": "Êtes-vous sûr de vouloir vous déconnecter?",
"app_bar_signout_dialog_ok": "Oui",
"app_bar_signout_dialog_title": "Se déconnecter",
"archive_page_no_archived_assets": "Aucun élément archivé n'a été trouvé",
"archive_page_title": "Archive ({})",
"asset_list_layout_settings_dynamic_layout_title": "Affichage dynamique",
"asset_list_layout_settings_group_automatically": "Automatique",
"asset_list_layout_settings_group_by": "Grouper les éléments par",
"asset_list_layout_settings_group_by_month": "Mois",
"asset_list_layout_settings_group_by_month_day": "Mois + jour",
"asset_list_settings_subtitle": "Paramètres de disposition de la grille de photos",
"asset_list_settings_title": "Grille de photos",
"backup_album_selection_page_albums_device": "Albums sur l'appareil ({})",
"backup_album_selection_page_albums_tap": "Tapez pour inclure, tapez deux fois pour exclure",
"backup_album_selection_page_assets_scatter": "Les éléments peuvent être répartis sur plusieurs albums. De ce fait, les albums peuvent être inclus ou exclus pendant le processus de sauvegarde.",
"backup_album_selection_page_select_albums": "Sélectionner les albums",
"backup_album_selection_page_selection_info": "Informations sur la sélection",
"backup_album_selection_page_total_assets": "Total des éléments uniques",
"backup_all": "Tout",
"backup_background_service_backup_failed_message": "Échec de la sauvegarde des éléments. Nouvelle tentative...",
"backup_background_service_connection_failed_message": "Impossible de se connecter au serveur. Nouvelle tentative...",
"backup_background_service_current_upload_notification": "Transfert {}",
"backup_background_service_default_notification": "Recherche de nouveaux éléments...",
"backup_background_service_error_title": "Erreur de sauvegarde",
"backup_background_service_in_progress_notification": "Sauvegarde de vos éléments...",
"backup_background_service_upload_failure_notification": "Impossible de transférer {}",
"backup_controller_page_albums": "Sauvegarder les albums",
"backup_controller_page_background_app_refresh_disabled_content": "Activez le rafraîchissement de l'application en arrière-plan dans Paramètres > Général > Rafraîchissement de l'application en arrière-plan afin d'utiliser la sauvegarde en arrière-plan.",
"backup_controller_page_background_app_refresh_disabled_title": "Rafraîchissement de l'application en arrière-plan désactivé",
"backup_controller_page_background_app_refresh_enable_button_text": "Aller aux paramètres",
"backup_controller_page_background_battery_info_link": "Montrez-moi comment",
"backup_controller_page_background_battery_info_message": "Pour une expérience optimale de la sauvegarde en arrière-plan, veuillez désactiver toute optimisation de la batterie limitant l'activité en arrière-plan pour Immich.\n\nÉtant donné que cela est spécifique à chaque appareil, veuillez consulter les informations requises pour le fabricant de votre appareil.",
"backup_controller_page_background_battery_info_ok": "OK",
"backup_controller_page_background_battery_info_title": "Optimisation de la batterie",
"backup_controller_page_background_charging": "Seulement pendant la charge",
"backup_controller_page_background_configure_error": "Échec de la configuration du service d'arrière-plan",
"backup_controller_page_background_delay": "Retarder la sauvegarde des nouveaux éléments d'actif: {}",
"backup_controller_page_background_description": "Activez le service d'arrière-plan pour sauvegarder automatiquement tous les nouveaux éléments sans avoir à ouvrir l'application.",
"backup_controller_page_background_is_off": "La sauvegarde automatique en arrière-plan est désactivée",
"backup_controller_page_background_is_on": "La sauvegarde automatique en arrière-plan est activée",
"backup_controller_page_background_turn_off": "Désactiver le service d'arrière-plan",
"backup_controller_page_background_turn_on": "Activer le service d'arrière-plan",
"backup_controller_page_background_wifi": "Uniquement sur WiFi",
"backup_controller_page_backup": "Sauvegardé",
"backup_controller_page_backup_selected": "Sélectionné: ",
"backup_controller_page_backup_sub": "Photos et vidéos sauvegardées",
"backup_controller_page_cancel": "Annuler",
"backup_controller_page_created": "Créé le: {}",
"backup_controller_page_desc_backup": "Activez la sauvegarde pour envoyer automatiquement les nouveaux éléments sur le serveur.",
"backup_controller_page_excluded": "Exclus: ",
"backup_controller_page_failed": "Échec de l'opération ({})",
"backup_controller_page_filename": "Nom du fichier: {} [{}]",
"backup_controller_page_id": "ID: {}",
"backup_controller_page_info": "Informations de sauvegarde",
"backup_controller_page_none_selected": "Aucune sélection",
"backup_controller_page_remainder": "Restant",
"backup_controller_page_remainder_sub": "Photos et albums restants à sauvegarder à partir de la sélection",
"backup_controller_page_select": "Sélectionner",
"backup_controller_page_server_storage": "Stockage du serveur",
"backup_controller_page_start_backup": "Démarrer la sauvegarde",
"backup_controller_page_status_off": "La sauvegarde est désactivée",
"backup_controller_page_status_on": "La sauvegarde est activée",
"backup_controller_page_storage_format": "{} de {} utilisé",
"backup_controller_page_to_backup": "Albums à sauvegarder",
"backup_controller_page_total": "Total",
"backup_controller_page_total_sub": "Toutes les photos et vidéos uniques des albums sélectionnés",
"backup_controller_page_turn_off": "Désactiver la sauvegarde",
"backup_controller_page_turn_on": "Activer la sauvegarde",
"backup_controller_page_uploading_file_info": "Transfert des informations du fichier",
"backup_err_only_album": "Impossible de retirer le seul album",
"backup_info_card_assets": "éléments",
"backup_manual_cancelled": "Annulé",
"backup_manual_failed": "Echec",
"backup_manual_in_progress": "Téléchargement déjà en cours. Essayez après un instant",
"backup_manual_success": "Succès ",
"backup_manual_title": "Statut du téléchargement ",
"cache_settings_album_thumbnails": "vignettes de la page bibliothèque ({} éléments)",
"cache_settings_clear_cache_button": "Effacer le cache",
"cache_settings_clear_cache_button_title": "Efface le cache de l'application. Cela aura un impact significatif sur les performances de l'application jusqu'à ce que le cache soit reconstruit.",
"cache_settings_image_cache_size": "Taille du cache des images ({} éléments)",
"cache_settings_statistics_album": "vignettes de la bibliothèque",
"cache_settings_statistics_assets": "{} éléments ({})",
"cache_settings_statistics_full": "Images complètes",
"cache_settings_statistics_shared": "vignettes d'albums partagés",
"cache_settings_statistics_thumbnail": "vignettes",
"cache_settings_statistics_title": "Utilisation du cache",
"cache_settings_subtitle": "Contrôler le comportement de mise en cache de l'application mobile Immich",
"cache_settings_thumbnail_size": "Taille du cache des vignettes ({} éléments)",
"cache_settings_tile_subtitle": "Contrôler le comportement du stockage local",
"cache_settings_tile_title": "Stockage local",
"cache_settings_title": "Paramètres de mise en cache",
"change_password_form_confirm_password": "Confirmez le mot de passe",
"change_password_form_description": "Bonjour {firstName} {lastName},\n\nC'est la première fois que vous vous connectez au système ou vous avez demandé de changer votre mot de passe. Veuillez saisir le nouveau mot de passe ci-dessous.",
"change_password_form_new_password": "Nouveau mot de passe",
"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",
"common_add_to_album": "Ajouter à l'album",
"common_change_password": "Modifier le mot de passe",
"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_shared": "Partagé",
"control_bottom_app_bar_add_to_album": "Ajouter à l'album",
"control_bottom_app_bar_album_info": "{} éléments",
"control_bottom_app_bar_album_info_shared": "{} éléments - Partagés",
"control_bottom_app_bar_archive": "Archive",
"control_bottom_app_bar_create_new_album": "Créer un nouvel album",
"control_bottom_app_bar_delete": "Supprimer",
"control_bottom_app_bar_favorite": "Favoris",
"control_bottom_app_bar_share": "Partager",
"control_bottom_app_bar_share_to": "Partager à",
"control_bottom_app_bar_stack": "Empiler",
"control_bottom_app_bar_unarchive": "Désarchiver",
"control_bottom_app_bar_upload": "Téléverser",
"create_album_page_untitled": "Sans titre",
"create_shared_album_page_create": "Créer",
"create_shared_album_page_share": "Partager",
"create_shared_album_page_share_add_assets": "AJOUTER DES ÉLÉMENTS",
"create_shared_album_page_share_select_photos": "Sélectionner les photos",
"curated_location_page_title": "Places",
"curated_object_page_title": "Objets",
"daily_title_text_date": "E, dd MMM",
"daily_title_text_date_year": "E, dd MMM, yyyy",
"date_format": "E, LLL d, y • h:mm a",
"delete_dialog_alert": "Ces éléments seront définitivement supprimés de Immich et de votre appareil.",
"delete_dialog_cancel": "Annuler",
"delete_dialog_ok": "Supprimer",
"delete_dialog_title": "Supprimer définitivement",
"delete_shared_link_dialog_content": "Êtes-vous sûr de vouloir supprimer ce lien partagé?",
"delete_shared_link_dialog_title": "Supprimer le lien partagé",
"description_input_hint_text": "Ajouter une description...",
"description_input_submit_error": "Erreur de mise à jour de la description, vérifier le journal pour plus de détails",
"exif_bottom_sheet_description": "Ajouter une description...",
"exif_bottom_sheet_details": "DÉTAILS",
"exif_bottom_sheet_location": "LOCALISATION",
"experimental_settings_new_asset_list_subtitle": "En cours de développement",
"experimental_settings_new_asset_list_title": "Activer la grille de photos expérimentale",
"experimental_settings_subtitle": "Utilisez à vos dépends!",
"experimental_settings_title": "Expérimental",
"favorites_page_no_favorites": "Aucun élément favori n'a été trouvé",
"favorites_page_title": "Favoris",
"home_page_add_to_album_conflicts": "{added} éléments ajoutés à l'album {album}. Les éléments {failed} sont déjà dans l'album.",
"home_page_add_to_album_err_local": "Impossible d'ajouter des éléments locaux aux albums pour le moment, étape ignorée",
"home_page_add_to_album_success": "{added} éléments ajoutés à l'album {album}.",
"home_page_archive_err_local": "Impossible d'archiver les ressources locales pour l'instant, étape ignorée",
"home_page_building_timeline": "Construction de la chronologie",
"home_page_favorite_err_local": "Impossible d'ajouter des éléments locaux aux favoris pour le moment, étape ignorée",
"home_page_first_time_notice": "Si c'est la première fois que vous utilisez l'application, veillez à choisir un ou plusieurs albums de sauvegarde afin que la chronologie puisse alimenter les photos et les vidéos de cet ou ces albums.",
"home_page_upload_err_limit": "Limite de téléchargement de 30 éléments en même temps, demande ignorée",
"image_viewer_page_state_provider_download_error": "Erreur de téléchargement",
"image_viewer_page_state_provider_download_success": "Téléchargement réussi",
"image_viewer_page_state_provider_share_error": "Erreur de partage",
"library_page_albums": "Albums",
"library_page_archive": "Archive",
"library_page_device_albums": "Albums sur l'appareil",
"library_page_favorites": "Favoris",
"library_page_new_album": "Nouvel album",
"library_page_sharing": "Partage",
"library_page_sort_created": "Créations les plus récentes",
"library_page_sort_last_modified": "Dernière modification",
"library_page_sort_most_recent_photo": "Photo la plus récente",
"library_page_sort_title": "Titre de l'album",
"login_disabled": "La connexion a été désactivée ",
"login_form_api_exception": "Erreur de l'API. Veuillez vérifier l'URL du serveur et et réessayer.",
"login_form_button_text": "Connexion",
"login_form_email_hint": "votreemail@email.com",
"login_form_endpoint_hint": "http://adresse-ip-serveur:port/api",
"login_form_endpoint_url": "URL du point d'accès au serveur",
"login_form_err_http": "Veuillez préciser http:// ou https://",
"login_form_err_invalid_email": "E-mail invalide",
"login_form_err_invalid_url": "URL invalide",
"login_form_err_leading_whitespace": "Espace en début de ligne",
"login_form_err_trailing_whitespace": "Espace de fin de ligne",
"login_form_failed_get_oauth_server_config": "Erreur de connexion par OAuth, vérifiez l\"URL du serveur",
"login_form_failed_get_oauth_server_disable": "La fonctionnalité OAuth n'est pas disponible sur ce serveur",
"login_form_failed_login": "Erreur de connexion, vérifiez l'url du serveur, l'email et le mot de passe",
"login_form_handshake_exception": "Il y a eu une exception de liaison avec le serveur. Activez la prise en charge des certificats auto-signés dans les paramètres si vous utilisez un certificat auto-signé.",
"login_form_label_email": "E-mail",
"login_form_label_password": "Mot de passe",
"login_form_next_button": "Suivant",
"login_form_password_hint": "mot de passe",
"login_form_save_login": "Rester connecté",
"login_form_server_empty": "Saisissez l'URL du serveur.",
"login_form_server_error": "Impossible de se connecter au serveur.",
"login_password_changed_error": "Une erreur s'est produite lors de la mise à jour de votre mot de passe",
"login_password_changed_success": "Mot de passe mis à jour avec succès",
"map_cannot_get_user_location": "Impossible d'obtenir la localisation de l'utilisateur",
"map_location_dialog_cancel": "Annuler",
"map_location_dialog_yes": "Oui",
"map_location_service_disabled_content": "Le service de localisation doit être activé pour afficher les éléments de votre emplacement actuel. Souhaitez-vous l'activer maintenant?",
"map_location_service_disabled_title": "Service de localisation désactivé",
"map_no_assets_in_bounds": "Pas de photos dans cette zone",
"map_no_location_permission_content": "L'autorisation de localisation est nécessaire pour afficher les éléments de votre emplacement actuel. Souhaitez-vous l'autoriser maintenant?",
"map_no_location_permission_title": "Permission de localisation refusée",
"map_settings_dark_mode": "Mode sombre",
"map_settings_dialog_cancel": "Annuler",
"map_settings_dialog_save": "Sauvegarder",
"map_settings_dialog_title": "Paramètres de la carte",
"map_settings_include_show_archived": "Inclure les archives",
"map_settings_only_relative_range": "Plage de dates",
"map_settings_only_show_favorites": "Afficher uniquement les favoris",
"map_zoom_to_see_photos": "Dézoomer pour voir les photos",
"monthly_title_text_date_format": "MMMM y",
"motion_photos_page_title": "Photos avec mouvement",
"notification_permission_dialog_cancel": "Annuler",
"notification_permission_dialog_content": "Pour activer les notifications, allez dans Paramètres et sélectionnez Autoriser.",
"notification_permission_dialog_settings": "Paramètres",
"notification_permission_list_tile_content": "Accordez la permission d'activer les notifications.",
"notification_permission_list_tile_enable_button": "Activer les notifications",
"notification_permission_list_tile_title": "Permission de notification",
"partner_page_add_partner": "Ajouter un partenaire",
"partner_page_empty_message": "Vos photos ne sont pas encore partagées avec un partenaire.",
"partner_page_no_more_users": "Plus d'utilisateurs à ajouter",
"partner_page_partner_add_failed": "Échec de l'ajout d'un partenaire",
"partner_page_select_partner": "Sélectionner un partenaire",
"partner_page_shared_to_title": "Partagé avec",
"partner_page_stop_sharing_content": "{} ne pourra plus accéder à vos photos.",
"partner_page_stop_sharing_title": "Arrêter de partager vos photos?",
"partner_page_title": "Partenaire",
"permission_onboarding_continue_anyway": "Continuer quand même",
"permission_onboarding_get_started": "Commencer",
"permission_onboarding_go_to_settings": "Accéder aux paramètres",
"permission_onboarding_grant_permission": "Accorder l'autorisation",
"permission_onboarding_log_out": "Se déconnecter",
"permission_onboarding_permission_denied": "Permission refusée. Pour utiliser Immich, accordez lautorisation pour les photos et vidéos dans les Paramètres.",
"permission_onboarding_permission_granted": "Permission accordée! Vous êtes prêts.",
"permission_onboarding_permission_limited": "Permission limitée. Pour permettre à Immich de sauvegarder et de gérer l'ensemble de votre bibliothèque, accordez l'autorisation pour les photos et vidéos dans les Paramètres.",
"permission_onboarding_request": "Immich demande l'autorisation de visionner vos photos et vidéo",
"profile_drawer_app_logs": "Journaux",
"profile_drawer_client_server_up_to_date": "Le client et le serveur sont à jour",
"profile_drawer_documentation": "Documentation",
"profile_drawer_github": "GitHub",
"profile_drawer_settings": "Paramètres",
"profile_drawer_sign_out": "Se déconnecter",
"profile_drawer_trash": "Corbeille",
"recently_added_page_title": "Récemment ajouté",
"search_bar_hint": "Rechercher vos photos",
"search_page_categories": "Catégories",
"search_page_favorites": "Favoris",
"search_page_motion_photos": "Photos avec mouvement",
"search_page_no_objects": "Aucune information disponible sur les objets",
"search_page_no_places": "Aucune information disponible sur la localisation",
"search_page_people": "Personnes",
"search_page_places": "Lieux",
"search_page_recently_added": "Récemment ajouté",
"search_page_screenshots": "Captures d'écran",
"search_page_selfies": "Selfies",
"search_page_things": "Objets",
"search_page_videos": "Vidéos",
"search_page_view_all_button": "Voir tout",
"search_page_your_activity": "Votre activité",
"search_result_page_new_search_hint": "Nouvelle recherche",
"search_suggestion_list_smart_search_hint_1": "La recherche intelligente est activée par défaut. Pour rechercher des métadonnées, utilisez la syntaxe suivante",
"search_suggestion_list_smart_search_hint_2": "m:votre-terme-de-recherche",
"select_additional_user_for_sharing_page_suggestions": "Suggestions",
"select_user_for_sharing_page_err_album": "Échec de la création de l'album",
"select_user_for_sharing_page_share_suggestions": "Suggestions",
"server_info_box_app_version": "Version de l'application",
"server_info_box_server_url": "URL du serveur",
"server_info_box_server_version": "Version du serveur",
"setting_image_viewer_help": "Le visualiseur de détails charge d'abord la petite vignette, puis l'aperçu de taille moyenne (s'il est activé), enfin l'original (s'il est activé).",
"setting_image_viewer_original_subtitle": "Activez cette option pour charger l'image en résolution originale (volumineux!). Désactiver pour réduire l'utilisation des données (réseau et cache de l'appareil).",
"setting_image_viewer_original_title": "Charger l'image originale",
"setting_image_viewer_preview_subtitle": "Activer pour charger une image de résolution moyenne. Désactiver pour charger directement l'original ou utiliser uniquement la vignette.",
"setting_image_viewer_preview_title": "Charger l'image d'aperçu",
"setting_notifications_notify_failures_grace_period": "Notifier les échecs de la sauvegarde en arrière-plan: {}",
"setting_notifications_notify_hours": "{} heures",
"setting_notifications_notify_immediately": "immédiatement",
"setting_notifications_notify_minutes": "{} minutes",
"setting_notifications_notify_never": "jamais",
"setting_notifications_notify_seconds": "{} secondes",
"setting_notifications_single_progress_subtitle": "Informations détaillées sur la progression du transfert par élément",
"setting_notifications_single_progress_title": "Afficher la progression du détail de la sauvegarde en arrière-plan",
"setting_notifications_subtitle": "Ajustez vos préférences de notification",
"setting_notifications_title": "Notifications",
"setting_notifications_total_progress_subtitle": "Progression globale du transfert (effectué/total des éléments)",
"setting_notifications_total_progress_title": "Afficher la progression totale de la sauvegarde en arrière-plan",
"setting_pages_app_bar_settings": "Paramètres",
"settings_require_restart": "Veuillez redémarrer Immich pour appliquer ce paramètre",
"share_add": "Ajouter",
"share_add_photos": "Ajouter des photos",
"share_add_title": "Ajouter un titre",
"share_create_album": "Créer un album",
"shared_album_activities_input_disable": "Les commentaires sont désactivés",
"shared_album_activities_input_hint": "Dire quelque chose",
"shared_album_activity_remove_content": "Souhaitez-vous supprimer cette activité?",
"shared_album_activity_remove_title": "Supprimer l'activité",
"shared_album_activity_setting_subtitle": "Laisser les autres réagir",
"shared_album_activity_setting_title": "Commentaires et likes",
"share_dialog_preparing": "Préparation...",
"shared_link_app_bar_title": "Liens partagés",
"shared_link_create_app_bar_title": "Créer un lien pour partager",
"shared_link_create_info": "Permettre à toute personne ayant le lien de voir la ou les photos sélectionnées",
"shared_link_create_submit_button": "Créer le lien",
"shared_link_edit_allow_download": "Autoriser les utilisateurs publics à télécharger",
"shared_link_edit_allow_upload": "Autoriser les utilisateurs publics à téléverser",
"shared_link_edit_app_bar_title": "Modifier le lien",
"shared_link_edit_change_expiry": "Modifier le délai d'expiration",
"shared_link_edit_description": "Description",
"shared_link_edit_description_hint": "Saisir la description du partage",
"shared_link_edit_expire_after": "Expire après",
"shared_link_edit_password": "Mot de passe",
"shared_link_edit_password_hint": "Saisir le mot de passe de partage",
"shared_link_edit_show_meta": "Afficher les métadonnées",
"shared_link_edit_submit_button": "Mettre à jour le lien",
"shared_link_empty": "Vous n'avez pas de liens partagés",
"shared_link_manage_links": "Gérer les liens partagés",
"share_done": "Fait",
"share_invite": "Inviter à l'album",
"sharing_page_album": "Albums partagés",
"sharing_page_description": "Créez des albums partagés pour partager des photos et des vidéos avec les personnes de votre réseau.",
"sharing_page_empty_list": "LISTE VIDE",
"sharing_silver_appbar_create_shared_album": "Créer un album partagé",
"sharing_silver_appbar_shared_links": "Liens partagés",
"sharing_silver_appbar_share_partner": "Partager avec un partenaire",
"tab_controller_nav_library": "Bibliothèque",
"tab_controller_nav_photos": "Photos",
"tab_controller_nav_search": "Recherche",
"tab_controller_nav_sharing": "Partage",
"theme_setting_asset_list_storage_indicator_title": "Afficher l'indicateur de stockage sur les tuiles des éléments",
"theme_setting_asset_list_tiles_per_row_title": "Nombre d'éléments par ligne ({})",
"theme_setting_dark_mode_switch": "Mode sombre",
"theme_setting_image_viewer_quality_subtitle": "Ajustez la qualité de la visionneuse d'images détaillées",
"theme_setting_image_viewer_quality_title": "Qualité de la visualisation des images",
"theme_setting_system_theme_switch": "Automatique (suivre les paramètres du système)",
"theme_setting_theme_subtitle": "Choisissez le thème de l'application",
"theme_setting_theme_title": "Thème",
"theme_setting_three_stage_loading_subtitle": "Le chargement en trois étapes peut améliorer les performances de chargement, mais entraîne une augmentation significative de la charge du réseau.",
"theme_setting_three_stage_loading_title": "Activer le chargement en trois étapes",
"translated_text_options": "Options",
"trash_page_delete": "Supprimer",
"trash_page_delete_all": "Tout supprimer",
"trash_page_empty_trash_btn": "Vider la corbeille",
"trash_page_empty_trash_dialog_content": "Voulez-vous vider les éléments de la corbeille? Ces objets seront définitivement retirés d'Immich",
"trash_page_empty_trash_dialog_ok": "Ok",
"trash_page_info": "Les éléments mis à la corbeille seront définitivement supprimés au bout de {} jours.",
"trash_page_no_assets": "Pas d'éléments dans la corbeille",
"trash_page_restore": "Restaurer",
"trash_page_restore_all": "Tout restaurer",
"trash_page_select_assets_btn": "Sélectionner les éléments",
"trash_page_select_btn": "Sélectionner",
"trash_page_title": "Corbeille ({})",
"upload_dialog_cancel": "Annuler",
"upload_dialog_info": "Voulez-vous sauvegarder la sélection vers le serveur?",
"upload_dialog_ok": "Télécharger ",
"upload_dialog_title": "Télécharger cet élément ",
"version_announcement_overlay_ack": "Confirmer",
"version_announcement_overlay_release_notes": "notes de mise à jour",
"version_announcement_overlay_text_1": "Bonjour, une nouvelle version de",
"version_announcement_overlay_text_2": "veuillez prendre le temps de visiter le ",
"version_announcement_overlay_text_3": " et assurez-vous que votre configuration docker-compose et .env est à jour pour éviter toute erreur de configuration, en particulier si vous utilisez WatchTower ou tout autre mécanisme qui gère la mise à jour automatique de votre application serveur.",
"version_announcement_overlay_title": "Nouvelle version serveur disponible \uD83C\uDF89",
"viewer_remove_from_stack": "Retirer de la pile",
"viewer_stack_use_as_main_asset": "Utiliser comme élément principal",
"viewer_unstack": "Désempiler"
}
+63 -39
View File
@@ -23,9 +23,13 @@
"album_viewer_appbar_share_err_title": "Échec de la modification du titre de l'album", "album_viewer_appbar_share_err_title": "Échec de la modification du titre de l'album",
"album_viewer_appbar_share_leave": "Quitter l'album", "album_viewer_appbar_share_leave": "Quitter l'album",
"album_viewer_appbar_share_remove": "Retirer de l'album", "album_viewer_appbar_share_remove": "Retirer de l'album",
"album_viewer_appbar_share_to": "Partager à",
"album_viewer_page_share_add_users": "Ajouter des utilisateurs", "album_viewer_page_share_add_users": "Ajouter des utilisateurs",
"all_people_page_title": "Personnes", "all_people_page_title": "Personnes",
"all_videos_page_title": "Vidéos", "all_videos_page_title": "Vidéos",
"app_bar_signout_dialog_content": "Êtes-vous sûr de vouloir vous déconnecter ?",
"app_bar_signout_dialog_ok": "Oui",
"app_bar_signout_dialog_title": "Se déconnecter",
"archive_page_no_archived_assets": "Aucun élément archivé n'a été trouvé", "archive_page_no_archived_assets": "Aucun élément archivé n'a été trouvé",
"archive_page_title": "Archive ({})", "archive_page_title": "Archive ({})",
"asset_list_layout_settings_dynamic_layout_title": "Affichage dynamique", "asset_list_layout_settings_dynamic_layout_title": "Affichage dynamique",
@@ -111,6 +115,8 @@
"cache_settings_statistics_title": "Utilisation du cache", "cache_settings_statistics_title": "Utilisation du cache",
"cache_settings_subtitle": "Contrôler le comportement de mise en cache de l'application mobile Immich", "cache_settings_subtitle": "Contrôler le comportement de mise en cache de l'application mobile Immich",
"cache_settings_thumbnail_size": "Taille du cache des miniatures ({} éléments)", "cache_settings_thumbnail_size": "Taille du cache des miniatures ({} éléments)",
"cache_settings_tile_subtitle": "Contrôler le comportement du stockage local",
"cache_settings_tile_title": "Stockage local",
"cache_settings_title": "Paramètres de mise en cache", "cache_settings_title": "Paramètres de mise en cache",
"change_password_form_confirm_password": "Confirmez le mot de passe", "change_password_form_confirm_password": "Confirmez le mot de passe",
"change_password_form_description": "Bonjour {firstName} {lastName},\n\nC'est la première fois que vous vous connectez au système ou vous avez demandé à changer votre mot de passe. Veuillez saisir le nouveau mot de passe ci-dessous.", "change_password_form_description": "Bonjour {firstName} {lastName},\n\nC'est la première fois que vous vous connectez au système ou vous avez demandé à changer votre mot de passe. Veuillez saisir le nouveau mot de passe ci-dessous.",
@@ -130,10 +136,10 @@
"control_bottom_app_bar_delete": "Supprimer", "control_bottom_app_bar_delete": "Supprimer",
"control_bottom_app_bar_favorite": "Favoris", "control_bottom_app_bar_favorite": "Favoris",
"control_bottom_app_bar_share": "Partager", "control_bottom_app_bar_share": "Partager",
"control_bottom_app_bar_share_to": "Share To", "control_bottom_app_bar_share_to": "Partager à",
"control_bottom_app_bar_stack": "Stack", "control_bottom_app_bar_stack": "Empiler",
"control_bottom_app_bar_unarchive": "Désarchiver", "control_bottom_app_bar_unarchive": "Désarchiver",
"control_bottom_app_bar_upload": "Upload", "control_bottom_app_bar_upload": "Téléverser",
"create_album_page_untitled": "Sans titre", "create_album_page_untitled": "Sans titre",
"create_shared_album_page_create": "Créer", "create_shared_album_page_create": "Créer",
"create_shared_album_page_share": "Partager", "create_shared_album_page_share": "Partager",
@@ -148,8 +154,8 @@
"delete_dialog_cancel": "Annuler", "delete_dialog_cancel": "Annuler",
"delete_dialog_ok": "Supprimer", "delete_dialog_ok": "Supprimer",
"delete_dialog_title": "Supprimer définitivement", "delete_dialog_title": "Supprimer définitivement",
"delete_shared_link_dialog_content": "Are you sure you want to delete this shared link?", "delete_shared_link_dialog_content": "Êtes-vous sûr de vouloir supprimer ce lien partagé ?",
"delete_shared_link_dialog_title": "Delete Shared Link", "delete_shared_link_dialog_title": "Supprimer le lien partagé",
"description_input_hint_text": "Ajouter une description...", "description_input_hint_text": "Ajouter une description...",
"description_input_submit_error": "Erreur de mise à jour de la description, vérifier le journal pour plus de détails", "description_input_submit_error": "Erreur de mise à jour de la description, vérifier le journal pour plus de détails",
"exif_bottom_sheet_description": "Ajouter une description...", "exif_bottom_sheet_description": "Ajouter une description...",
@@ -164,14 +170,19 @@
"home_page_add_to_album_conflicts": "{added} éléments ajoutés à l'album {album}. Les éléments {failed} sont déjà dans l'album.", "home_page_add_to_album_conflicts": "{added} éléments ajoutés à l'album {album}. Les éléments {failed} sont déjà dans l'album.",
"home_page_add_to_album_err_local": "Impossible d'ajouter des éléments locaux aux albums pour le moment, étape ignorée", "home_page_add_to_album_err_local": "Impossible d'ajouter des éléments locaux aux albums pour le moment, étape ignorée",
"home_page_add_to_album_success": "{added} éléments ajoutés à l'album {album}.", "home_page_add_to_album_success": "{added} éléments ajoutés à l'album {album}.",
"home_page_album_err_partner": "Can not add partner assets to an album yet, skipping",
"home_page_archive_err_local": "Impossible d'archiver les ressources locales pour l'instant, étape ignorée", "home_page_archive_err_local": "Impossible d'archiver les ressources locales pour l'instant, étape ignorée",
"home_page_archive_err_partner": "Can not archive partner assets, skipping",
"home_page_building_timeline": "Construction de la chronologie", "home_page_building_timeline": "Construction de la chronologie",
"home_page_delete_err_partner": "Can not delete partner assets, skipping",
"home_page_favorite_err_local": "Impossible d'ajouter des éléments locaux aux favoris pour le moment, étape ignorée", "home_page_favorite_err_local": "Impossible d'ajouter des éléments locaux aux favoris pour le moment, étape ignorée",
"home_page_favorite_err_partner": "Can not favorite partner assets yet, skipping",
"home_page_first_time_notice": "Si c'est la première fois que vous utilisez l'application, veillez à choisir un ou plusieurs albums de sauvegarde afin que la chronologie puisse alimenter les photos et les vidéos de cet ou ces albums.", "home_page_first_time_notice": "Si c'est la première fois que vous utilisez l'application, veillez à choisir un ou plusieurs albums de sauvegarde afin que la chronologie puisse alimenter les photos et les vidéos de cet ou ces albums.",
"home_page_share_err_local": "Can not share local assets via link, skipping",
"home_page_upload_err_limit": "Limite de téléchargement de 30 éléments en même temps, demande ignorée", "home_page_upload_err_limit": "Limite de téléchargement de 30 éléments en même temps, demande ignorée",
"image_viewer_page_state_provider_download_error": "Erreur de téléchargement", "image_viewer_page_state_provider_download_error": "Erreur de téléchargement",
"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": "Share Error", "image_viewer_page_state_provider_share_error": "Erreur de partage",
"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",
@@ -179,8 +190,8 @@
"library_page_new_album": "Nouvel album", "library_page_new_album": "Nouvel album",
"library_page_sharing": "Partage", "library_page_sharing": "Partage",
"library_page_sort_created": "Créations les plus récentes", "library_page_sort_created": "Créations les plus récentes",
"library_page_sort_last_modified": "Last modified", "library_page_sort_last_modified": "Dernière modification",
"library_page_sort_most_recent_photo": "Most recent photo", "library_page_sort_most_recent_photo": "Photo la plus récente",
"library_page_sort_title": "Titre de l'album", "library_page_sort_title": "Titre de l'album",
"login_disabled": "La connexion a été désactivée ", "login_disabled": "La connexion a été désactivée ",
"login_form_api_exception": "Erreur de l'API. Veuillez vérifier l'URL du serveur et et réessayer.", "login_form_api_exception": "Erreur de l'API. Veuillez vérifier l'URL du serveur et et réessayer.",
@@ -218,7 +229,7 @@
"map_settings_dialog_cancel": "Annuler", "map_settings_dialog_cancel": "Annuler",
"map_settings_dialog_save": "Sauvegarder", "map_settings_dialog_save": "Sauvegarder",
"map_settings_dialog_title": "Paramètres de la carte", "map_settings_dialog_title": "Paramètres de la carte",
"map_settings_include_show_archived": "Include Archived", "map_settings_include_show_archived": "Inclure les archives",
"map_settings_only_relative_range": "Plage de dates", "map_settings_only_relative_range": "Plage de dates",
"map_settings_only_show_favorites": "Afficher uniquement les favoris", "map_settings_only_show_favorites": "Afficher uniquement les favoris",
"map_zoom_to_see_photos": "Dézoomer pour voir les photos", "map_zoom_to_see_photos": "Dézoomer pour voir les photos",
@@ -239,6 +250,7 @@
"partner_page_stop_sharing_content": "{} ne pourra plus accéder à vos photos.", "partner_page_stop_sharing_content": "{} ne pourra plus accéder à vos photos.",
"partner_page_stop_sharing_title": "Arrêter de partager vos photos ?", "partner_page_stop_sharing_title": "Arrêter de partager vos photos ?",
"partner_page_title": "Partenaire", "partner_page_title": "Partenaire",
"permission_onboarding_back": "Back",
"permission_onboarding_continue_anyway": "Continuer quand même", "permission_onboarding_continue_anyway": "Continuer quand même",
"permission_onboarding_get_started": "Commencer", "permission_onboarding_get_started": "Commencer",
"permission_onboarding_go_to_settings": "Accéder aux paramètres", "permission_onboarding_go_to_settings": "Accéder aux paramètres",
@@ -250,9 +262,11 @@
"permission_onboarding_request": "Immich demande l'autorisation de visionner vos photos et vidéo", "permission_onboarding_request": "Immich demande l'autorisation de visionner vos photos et vidéo",
"profile_drawer_app_logs": "Journaux", "profile_drawer_app_logs": "Journaux",
"profile_drawer_client_server_up_to_date": "Le client et le serveur sont à jour", "profile_drawer_client_server_up_to_date": "Le client et le serveur sont à jour",
"profile_drawer_documentation": "Documentation",
"profile_drawer_github": "GitHub",
"profile_drawer_settings": "Paramètres", "profile_drawer_settings": "Paramètres",
"profile_drawer_sign_out": "Se déconnecter", "profile_drawer_sign_out": "Se déconnecter",
"profile_drawer_trash": "Trash", "profile_drawer_trash": "Corbeille",
"recently_added_page_title": "Récemment ajouté", "recently_added_page_title": "Récemment ajouté",
"search_bar_hint": "Rechercher vos photos", "search_bar_hint": "Rechercher vos photos",
"search_page_categories": "Catégories", "search_page_categories": "Catégories",
@@ -276,6 +290,7 @@
"select_user_for_sharing_page_err_album": "Échec de la création de l'album", "select_user_for_sharing_page_err_album": "Échec de la création de l'album",
"select_user_for_sharing_page_share_suggestions": "Suggestions", "select_user_for_sharing_page_share_suggestions": "Suggestions",
"server_info_box_app_version": "Version de l'application", "server_info_box_app_version": "Version de l'application",
"server_info_box_server_url": "URL du serveur",
"server_info_box_server_version": "Version du serveur", "server_info_box_server_version": "Version du serveur",
"setting_image_viewer_help": "Le visualiseur de détails charge d'abord la petite miniature, puis l'aperçu de taille moyenne (s'il est activé), enfin l'original (s'il est activé).", "setting_image_viewer_help": "Le visualiseur de détails charge d'abord la petite miniature, puis l'aperçu de taille moyenne (s'il est activé), enfin l'original (s'il est activé).",
"setting_image_viewer_original_subtitle": "Activez cette option pour charger l'image en résolution originale (volumineux !). Désactiver pour réduire l'utilisation des données (réseau et cache de l'appareil).", "setting_image_viewer_original_subtitle": "Activez cette option pour charger l'image en résolution originale (volumineux !). Désactiver pour réduire l'utilisation des données (réseau et cache de l'appareil).",
@@ -300,28 +315,37 @@
"share_add_photos": "Ajouter des photos", "share_add_photos": "Ajouter des photos",
"share_add_title": "Ajouter un titre", "share_add_title": "Ajouter un titre",
"share_create_album": "Créer un album", "share_create_album": "Créer un album",
"shared_album_activities_input_disable": "Les commentaires sont désactivés",
"shared_album_activities_input_hint": "Dire quelque chose",
"shared_album_activity_remove_content": "Souhaitez-vous supprimer cette activité ?",
"shared_album_activity_remove_title": "Supprimer l'activité",
"shared_album_activity_setting_subtitle": "Laisser les autres réagir",
"shared_album_activity_setting_title": "Commentaires et likes",
"share_dialog_preparing": "Préparation...", "share_dialog_preparing": "Préparation...",
"shared_link_app_bar_title": "Shared Links", "shared_link_app_bar_title": "Liens partagés",
"shared_link_create_app_bar_title": "Create link to share", "shared_link_create_app_bar_title": "Créer un lien pour partager",
"shared_link_create_info": "Let anyone with the link see the selected photo(s)", "shared_link_create_info": "Permettre à toute personne ayant le lien de voir la ou les photos sélectionnées",
"shared_link_create_submit_button": "Create link", "shared_link_create_submit_button": "Créer le lien",
"shared_link_edit_allow_download": "Allow public user to download", "shared_link_edit_allow_download": "Autoriser les utilisateurs publics à télécharger",
"shared_link_edit_allow_upload": "Allow public user to upload", "shared_link_edit_allow_upload": "Autoriser les utilisateurs publics à téléverser",
"shared_link_edit_app_bar_title": "Edit link", "shared_link_edit_app_bar_title": "Modifier le lien",
"shared_link_edit_change_expiry": "Change expiration time", "shared_link_edit_change_expiry": "Modifier le délai d'expiration",
"shared_link_edit_description": "Description", "shared_link_edit_description": "Description",
"shared_link_edit_description_hint": "Enter the share description", "shared_link_edit_description_hint": "Saisir la description du partage",
"shared_link_edit_show_meta": "Show metadata", "shared_link_edit_expire_after": "Expire après",
"shared_link_edit_submit_button": "Update link", "shared_link_edit_password": "Mot de passe",
"shared_link_empty": "You don't have any shared links", "shared_link_edit_password_hint": "Saisir le mot de passe de partage",
"shared_link_manage_links": "Manage Shared links", "shared_link_edit_show_meta": "Afficher les métadonnées",
"share_done": "Done", "shared_link_edit_submit_button": "Mettre à jour le lien",
"shared_link_empty": "Vous n'avez pas de liens partagés",
"shared_link_manage_links": "Gérer les liens partagés",
"share_done": "Fait",
"share_invite": "Inviter à l'album", "share_invite": "Inviter à l'album",
"sharing_page_album": "Albums partagés", "sharing_page_album": "Albums partagés",
"sharing_page_description": "Créez des albums partagés pour partager des photos et des vidéos avec les personnes de votre réseau.", "sharing_page_description": "Créez des albums partagés pour partager des photos et des vidéos avec les personnes de votre réseau.",
"sharing_page_empty_list": "LISTE VIDE", "sharing_page_empty_list": "LISTE VIDE",
"sharing_silver_appbar_create_shared_album": "Créer un album partagé", "sharing_silver_appbar_create_shared_album": "Créer un album partagé",
"sharing_silver_appbar_shared_links": "Shared links", "sharing_silver_appbar_shared_links": "Liens partagés",
"sharing_silver_appbar_share_partner": "Partager avec un partenaire", "sharing_silver_appbar_share_partner": "Partager avec un partenaire",
"tab_controller_nav_library": "Bibliothèque", "tab_controller_nav_library": "Bibliothèque",
"tab_controller_nav_photos": "Photos", "tab_controller_nav_photos": "Photos",
@@ -338,18 +362,18 @@
"theme_setting_three_stage_loading_subtitle": "Le chargement en trois étapes peut améliorer les performances de chargement, mais entraîne une augmentation significative de la charge du réseau.", "theme_setting_three_stage_loading_subtitle": "Le chargement en trois étapes peut améliorer les performances de chargement, mais entraîne une augmentation significative de la charge du réseau.",
"theme_setting_three_stage_loading_title": "Activer le chargement en trois étapes", "theme_setting_three_stage_loading_title": "Activer le chargement en trois étapes",
"translated_text_options": "Options", "translated_text_options": "Options",
"trash_page_delete": "Delete", "trash_page_delete": "Supprimer",
"trash_page_delete_all": "Delete All", "trash_page_delete_all": "Tout supprimer",
"trash_page_empty_trash_btn": "Empty trash", "trash_page_empty_trash_btn": "Vider la corbeille",
"trash_page_empty_trash_dialog_content": "Do you want to empty your trashed assets? These items will be permanently removed from Immich", "trash_page_empty_trash_dialog_content": "Voulez-vous vider les éléments de la corbeille? Ces objets seront définitivement retirés d'Immich",
"trash_page_empty_trash_dialog_ok": "Ok", "trash_page_empty_trash_dialog_ok": "Ok",
"trash_page_info": "Trashed items will be permanently deleted after {} days", "trash_page_info": "Les éléments mis à la corbeille seront définitivement supprimés au bout de {} jours.",
"trash_page_no_assets": "No trashed assets", "trash_page_no_assets": "Pas d'éléments dans la corbeille",
"trash_page_restore": "Restore", "trash_page_restore": "Restaurer",
"trash_page_restore_all": "Restore All", "trash_page_restore_all": "Tout restaurer",
"trash_page_select_assets_btn": "Select assets", "trash_page_select_assets_btn": "Sélectionner les éléments",
"trash_page_select_btn": "Select", "trash_page_select_btn": "Sélectionner",
"trash_page_title": "Trash ({})", "trash_page_title": "Corbeille ({})",
"upload_dialog_cancel": "Annuler", "upload_dialog_cancel": "Annuler",
"upload_dialog_info": "Voulez-vous sauvegarder la sélection vers le serveur ?", "upload_dialog_info": "Voulez-vous sauvegarder la sélection vers le serveur ?",
"upload_dialog_ok": "Télécharger ", "upload_dialog_ok": "Télécharger ",
@@ -360,7 +384,7 @@
"version_announcement_overlay_text_2": "veuillez prendre le temps de visiter le ", "version_announcement_overlay_text_2": "veuillez prendre le temps de visiter le ",
"version_announcement_overlay_text_3": " et assurez-vous que votre configuration docker-compose et .env est à jour pour éviter toute erreur de configuration, en particulier si vous utilisez WatchTower ou tout autre mécanisme qui gère la mise à jour automatique de votre application serveur.", "version_announcement_overlay_text_3": " et assurez-vous que votre configuration docker-compose et .env est à jour pour éviter toute erreur de configuration, en particulier si vous utilisez WatchTower ou tout autre mécanisme qui gère la mise à jour automatique de votre application serveur.",
"version_announcement_overlay_title": "Nouvelle version serveur disponible \uD83C\uDF89", "version_announcement_overlay_title": "Nouvelle version serveur disponible \uD83C\uDF89",
"viewer_remove_from_stack": "Remove from Stack", "viewer_remove_from_stack": "Retirer de la pile",
"viewer_stack_use_as_main_asset": "Use as Main Asset", "viewer_stack_use_as_main_asset": "Utiliser comme élément principal",
"viewer_unstack": "Un-Stack" "viewer_unstack": "Désempiler"
} }
+24
View File
@@ -23,9 +23,13 @@
"album_viewer_appbar_share_err_title": "Failed to change album title", "album_viewer_appbar_share_err_title": "Failed to change album title",
"album_viewer_appbar_share_leave": "Leave album", "album_viewer_appbar_share_leave": "Leave album",
"album_viewer_appbar_share_remove": "Remove from album", "album_viewer_appbar_share_remove": "Remove from album",
"album_viewer_appbar_share_to": "Share To",
"album_viewer_page_share_add_users": "Add users", "album_viewer_page_share_add_users": "Add users",
"all_people_page_title": "People", "all_people_page_title": "People",
"all_videos_page_title": "Videos", "all_videos_page_title": "Videos",
"app_bar_signout_dialog_content": "Are you sure you wanna sign out?",
"app_bar_signout_dialog_ok": "Yes",
"app_bar_signout_dialog_title": "Sign out",
"archive_page_no_archived_assets": "No archived assets found", "archive_page_no_archived_assets": "No archived assets found",
"archive_page_title": "Archive ({})", "archive_page_title": "Archive ({})",
"asset_list_layout_settings_dynamic_layout_title": "Dynamic layout", "asset_list_layout_settings_dynamic_layout_title": "Dynamic layout",
@@ -111,6 +115,8 @@
"cache_settings_statistics_title": "Cache usage", "cache_settings_statistics_title": "Cache usage",
"cache_settings_subtitle": "Control the caching behaviour of the Immich mobile application", "cache_settings_subtitle": "Control the caching behaviour of the Immich mobile application",
"cache_settings_thumbnail_size": "Thumbnail cache size ({} assets)", "cache_settings_thumbnail_size": "Thumbnail cache size ({} assets)",
"cache_settings_tile_subtitle": "Control the local storage behaviour",
"cache_settings_tile_title": "Local Storage",
"cache_settings_title": "Caching Settings", "cache_settings_title": "Caching Settings",
"change_password_form_confirm_password": "Confirm Password", "change_password_form_confirm_password": "Confirm Password",
"change_password_form_description": "Hi {firstName} {lastName},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.", "change_password_form_description": "Hi {firstName} {lastName},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.",
@@ -164,10 +170,15 @@
"home_page_add_to_album_conflicts": "Added {added} assets to album {album}. {failed} assets are already in the album.", "home_page_add_to_album_conflicts": "Added {added} assets to album {album}. {failed} assets are already in the album.",
"home_page_add_to_album_err_local": "Can not add local assets to albums yet, skipping", "home_page_add_to_album_err_local": "Can not add local assets to albums yet, skipping",
"home_page_add_to_album_success": "Added {added} assets to album {album}.", "home_page_add_to_album_success": "Added {added} assets to album {album}.",
"home_page_album_err_partner": "Can not add partner assets to an album yet, skipping",
"home_page_archive_err_local": "Can not archive local assets yet, skipping", "home_page_archive_err_local": "Can not archive local assets yet, skipping",
"home_page_archive_err_partner": "Can not archive partner assets, skipping",
"home_page_building_timeline": "Building the timeline", "home_page_building_timeline": "Building the timeline",
"home_page_delete_err_partner": "Can not delete partner assets, skipping",
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping", "home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
"home_page_favorite_err_partner": "Can not favorite partner assets yet, skipping",
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).", "home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
"home_page_share_err_local": "Can not share local assets via link, skipping",
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping", "home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
"image_viewer_page_state_provider_download_error": "Download Error", "image_viewer_page_state_provider_download_error": "Download Error",
"image_viewer_page_state_provider_download_success": "Download Success", "image_viewer_page_state_provider_download_success": "Download Success",
@@ -239,6 +250,7 @@
"partner_page_stop_sharing_content": "{} will no longer be able to access your photos.", "partner_page_stop_sharing_content": "{} will no longer be able to access your photos.",
"partner_page_stop_sharing_title": "Stop sharing your photos?", "partner_page_stop_sharing_title": "Stop sharing your photos?",
"partner_page_title": "Partner", "partner_page_title": "Partner",
"permission_onboarding_back": "Back",
"permission_onboarding_continue_anyway": "Continue anyway", "permission_onboarding_continue_anyway": "Continue anyway",
"permission_onboarding_get_started": "Get started", "permission_onboarding_get_started": "Get started",
"permission_onboarding_go_to_settings": "Go to settings", "permission_onboarding_go_to_settings": "Go to settings",
@@ -250,6 +262,8 @@
"permission_onboarding_request": "Immich requires permission to view your photos and videos.", "permission_onboarding_request": "Immich requires permission to view your photos and videos.",
"profile_drawer_app_logs": "Logs", "profile_drawer_app_logs": "Logs",
"profile_drawer_client_server_up_to_date": "Client and Server are up-to-date", "profile_drawer_client_server_up_to_date": "Client and Server are up-to-date",
"profile_drawer_documentation": "Documentation",
"profile_drawer_github": "GitHub",
"profile_drawer_settings": "Settings", "profile_drawer_settings": "Settings",
"profile_drawer_sign_out": "Sign Out", "profile_drawer_sign_out": "Sign Out",
"profile_drawer_trash": "Trash", "profile_drawer_trash": "Trash",
@@ -276,6 +290,7 @@
"select_user_for_sharing_page_err_album": "Failed to create album", "select_user_for_sharing_page_err_album": "Failed to create album",
"select_user_for_sharing_page_share_suggestions": "Suggestions", "select_user_for_sharing_page_share_suggestions": "Suggestions",
"server_info_box_app_version": "App Version", "server_info_box_app_version": "App Version",
"server_info_box_server_url": "Server URL",
"server_info_box_server_version": "Server Version", "server_info_box_server_version": "Server Version",
"setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).", "setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).",
"setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).", "setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).",
@@ -300,6 +315,12 @@
"share_add_photos": "Add photos", "share_add_photos": "Add photos",
"share_add_title": "Add a title", "share_add_title": "Add a title",
"share_create_album": "Create album", "share_create_album": "Create album",
"shared_album_activities_input_disable": "Comment is disabled",
"shared_album_activities_input_hint": "Say something",
"shared_album_activity_remove_content": "Do you want to delete this activity?",
"shared_album_activity_remove_title": "Delete Activity",
"shared_album_activity_setting_subtitle": "Let others respond",
"shared_album_activity_setting_title": "Comments & likes",
"share_dialog_preparing": "Preparing...", "share_dialog_preparing": "Preparing...",
"shared_link_app_bar_title": "Shared Links", "shared_link_app_bar_title": "Shared Links",
"shared_link_create_app_bar_title": "Create link to share", "shared_link_create_app_bar_title": "Create link to share",
@@ -311,6 +332,9 @@
"shared_link_edit_change_expiry": "Change expiration time", "shared_link_edit_change_expiry": "Change expiration time",
"shared_link_edit_description": "Description", "shared_link_edit_description": "Description",
"shared_link_edit_description_hint": "Enter the share description", "shared_link_edit_description_hint": "Enter the share description",
"shared_link_edit_expire_after": "Expire after",
"shared_link_edit_password": "Password",
"shared_link_edit_password_hint": "Enter the share password",
"shared_link_edit_show_meta": "Show metadata", "shared_link_edit_show_meta": "Show metadata",
"shared_link_edit_submit_button": "Update link", "shared_link_edit_submit_button": "Update link",
"shared_link_empty": "You don't have any shared links", "shared_link_empty": "You don't have any shared links",
+24
View File
@@ -23,9 +23,13 @@
"album_viewer_appbar_share_err_title": "Hiba az album átnevezése közben", "album_viewer_appbar_share_err_title": "Hiba az album átnevezése közben",
"album_viewer_appbar_share_leave": "Kilépés az albumból", "album_viewer_appbar_share_leave": "Kilépés az albumból",
"album_viewer_appbar_share_remove": "Törlés az albumból", "album_viewer_appbar_share_remove": "Törlés az albumból",
"album_viewer_appbar_share_to": "Share To",
"album_viewer_page_share_add_users": "Felhasználók hozzáadása", "album_viewer_page_share_add_users": "Felhasználók hozzáadása",
"all_people_page_title": "Emberek", "all_people_page_title": "Emberek",
"all_videos_page_title": "Videók", "all_videos_page_title": "Videók",
"app_bar_signout_dialog_content": "Are you sure you wanna sign out?",
"app_bar_signout_dialog_ok": "Yes",
"app_bar_signout_dialog_title": "Sign out",
"archive_page_no_archived_assets": "Nem található archivált média", "archive_page_no_archived_assets": "Nem található archivált média",
"archive_page_title": "Archívum ({})", "archive_page_title": "Archívum ({})",
"asset_list_layout_settings_dynamic_layout_title": "Dynamic layout", "asset_list_layout_settings_dynamic_layout_title": "Dynamic layout",
@@ -111,6 +115,8 @@
"cache_settings_statistics_title": "Gyorsítótár által használt terület", "cache_settings_statistics_title": "Gyorsítótár által használt terület",
"cache_settings_subtitle": "Control the caching behaviour of the Immich mobile application", "cache_settings_subtitle": "Control the caching behaviour of the Immich mobile application",
"cache_settings_thumbnail_size": "Thumbnail cache size ({} assets)", "cache_settings_thumbnail_size": "Thumbnail cache size ({} assets)",
"cache_settings_tile_subtitle": "Control the local storage behaviour",
"cache_settings_tile_title": "Local Storage",
"cache_settings_title": "Gyorsítótár beállítások", "cache_settings_title": "Gyorsítótár beállítások",
"change_password_form_confirm_password": "Jelszó Megerősítése", "change_password_form_confirm_password": "Jelszó Megerősítése",
"change_password_form_description": "Kedves {lastName} {firstName}!\n\nMost jelentkezel be először a rendszerbe vagy más okból szükséfes a jelszavad meváltoztatása. Kérjük, add meg új jelszavad.", "change_password_form_description": "Kedves {lastName} {firstName}!\n\nMost jelentkezel be először a rendszerbe vagy más okból szükséfes a jelszavad meváltoztatása. Kérjük, add meg új jelszavad.",
@@ -164,10 +170,15 @@
"home_page_add_to_album_conflicts": "Added {added} assets to album {album}. {failed} assets are already in the album.", "home_page_add_to_album_conflicts": "Added {added} assets to album {album}. {failed} assets are already in the album.",
"home_page_add_to_album_err_local": "Helyi médiát még nem lehet albumba tenni. Kihagyjuk.", "home_page_add_to_album_err_local": "Helyi médiát még nem lehet albumba tenni. Kihagyjuk.",
"home_page_add_to_album_success": "Added {added} assets to album {album}.", "home_page_add_to_album_success": "Added {added} assets to album {album}.",
"home_page_album_err_partner": "Can not add partner assets to an album yet, skipping",
"home_page_archive_err_local": "Helyi média archiválása még nem támogatott, úgyhogy kihagyjuk", "home_page_archive_err_local": "Helyi média archiválása még nem támogatott, úgyhogy kihagyjuk",
"home_page_archive_err_partner": "Can not archive partner assets, skipping",
"home_page_building_timeline": "Building the timeline", "home_page_building_timeline": "Building the timeline",
"home_page_delete_err_partner": "Can not delete partner assets, skipping",
"home_page_favorite_err_local": "Helyi médiát még nem lehet a kedvencek közé tenni. Kihagyjuk.", "home_page_favorite_err_local": "Helyi médiát még nem lehet a kedvencek közé tenni. Kihagyjuk.",
"home_page_favorite_err_partner": "Can not favorite partner assets yet, skipping",
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).", "home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
"home_page_share_err_local": "Can not share local assets via link, skipping",
"home_page_upload_err_limit": "Csak 30 elemet tudsz egyszerre feltölteni, átugrás", "home_page_upload_err_limit": "Csak 30 elemet tudsz egyszerre feltölteni, átugrás",
"image_viewer_page_state_provider_download_error": "Letöltési Hiba", "image_viewer_page_state_provider_download_error": "Letöltési Hiba",
"image_viewer_page_state_provider_download_success": "Letöltés Sikeres", "image_viewer_page_state_provider_download_success": "Letöltés Sikeres",
@@ -239,6 +250,7 @@
"partner_page_stop_sharing_content": "{} will no longer be able to access your photos.", "partner_page_stop_sharing_content": "{} will no longer be able to access your photos.",
"partner_page_stop_sharing_title": "Stop sharing your photos?", "partner_page_stop_sharing_title": "Stop sharing your photos?",
"partner_page_title": "Partner", "partner_page_title": "Partner",
"permission_onboarding_back": "Back",
"permission_onboarding_continue_anyway": "Folytatás mindenképp", "permission_onboarding_continue_anyway": "Folytatás mindenképp",
"permission_onboarding_get_started": "Kezdjük el", "permission_onboarding_get_started": "Kezdjük el",
"permission_onboarding_go_to_settings": "Beállítások megnyitása", "permission_onboarding_go_to_settings": "Beállítások megnyitása",
@@ -250,6 +262,8 @@
"permission_onboarding_request": "Engedélyezni kell, hogy az Immich hozzáférjen a képekhez és videókhoz", "permission_onboarding_request": "Engedélyezni kell, hogy az Immich hozzáférjen a képekhez és videókhoz",
"profile_drawer_app_logs": "Naplók", "profile_drawer_app_logs": "Naplók",
"profile_drawer_client_server_up_to_date": "Kliens és a szerver is naprakész", "profile_drawer_client_server_up_to_date": "Kliens és a szerver is naprakész",
"profile_drawer_documentation": "Documentation",
"profile_drawer_github": "GitHub",
"profile_drawer_settings": "Beállítások", "profile_drawer_settings": "Beállítások",
"profile_drawer_sign_out": "Kijelentkezés", "profile_drawer_sign_out": "Kijelentkezés",
"profile_drawer_trash": "Trash", "profile_drawer_trash": "Trash",
@@ -276,6 +290,7 @@
"select_user_for_sharing_page_err_album": "Hiba az album létrehozása közben", "select_user_for_sharing_page_err_album": "Hiba az album létrehozása közben",
"select_user_for_sharing_page_share_suggestions": "Javaslatok", "select_user_for_sharing_page_share_suggestions": "Javaslatok",
"server_info_box_app_version": "Alkalmazás Verzió", "server_info_box_app_version": "Alkalmazás Verzió",
"server_info_box_server_url": "Server URL",
"server_info_box_server_version": "Szerver Verzió", "server_info_box_server_version": "Szerver Verzió",
"setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).", "setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).",
"setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).", "setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).",
@@ -300,6 +315,12 @@
"share_add_photos": "Fotók hozzáadása", "share_add_photos": "Fotók hozzáadása",
"share_add_title": "Cím hozzáadása", "share_add_title": "Cím hozzáadása",
"share_create_album": "Album létrehozása", "share_create_album": "Album létrehozása",
"shared_album_activities_input_disable": "Comment is disabled",
"shared_album_activities_input_hint": "Say something",
"shared_album_activity_remove_content": "Do you want to delete this activity?",
"shared_album_activity_remove_title": "Delete Activity",
"shared_album_activity_setting_subtitle": "Let others respond",
"shared_album_activity_setting_title": "Comments & likes",
"share_dialog_preparing": "Előkészítés...", "share_dialog_preparing": "Előkészítés...",
"shared_link_app_bar_title": "Shared Links", "shared_link_app_bar_title": "Shared Links",
"shared_link_create_app_bar_title": "Create link to share", "shared_link_create_app_bar_title": "Create link to share",
@@ -311,6 +332,9 @@
"shared_link_edit_change_expiry": "Change expiration time", "shared_link_edit_change_expiry": "Change expiration time",
"shared_link_edit_description": "Description", "shared_link_edit_description": "Description",
"shared_link_edit_description_hint": "Enter the share description", "shared_link_edit_description_hint": "Enter the share description",
"shared_link_edit_expire_after": "Expire after",
"shared_link_edit_password": "Password",
"shared_link_edit_password_hint": "Enter the share password",
"shared_link_edit_show_meta": "Show metadata", "shared_link_edit_show_meta": "Show metadata",
"shared_link_edit_submit_button": "Update link", "shared_link_edit_submit_button": "Update link",
"shared_link_empty": "You don't have any shared links", "shared_link_empty": "You don't have any shared links",
+27 -3
View File
@@ -23,9 +23,13 @@
"album_viewer_appbar_share_err_title": "Impossibile cambiare il titolo dell'album ", "album_viewer_appbar_share_err_title": "Impossibile cambiare il titolo dell'album ",
"album_viewer_appbar_share_leave": "Lascia album", "album_viewer_appbar_share_leave": "Lascia album",
"album_viewer_appbar_share_remove": "Rimuovere dall'album ", "album_viewer_appbar_share_remove": "Rimuovere dall'album ",
"album_viewer_appbar_share_to": "Share To",
"album_viewer_page_share_add_users": "Aggiungi utenti", "album_viewer_page_share_add_users": "Aggiungi utenti",
"all_people_page_title": "Persone", "all_people_page_title": "Persone",
"all_videos_page_title": "Video", "all_videos_page_title": "Video",
"app_bar_signout_dialog_content": "Are you sure you wanna sign out?",
"app_bar_signout_dialog_ok": "Yes",
"app_bar_signout_dialog_title": "Sign out",
"archive_page_no_archived_assets": "Nessuna oggetto archiviato", "archive_page_no_archived_assets": "Nessuna oggetto archiviato",
"archive_page_title": "Archivia ({})", "archive_page_title": "Archivia ({})",
"asset_list_layout_settings_dynamic_layout_title": "Layout dinamico", "asset_list_layout_settings_dynamic_layout_title": "Layout dinamico",
@@ -111,6 +115,8 @@
"cache_settings_statistics_title": "Uso della cache", "cache_settings_statistics_title": "Uso della cache",
"cache_settings_subtitle": "Controlla il comportamento della cache dell'applicazione mobile immich", "cache_settings_subtitle": "Controlla il comportamento della cache dell'applicazione mobile immich",
"cache_settings_thumbnail_size": "Dimensione cache dei thumbnail ({} assets)", "cache_settings_thumbnail_size": "Dimensione cache dei thumbnail ({} assets)",
"cache_settings_tile_subtitle": "Control the local storage behaviour",
"cache_settings_tile_title": "Local Storage",
"cache_settings_title": "Impostazioni della Cache", "cache_settings_title": "Impostazioni della Cache",
"change_password_form_confirm_password": "Conferma Password ", "change_password_form_confirm_password": "Conferma Password ",
"change_password_form_description": "Ciao {firstName} {lastName},\n\nQuesto è la prima volta che accedi al sistema oppure è stato fatto una richiesta di cambiare la password. Per favore inserisca la nuova password qui sotto", "change_password_form_description": "Ciao {firstName} {lastName},\n\nQuesto è la prima volta che accedi al sistema oppure è stato fatto una richiesta di cambiare la password. Per favore inserisca la nuova password qui sotto",
@@ -164,10 +170,15 @@
"home_page_add_to_album_conflicts": "Aggiunti {added} elementi all'album {album}. {failed} elementi erano già presenti nell'album.", "home_page_add_to_album_conflicts": "Aggiunti {added} elementi all'album {album}. {failed} elementi erano già presenti nell'album.",
"home_page_add_to_album_err_local": "Non puoi aggiungere negli album foto ancora non caricate", "home_page_add_to_album_err_local": "Non puoi aggiungere negli album foto ancora non caricate",
"home_page_add_to_album_success": "Aggiunti {added} elementi all'album {album}", "home_page_add_to_album_success": "Aggiunti {added} elementi all'album {album}",
"home_page_album_err_partner": "Can not add partner assets to an album yet, skipping",
"home_page_archive_err_local": "Non puoi archiviare immagini non ancora caricate", "home_page_archive_err_local": "Non puoi archiviare immagini non ancora caricate",
"home_page_archive_err_partner": "Can not archive partner assets, skipping",
"home_page_building_timeline": "Costruendo il Timeline", "home_page_building_timeline": "Costruendo il Timeline",
"home_page_delete_err_partner": "Can not delete partner assets, skipping",
"home_page_favorite_err_local": "Non puoi aggiungere tra i preferiti le foto ancora non caricate", "home_page_favorite_err_local": "Non puoi aggiungere tra i preferiti le foto ancora non caricate",
"home_page_favorite_err_partner": "Can not favorite partner assets yet, skipping",
"home_page_first_time_notice": "Se è la prima volta che usi l'app, assicurati di scegliere gli album per avere il Timeline con immagini e video", "home_page_first_time_notice": "Se è la prima volta che usi l'app, assicurati di scegliere gli album per avere il Timeline con immagini e video",
"home_page_share_err_local": "Can not share local assets via link, skipping",
"home_page_upload_err_limit": "Puoi caricare al massimo 30 file per volta, ignora quelli in eccesso", "home_page_upload_err_limit": "Puoi caricare al massimo 30 file per volta, ignora quelli in eccesso",
"image_viewer_page_state_provider_download_error": "Errore nel Download", "image_viewer_page_state_provider_download_error": "Errore nel Download",
"image_viewer_page_state_provider_download_success": "Download con successo", "image_viewer_page_state_provider_download_success": "Download con successo",
@@ -239,6 +250,7 @@
"partner_page_stop_sharing_content": "{} non sarà più in grado di accedere alle tue foto.", "partner_page_stop_sharing_content": "{} non sarà più in grado di accedere alle tue foto.",
"partner_page_stop_sharing_title": "Stoppare la condivisione delle tue foto?", "partner_page_stop_sharing_title": "Stoppare la condivisione delle tue foto?",
"partner_page_title": "Partner", "partner_page_title": "Partner",
"permission_onboarding_back": "Back",
"permission_onboarding_continue_anyway": "Continua lo stesso", "permission_onboarding_continue_anyway": "Continua lo stesso",
"permission_onboarding_get_started": "Inizia", "permission_onboarding_get_started": "Inizia",
"permission_onboarding_go_to_settings": "Vai a Impostazioni", "permission_onboarding_go_to_settings": "Vai a Impostazioni",
@@ -250,6 +262,8 @@
"permission_onboarding_request": "Immich richiede i permessi per vedere le tue foto e video", "permission_onboarding_request": "Immich richiede i permessi per vedere le tue foto e video",
"profile_drawer_app_logs": "Logs", "profile_drawer_app_logs": "Logs",
"profile_drawer_client_server_up_to_date": "Client e server sono aggiornati", "profile_drawer_client_server_up_to_date": "Client e server sono aggiornati",
"profile_drawer_documentation": "Documentation",
"profile_drawer_github": "GitHub",
"profile_drawer_settings": "Impostazioni ", "profile_drawer_settings": "Impostazioni ",
"profile_drawer_sign_out": "Logout", "profile_drawer_sign_out": "Logout",
"profile_drawer_trash": "Trash", "profile_drawer_trash": "Trash",
@@ -276,6 +290,7 @@
"select_user_for_sharing_page_err_album": "Impossibile nel creare l'album ", "select_user_for_sharing_page_err_album": "Impossibile nel creare l'album ",
"select_user_for_sharing_page_share_suggestions": "Suggerimenti", "select_user_for_sharing_page_share_suggestions": "Suggerimenti",
"server_info_box_app_version": "Versione App", "server_info_box_app_version": "Versione App",
"server_info_box_server_url": "Server URL",
"server_info_box_server_version": "Versione Server", "server_info_box_server_version": "Versione Server",
"setting_image_viewer_help": "Il visualizzatore dettagliato carica una piccola thumbnail per prima, per poi caricare un immagine di media grandezza (se abilitato). Ed infine carica l'originale (se abilitato).", "setting_image_viewer_help": "Il visualizzatore dettagliato carica una piccola thumbnail per prima, per poi caricare un immagine di media grandezza (se abilitato). Ed infine carica l'originale (se abilitato).",
"setting_image_viewer_original_subtitle": "Abilita per caricare l'immagine originale a risoluzione massima (grande!). Disabilita per ridurre l'utilizzo di banda (sia sul network che nella cache del dispositivo).", "setting_image_viewer_original_subtitle": "Abilita per caricare l'immagine originale a risoluzione massima (grande!). Disabilita per ridurre l'utilizzo di banda (sia sul network che nella cache del dispositivo).",
@@ -300,6 +315,12 @@
"share_add_photos": "Aggiungi foto", "share_add_photos": "Aggiungi foto",
"share_add_title": "Aggiungi un titolo ", "share_add_title": "Aggiungi un titolo ",
"share_create_album": "Crea album", "share_create_album": "Crea album",
"shared_album_activities_input_disable": "Comment is disabled",
"shared_album_activities_input_hint": "Say something",
"shared_album_activity_remove_content": "Do you want to delete this activity?",
"shared_album_activity_remove_title": "Delete Activity",
"shared_album_activity_setting_subtitle": "Let others respond",
"shared_album_activity_setting_title": "Comments & likes",
"share_dialog_preparing": "Preparo…", "share_dialog_preparing": "Preparo…",
"shared_link_app_bar_title": "Shared Links", "shared_link_app_bar_title": "Shared Links",
"shared_link_create_app_bar_title": "Create link to share", "shared_link_create_app_bar_title": "Create link to share",
@@ -311,6 +332,9 @@
"shared_link_edit_change_expiry": "Change expiration time", "shared_link_edit_change_expiry": "Change expiration time",
"shared_link_edit_description": "Description", "shared_link_edit_description": "Description",
"shared_link_edit_description_hint": "Enter the share description", "shared_link_edit_description_hint": "Enter the share description",
"shared_link_edit_expire_after": "Expire after",
"shared_link_edit_password": "Password",
"shared_link_edit_password_hint": "Enter the share password",
"shared_link_edit_show_meta": "Show metadata", "shared_link_edit_show_meta": "Show metadata",
"shared_link_edit_submit_button": "Update link", "shared_link_edit_submit_button": "Update link",
"shared_link_empty": "You don't have any shared links", "shared_link_empty": "You don't have any shared links",
@@ -355,10 +379,10 @@
"upload_dialog_ok": "Carica", "upload_dialog_ok": "Carica",
"upload_dialog_title": "Carica file", "upload_dialog_title": "Carica file",
"version_announcement_overlay_ack": "Presa visione", "version_announcement_overlay_ack": "Presa visione",
"version_announcement_overlay_release_notes": "note di rilascio ", "version_announcement_overlay_release_notes": "note di rilascio",
"version_announcement_overlay_text_1": "Ciao, c'è una nuova versione di", "version_announcement_overlay_text_1": "Ciao, c'è una nuova versione di",
"version_announcement_overlay_text_2": "per favore prenditi il tuo tempo per visitare il", "version_announcement_overlay_text_2": "per favore prenditi il tuo tempo per visitare le ",
"version_announcement_overlay_text_3": "e verifica che il tuo docker-compose e il file .env siano aggiornati per impedire qualsiasi errore di configurazione, specialmente se utilizzate WatchTower o altri strumenti per l'aggiornamento automatico dell'applicativo", "version_announcement_overlay_text_3": " e verifica che il tuo docker-compose e il file .env siano aggiornati per impedire qualsiasi errore di configurazione, specialmente se utilizzate WatchTower o altri strumenti per l'aggiornamento automatico dell'applicativo",
"version_announcement_overlay_title": "Nuova versione del server disponibile \uD83C\uDF89", "version_announcement_overlay_title": "Nuova versione del server disponibile \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",
+35 -11
View File
@@ -23,9 +23,13 @@
"album_viewer_appbar_share_err_title": "タイトル変更の失敗", "album_viewer_appbar_share_err_title": "タイトル変更の失敗",
"album_viewer_appbar_share_leave": "アルバムから脱退", "album_viewer_appbar_share_leave": "アルバムから脱退",
"album_viewer_appbar_share_remove": "アルバムから削除", "album_viewer_appbar_share_remove": "アルバムから削除",
"album_viewer_appbar_share_to": "Share To",
"album_viewer_page_share_add_users": "ユーザーを追加", "album_viewer_page_share_add_users": "ユーザーを追加",
"all_people_page_title": "People", "all_people_page_title": "People",
"all_videos_page_title": "ビデオ", "all_videos_page_title": "ビデオ",
"app_bar_signout_dialog_content": " サインアウトしますか?",
"app_bar_signout_dialog_ok": "はい",
"app_bar_signout_dialog_title": " サインアウト",
"archive_page_no_archived_assets": "アーカイブ済みの写真またはビデオがありません", "archive_page_no_archived_assets": "アーカイブ済みの写真またはビデオがありません",
"archive_page_title": "アーカイブ({})", "archive_page_title": "アーカイブ({})",
"asset_list_layout_settings_dynamic_layout_title": "ダイナミックレイアウト", "asset_list_layout_settings_dynamic_layout_title": "ダイナミックレイアウト",
@@ -111,9 +115,11 @@
"cache_settings_statistics_title": "キャッシュ", "cache_settings_statistics_title": "キャッシュ",
"cache_settings_subtitle": "キャッシュの動作を変更する", "cache_settings_subtitle": "キャッシュの動作を変更する",
"cache_settings_thumbnail_size": "サムネイルのキャッシュのサイズ ({}枚)", "cache_settings_thumbnail_size": "サムネイルのキャッシュのサイズ ({}枚)",
"cache_settings_tile_subtitle": "Control the local storage behaviour",
"cache_settings_tile_title": "Local Storage",
"cache_settings_title": "キャッシュの設定", "cache_settings_title": "キャッシュの設定",
"change_password_form_confirm_password": "確定", "change_password_form_confirm_password": "確定",
"change_password_form_description": "{lastaName} {firstName}さん こんにちは\n\nサーバーにアクセスするのが初めてか、パスワードリセットのリクエストがされました。新しいパスワードを入力してください", "change_password_form_description": "{lastName} {firstName}さん こんにちは\n\nサーバーにアクセスするのが初めてか、パスワードリセットのリクエストがされました。新しいパスワードを入力してください",
"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": "再度パスワードを入力してください",
@@ -148,8 +154,8 @@
"delete_dialog_cancel": "キャンセル", "delete_dialog_cancel": "キャンセル",
"delete_dialog_ok": "削除", "delete_dialog_ok": "削除",
"delete_dialog_title": "永久的に削除", "delete_dialog_title": "永久的に削除",
"delete_shared_link_dialog_content": "Are you sure you want to delete this shared link?", "delete_shared_link_dialog_content": "本当にこの共有リンクを消しますか?",
"delete_shared_link_dialog_title": "Delete Shared Link", "delete_shared_link_dialog_title": "共有リンクを消す",
"description_input_hint_text": "説明を追加", "description_input_hint_text": "説明を追加",
"description_input_submit_error": "説明の編集に失敗、詳細の確認はログで行ってください", "description_input_submit_error": "説明の編集に失敗、詳細の確認はログで行ってください",
"exif_bottom_sheet_description": "説明を追加", "exif_bottom_sheet_description": "説明を追加",
@@ -164,10 +170,15 @@
"home_page_add_to_album_conflicts": "{album}に{added}枚写真を追加しました。追加済みの{failed}枚はスキップしました。", "home_page_add_to_album_conflicts": "{album}に{added}枚写真を追加しました。追加済みの{failed}枚はスキップしました。",
"home_page_add_to_album_err_local": "まだアップロードされてない項目はアルバムに登録できません", "home_page_add_to_album_err_local": "まだアップロードされてない項目はアルバムに登録できません",
"home_page_add_to_album_success": "{album}に{added}枚写真を追加しました", "home_page_add_to_album_success": "{album}に{added}枚写真を追加しました",
"home_page_album_err_partner": "Can not add partner assets to an album yet, skipping",
"home_page_archive_err_local": "まだアップロードされてない項目はアーカイブできません", "home_page_archive_err_local": "まだアップロードされてない項目はアーカイブできません",
"home_page_archive_err_partner": "Can not archive partner assets, skipping",
"home_page_building_timeline": "タイムライン構築中", "home_page_building_timeline": "タイムライン構築中",
"home_page_delete_err_partner": "Can not delete partner assets, skipping",
"home_page_favorite_err_local": "まだアップロードされてない項目はお気に入り登録できません", "home_page_favorite_err_local": "まだアップロードされてない項目はお気に入り登録できません",
"home_page_favorite_err_partner": "Can not favorite partner assets yet, skipping",
"home_page_first_time_notice": "はじめてアプリを使う場合、タイムラインに写真を表示するためにアルバムを選択してください", "home_page_first_time_notice": "はじめてアプリを使う場合、タイムラインに写真を表示するためにアルバムを選択してください",
"home_page_share_err_local": "Can not share local assets via link, skipping",
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping", "home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
"image_viewer_page_state_provider_download_error": "ダウンロード失敗", "image_viewer_page_state_provider_download_error": "ダウンロード失敗",
"image_viewer_page_state_provider_download_success": "ダウンロード成功", "image_viewer_page_state_provider_download_success": "ダウンロード成功",
@@ -239,6 +250,7 @@
"partner_page_stop_sharing_content": "{} will no longer be able to access your photos.", "partner_page_stop_sharing_content": "{} will no longer be able to access your photos.",
"partner_page_stop_sharing_title": "Stop sharing your photos?", "partner_page_stop_sharing_title": "Stop sharing your photos?",
"partner_page_title": "Partner", "partner_page_title": "Partner",
"permission_onboarding_back": "Back",
"permission_onboarding_continue_anyway": "無視して続行", "permission_onboarding_continue_anyway": "無視して続行",
"permission_onboarding_get_started": "はじめる", "permission_onboarding_get_started": "はじめる",
"permission_onboarding_go_to_settings": "システム設定", "permission_onboarding_go_to_settings": "システム設定",
@@ -250,6 +262,8 @@
"permission_onboarding_request": "Immichは写真へのアクセス許可が必要です", "permission_onboarding_request": "Immichは写真へのアクセス許可が必要です",
"profile_drawer_app_logs": "ログ", "profile_drawer_app_logs": "ログ",
"profile_drawer_client_server_up_to_date": "すべて最新です", "profile_drawer_client_server_up_to_date": "すべて最新です",
"profile_drawer_documentation": "Documentation",
"profile_drawer_github": "GitHub",
"profile_drawer_settings": "設定", "profile_drawer_settings": "設定",
"profile_drawer_sign_out": "サインアウト", "profile_drawer_sign_out": "サインアウト",
"profile_drawer_trash": "Trash", "profile_drawer_trash": "Trash",
@@ -276,6 +290,7 @@
"select_user_for_sharing_page_err_album": "アルバム作成に失敗", "select_user_for_sharing_page_err_album": "アルバム作成に失敗",
"select_user_for_sharing_page_share_suggestions": "ユーザ一覧", "select_user_for_sharing_page_share_suggestions": "ユーザ一覧",
"server_info_box_app_version": "アプリVer.", "server_info_box_app_version": "アプリVer.",
"server_info_box_server_url": " サーバのURL",
"server_info_box_server_version": "サーバーVer.", "server_info_box_server_version": "サーバーVer.",
"setting_image_viewer_help": "写真をタップするとサムネイル・中画質(要設定)・オリジナル(要設定)の順に読み込みます", "setting_image_viewer_help": "写真をタップするとサムネイル・中画質(要設定)・オリジナル(要設定)の順に読み込みます",
"setting_image_viewer_original_subtitle": "オリジナルの画像を表示したい時にオンにしてください(最大画質で表示されるのでモバイルデータとストレージの消費量が増えます)。", "setting_image_viewer_original_subtitle": "オリジナルの画像を表示したい時にオンにしてください(最大画質で表示されるのでモバイルデータとストレージの消費量が増えます)。",
@@ -300,20 +315,29 @@
"share_add_photos": "写真を追加", "share_add_photos": "写真を追加",
"share_add_title": "タイトルを追加", "share_add_title": "タイトルを追加",
"share_create_album": "アルバムを作成", "share_create_album": "アルバムを作成",
"shared_album_activities_input_disable": "Comment is disabled",
"shared_album_activities_input_hint": "Say something",
"shared_album_activity_remove_content": "Do you want to delete this activity?",
"shared_album_activity_remove_title": "Delete Activity",
"shared_album_activity_setting_subtitle": "Let others respond",
"shared_album_activity_setting_title": "Comments & likes",
"share_dialog_preparing": "準備中", "share_dialog_preparing": "準備中",
"shared_link_app_bar_title": "Shared Links", "shared_link_app_bar_title": "共有リンク",
"shared_link_create_app_bar_title": "Create link to share", "shared_link_create_app_bar_title": "共有リンクを作る",
"shared_link_create_info": "Let anyone with the link see the selected photo(s)", "shared_link_create_info": "Let anyone with the link see the selected photo(s)",
"shared_link_create_submit_button": "Create link", "shared_link_create_submit_button": "リンクを作る",
"shared_link_edit_allow_download": "Allow public user to download", "shared_link_edit_allow_download": "Allow public user to download",
"shared_link_edit_allow_upload": "Allow public user to upload", "shared_link_edit_allow_upload": "Allow public user to upload",
"shared_link_edit_app_bar_title": "Edit link", "shared_link_edit_app_bar_title": " リンクを編集する",
"shared_link_edit_change_expiry": "Change expiration time", "shared_link_edit_change_expiry": "Change expiration time",
"shared_link_edit_description": "Description", "shared_link_edit_description": " デスクリプション ",
"shared_link_edit_description_hint": "Enter the share description", "shared_link_edit_description_hint": "Enter the share description",
"shared_link_edit_show_meta": "Show metadata", "shared_link_edit_expire_after": "Expire after",
"shared_link_edit_submit_button": "Update link", "shared_link_edit_password": " パスワード",
"shared_link_empty": "You don't have any shared links", "shared_link_edit_password_hint": "共有パスワードを入力する",
"shared_link_edit_show_meta": " メタデータを見る",
"shared_link_edit_submit_button": "リンクをアップデートする",
"shared_link_empty": "共有リンクはありません ",
"shared_link_manage_links": "Manage Shared links", "shared_link_manage_links": "Manage Shared links",
"share_done": "Done", "share_done": "Done",
"share_invite": "アルバムに招待", "share_invite": "アルバムに招待",

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