Compare commits
9 Commits
fix/save-a
...
feat/remov
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c0230ccf3b | ||
|
|
224bb46b4a | ||
|
|
ad0b96a1e5 | ||
|
|
38226fd240 | ||
|
|
f193c5a53f | ||
|
|
debc35a4d5 | ||
|
|
5de76dbaee | ||
|
|
d4b110fc47 | ||
|
|
f7acf1886c |
1
.github/labeler.yml
vendored
1
.github/labeler.yml
vendored
@@ -6,7 +6,6 @@ cli:
|
||||
documentation:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- docs/blob/**
|
||||
- docs/docs/**
|
||||
- docs/src/**
|
||||
- docs/static/**
|
||||
|
||||
16
.github/workflows/merge-translations.yml
vendored
16
.github/workflows/merge-translations.yml
vendored
@@ -10,6 +10,11 @@ on:
|
||||
required: true
|
||||
WEBLATE_TOKEN:
|
||||
required: true
|
||||
inputs:
|
||||
skip:
|
||||
description: 'Skip translations'
|
||||
required: false
|
||||
type: boolean
|
||||
|
||||
permissions: {}
|
||||
|
||||
@@ -25,6 +30,7 @@ jobs:
|
||||
steps:
|
||||
- name: Find translation PR
|
||||
id: find_pr
|
||||
if: ${{ inputs.skip != true }}
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
@@ -51,18 +57,21 @@ jobs:
|
||||
|
||||
- name: Generate a token
|
||||
id: generate_token
|
||||
if: ${{ inputs.skip != true }}
|
||||
uses: actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b # v2.1.1
|
||||
with:
|
||||
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||
|
||||
- name: Lock weblate
|
||||
if: ${{ inputs.skip != true }}
|
||||
env:
|
||||
WEBLATE_TOKEN: ${{ secrets.WEBLATE_TOKEN }}
|
||||
run: |
|
||||
curl --fail-with-body -X POST -H "Authorization: Token $WEBLATE_TOKEN" "$WEBLATE_HOST/api/components/$WEBLATE_COMPONENT/lock/" -d lock=true
|
||||
|
||||
- name: Commit translations
|
||||
if: ${{ inputs.skip != true }}
|
||||
env:
|
||||
WEBLATE_TOKEN: ${{ secrets.WEBLATE_TOKEN }}
|
||||
run: |
|
||||
@@ -71,6 +80,7 @@ jobs:
|
||||
|
||||
- name: Merge PR
|
||||
id: merge_pr
|
||||
if: ${{ inputs.skip != true }}
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.generate_token.outputs.token }}
|
||||
PR_NUMBER: ${{ steps.find_pr.outputs.PR_NUMBER }}
|
||||
@@ -83,6 +93,7 @@ jobs:
|
||||
gh pr merge "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --auto --squash
|
||||
|
||||
- name: Wait for PR to merge
|
||||
if: ${{ inputs.skip != true }}
|
||||
env:
|
||||
GH_TOKEN: ${{ steps.generate_token.outputs.token }}
|
||||
PR_NUMBER: ${{ steps.find_pr.outputs.PR_NUMBER }}
|
||||
@@ -106,7 +117,12 @@ jobs:
|
||||
exit 1
|
||||
|
||||
- name: Unlock weblate
|
||||
if: ${{ inputs.skip != true }}
|
||||
env:
|
||||
WEBLATE_TOKEN: ${{ secrets.WEBLATE_TOKEN }}
|
||||
run: |
|
||||
curl --fail-with-body -X POST -H "Authorization: Token $WEBLATE_TOKEN" "$WEBLATE_HOST/api/components/$WEBLATE_COMPONENT/lock/" -d lock=false
|
||||
|
||||
- name: Report success
|
||||
run: |
|
||||
echo "Workflow completed successfully (or was skipped)"
|
||||
|
||||
9
.github/workflows/prepare-release.yml
vendored
9
.github/workflows/prepare-release.yml
vendored
@@ -10,12 +10,17 @@ on:
|
||||
type: choice
|
||||
options:
|
||||
- 'false'
|
||||
- major
|
||||
- minor
|
||||
- patch
|
||||
mobileBump:
|
||||
description: 'Bump mobile build number'
|
||||
required: false
|
||||
type: boolean
|
||||
skipTranslations:
|
||||
description: 'Skip translations'
|
||||
required: false
|
||||
type: boolean
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}-root
|
||||
@@ -26,6 +31,8 @@ permissions: {}
|
||||
jobs:
|
||||
merge_translations:
|
||||
uses: ./.github/workflows/merge-translations.yml
|
||||
with:
|
||||
skip: ${{ inputs.skipTranslations }}
|
||||
permissions:
|
||||
pull-requests: write
|
||||
secrets:
|
||||
@@ -35,6 +42,7 @@ jobs:
|
||||
|
||||
bump_version:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [merge_translations]
|
||||
outputs:
|
||||
ref: ${{ steps.push-tag.outputs.commit_long_sha }}
|
||||
permissions: {} # No job-level permissions are needed because it uses the app-token
|
||||
@@ -51,6 +59,7 @@ jobs:
|
||||
with:
|
||||
token: ${{ steps.generate-token.outputs.token }}
|
||||
persist-credentials: true
|
||||
ref: main
|
||||
|
||||
- name: Install uv
|
||||
uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@immich/cli",
|
||||
"version": "2.2.91",
|
||||
"version": "2.2.92",
|
||||
"description": "Command Line Interface (CLI) for Immich",
|
||||
"type": "module",
|
||||
"exports": "./dist/index.js",
|
||||
|
||||
@@ -1,110 +0,0 @@
|
||||
---
|
||||
slug: release-1-36
|
||||
title: Release v1.36.0
|
||||
authors: [alextran]
|
||||
tags: [release]
|
||||
date: 2022-11-10
|
||||
---
|
||||
|
||||
Hello everyone, it is my pleasure to deliver the new release of Immich to you. The team has been working hard to bring you the new features and improvements. This release includes some big features that the community has been asking since the beginning of Immich. We hope you will enjoy it.
|
||||
|
||||
Some notable features are:
|
||||
|
||||
- OAuth integration
|
||||
- LivePhoto support on iOS
|
||||
- User config system
|
||||
|
||||
<!--truncate-->
|
||||
|
||||
## LivePhoto iOS Support 🎉
|
||||
|
||||
LivePhoto on iOS is now supported in Immich.
|
||||
|
||||
The motion part will now be uploaded and can be played on the mobile app and the web.
|
||||
|
||||
:::caution
|
||||
|
||||
- The server and the app has to be on version **1.36.x** for the application to work correctly.
|
||||
- Previous uploaded photos will not be updated automatically, you will have to remove and reupload them if you want to keep the LivePhoto functionality.
|
||||
|
||||
:::
|
||||
|
||||
<img
|
||||
src="https://media.giphy.com/media/fTrGceZd7t1ewi8ESc/giphy.gif"
|
||||
width="100%"
|
||||
style={{
|
||||
borderRadius: '10px',
|
||||
boxShadow: 'rgba(9, 30, 66, 0.25) 0px 1px 1px, rgba(9, 30, 66, 0.13) 0px 0px 1px 1px',
|
||||
}}
|
||||
title="LivePhoto playback on the web"
|
||||
/>
|
||||
|
||||
## OAuth Integration 🎉
|
||||
|
||||
I want to borrow this chance to express my gratitude to [@EnricoBilla](https://github.com/EnricoBilla), who has been the trailblazer for this feature since the beginning days of Immich. His PR has sparked ideas, suggestions, and discussion among the team member on how to integrate this feature successfully into the app. Thank you so much for your work and your time.
|
||||
|
||||
OAuth is now integrated into the system. Please follow the guide [here](https://immich.app/docs/usage/oauth) to set up your OAuth integration
|
||||
|
||||
After setting up the correct environment variables in the `.env` file, as shown below
|
||||
|
||||
| Key | Type | Default | Description |
|
||||
| ------------------- | ------- | -------------------- | ------------------------------------------------------------------------- |
|
||||
| OAUTH_ENABLED | boolean | false | Enable/disable OAuth2 |
|
||||
| OAUTH_ISSUER_URL | URL | (required) | Required. Self-discovery URL for client |
|
||||
| OAUTH_CLIENT_ID | string | (required) | Required. Client ID |
|
||||
| OAUTH_CLIENT_SECRET | string | (required) | Required. Client Secret |
|
||||
| OAUTH_SCOPE | string | openid email profile | Full list of scopes to send with the request (space delimited) |
|
||||
| OAUTH_AUTO_REGISTER | boolean | true | When true, will automatically register a user the first time they sign in |
|
||||
| OAUTH_BUTTON_TEXT | string | Login with OAuth | Text for the OAuth button on the web |
|
||||
|
||||
```bash title="Authentik Example"
|
||||
OAUTH_ENABLED=true
|
||||
OAUTH_ISSUER_URL=http://10.1.15.216:9000/application/o/immich-test/
|
||||
OAUTH_CLIENT_ID=30596v8f78a4b6a97d5985c3076b6b4c4d12ddc33
|
||||
OAUTH_CLIENT_SECRET=50f1eafdec353b95b1c638db390db4ab67ef035a51212dbec2f56175e2eb272b5d572c099176e6fe116ecf47ffdd544bgdb9e2edc588307ee0339d25eeccd88
|
||||
OAUTH_BUTTON_TEXT=Login with Authentik
|
||||
```
|
||||
|
||||
The web will have the option to sign in with OAuth.
|
||||
|
||||
<img
|
||||
src="https://user-images.githubusercontent.com/27055614/202923726-f43fa148-47f5-4182-8f29-b0b87e4586fa.png"
|
||||
width="50%"
|
||||
title="Web Sign in with OAuth"
|
||||
style={{
|
||||
borderRadius: '10px',
|
||||
boxShadow: 'rgba(9, 30, 66, 0.25) 0px 1px 1px, rgba(9, 30, 66, 0.13) 0px 0px 1px 1px',
|
||||
}}
|
||||
/>
|
||||
|
||||
The mobile app will check if the server has OAuth enabled before displaying the OAuth
|
||||
sign-in button.
|
||||
|
||||
<img
|
||||
src="https://media.giphy.com/media/3iy3SaNkVYtlkEiw06/giphy.gif"
|
||||
title="Mobile sign in with OAuth"
|
||||
style={{
|
||||
borderRadius: '10px',
|
||||
boxShadow: 'rgba(9, 30, 66, 0.25) 0px 1px 1px, rgba(9, 30, 66, 0.13) 0px 0px 1px 1px',
|
||||
}}
|
||||
/>
|
||||
|
||||
## Support
|
||||
|
||||
<img
|
||||
src="https://media.giphy.com/media/LStqgGESXW8XnuCv5y/giphy.gif"
|
||||
width="300"
|
||||
style={{
|
||||
borderRadius: '10px',
|
||||
boxShadow: 'rgba(9, 30, 66, 0.25) 0px 1px 1px, rgba(9, 30, 66, 0.13) 0px 0px 1px 1px',
|
||||
}}
|
||||
title="Support the project"
|
||||
/>
|
||||
|
||||
If you find the project helpful and it helps you in some ways, you can support the project [one time](https://github.com/sponsors/alextran1502?frequency=one-time&sponsor=alextran1502) or [monthly](https://github.com/sponsors/alextran1502) from GitHub Sponsor
|
||||
|
||||
It is a great way to let me know that you want me to continue developing and working on this project for years to come.
|
||||
|
||||
## Details
|
||||
|
||||
For more details, please check out the [release note](https://github.com/immich-app/immich/releases/tag/v1.36.0_55-dev)
|
||||
@@ -1,103 +0,0 @@
|
||||
---
|
||||
title: Immich Update - June 2023
|
||||
authors: [alextran]
|
||||
tags: [update]
|
||||
---
|
||||
|
||||
Hello everybody, Alex here!
|
||||
|
||||
I am back with another update on Immich. It has been only a month since my last update (May 18th, 2023), but it seems forever. I think the rapid releases of Immich and the amount of work make the perspective of time change in Immich’s world. We have some exciting updates that I think you will like.
|
||||
|
||||
Before going into detail, on behalf of the core team, I would like to thank all of you for loving Immich and contributing to the project. Thank you for helping me make Immich an enjoyable alternative solution to Google Photos so that you have complete control of your data and privacy. I know we are still young and have a lot of work to do, but I am confident we will get there with help from the community. I appreciate all of you from the bottom of my heart!
|
||||
|
||||
<!--truncate-->
|
||||
|
||||
And now, to the exciting part, what is new in Immich’s world?
|
||||
|
||||
- Initial support for existing gallery.
|
||||
- Memory feature.
|
||||
- Support XMP sidecar.
|
||||
- Support more raw formats.
|
||||
- Justified layout for web timeline and blurred thumbnail hash.
|
||||
- Mechanism to host machine learning on a completely different machine.
|
||||
|
||||
## Support for existing gallery
|
||||
|
||||
I know this is the most controversial feature when it comes to Immich’s way of ingesting photos and videos. For many users, having to upload photos and videos to Immich is simply not working. We listen, discuss, and digest this feature internally more than you imagine because it is not a simple feature to tackle while keeping the performance and the user experience at the top level, which is Immich’s primary goal.
|
||||
|
||||
Thankfully, we have many great contributors and developers that want to make this come true. So we came up with an initial implementation of this feature in the form of a supporting read-only gallery.
|
||||
|
||||
To be concise, Immich can now read in the gallery files, register the path into the database, and then generate necessary files and put them through Immich’s machine learning pipeline so you can use all the goodness of Immich without the need to upload them. Since this is the initial implementation, some actions/behavior are not yet supported, and we aim to build toward them in future releases, namely:
|
||||
|
||||
- Assets are not automatically synced and must instead be manually synced with the CLI tool.
|
||||
- Only new files that are added to the gallery will be detected.
|
||||
- Deleted and moved files will not be detected.
|
||||
|
||||
## 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 memory feature is very much similar to GPhotos' implementation of “x years since…”. We are aiming to add more categories of memories in the future, such as “Spotlight of the day” or “Day of the Week highlights”
|
||||
|
||||
<iframe
|
||||
width="560"
|
||||
height="315"
|
||||
src="https://www.youtube.com/embed/j5XZKvViPew"
|
||||
title="YouTube video player"
|
||||
frameborder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
||||
allowfullscreen
|
||||
></iframe>
|
||||
|
||||
This feature is now available on the web and will be ported to the mobile app in the near future.
|
||||
|
||||
## Support XMP Sidecar
|
||||
|
||||
Immich can now import/upload XMP sidecars from the CLI and use the information as the metadata of assets.
|
||||
|
||||
## Support more raw formats.
|
||||
|
||||
With the recent updates on the dependencies of Immich, we are now extending and hardening support for multiple raw formats. So users with DSLR or mirrorless cameras can now upload their original files to Immich and have them displayed in high-quality thumbnails on the web and mobile view.
|
||||
|
||||
## Justified layout for web timeline and blurred thumbnail hash
|
||||
|
||||
This is an aesthetic improvement in user experience when browsing the timeline. Photos and videos are now displayed correctly with perspective orientation, making the browsing experience more pleasurable.
|
||||
|
||||
To further improve the browsing experience, we now added a blur hash to the thumbnail, so the transition is more natural with a dreamy fade in effect, similar to how our brain goes from faded to vivid memory
|
||||
|
||||
<iframe
|
||||
width="560"
|
||||
height="315"
|
||||
src="https://www.youtube.com/embed/b95FLmGHRFc"
|
||||
title="YouTube video player"
|
||||
frameborder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
||||
allowfullscreen
|
||||
></iframe>
|
||||
|
||||
## Hosting machine learning container on a different machine
|
||||
|
||||
With more capabilities Immich is building toward, machine learning will get more powerful and therefore require more resources to run effectively. However, we understand that users might not have the best server resources where they host the Immich instance. Therefore, we changed how machine learning interacts and receives the photos and videos to run through its inference pipeline.
|
||||
|
||||
The machine learning container is now a headless system that can run on any machine. As long as your Immich instance can communicate with the system running the machine learning container, it can send the files and receive the required information to make Immich powerful in terms of searching and intelligence. This helps you to utilize a more powerful machine in your home/infrastructure to perform the CPU-intensive tasks while letting Immich only handle the I/O operations for a pleasant and smooth experience.
|
||||
|
||||
---
|
||||
|
||||
So, those are the highlights for the team and the community after a busy month. There are a lot more changes and improvements. I encourage you to read some release notes, starting from version [v1.57.0](https://github.com/immich-app/immich/releases/tag/v1.57.0) to now.
|
||||
|
||||
Thank you, and I am asking for your support for the project. I hope to be a full-time maintainer of Immich one day to dedicate myself to the project as my life works for the community and my family. You can find the support channels below:
|
||||
|
||||
- Monthly donation via [GitHub Sponsors](https://github.com/sponsors/alextran1502)
|
||||
- One-time donation via [GitHub Sponsors](https://github.com/sponsors/alextran1502?frequency=one-time&sponsor=alextran1502)
|
||||
- [Liberapay](https://liberapay.com/alex.tran1502/)
|
||||
- [buymeacoffee](https://www.buymeacoffee.com/altran1502)
|
||||
- Bitcoin: 3QVAb9dCHutquVejeNXitPqZX26Yg5kxb7
|
||||
- Give a project a star - the contributors love gazing at the stars and seeing their creations shining in the sky.
|
||||
|
||||
Join our friendly [Discord](https://discord.immich.app) to talk and discuss Immich, tech, or anything
|
||||
|
||||
Cheer!
|
||||
|
||||
Until next time!
|
||||
|
||||
Alex
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.8 MiB |
@@ -1,151 +0,0 @@
|
||||
---
|
||||
title: Immich Update - July 2023
|
||||
authors: [alextran]
|
||||
tags: [update, v1.64.0-v1.71.0]
|
||||
---
|
||||
|
||||
Hello, Immich fans, another month, another milestone. We hope you are staying cool and safe in this scorching hot summer across the globe.
|
||||
|
||||
Immich recently got some good recognition when getting to the front page of HackerNews, which helped to let more people know about the project's existence. The project will help more and more people find a solution to control the privacy of their most precious moments. And with the gain in popularity and recognition, we have gotten new users and more questions from the community than ever.
|
||||
|
||||
I want to express my gratitude to all the contributors and the community who have been tremendously helpful to new users' questions and provided technical support.
|
||||
|
||||
Below are the highlights of new features we added to the application over the past month, along with countless bug fixes and improvements across the board, from developer experience to resource optimization and UI/UX improvement. I hope you find these topics as exciting as I am.
|
||||
|
||||
## Highlights
|
||||
|
||||
- Memories feature.
|
||||
- Facial recognition improvements.
|
||||
- Improvements on multi selection behavior on the web.
|
||||
- Shortcuts for common actions on the web.
|
||||
- Support viewer for 360-panorama photos.
|
||||
|
||||
<!--truncate-->
|
||||
|
||||
---
|
||||
|
||||
### Memories feature
|
||||
|
||||
We've added the memory feature on the mobile app, so you can reminisce about your past memories.
|
||||
|
||||
<iframe
|
||||
width="560"
|
||||
height="315"
|
||||
src="https://youtube.com/embed/c7OTl-RqNRE"
|
||||
title="YouTube video player"
|
||||
frameborder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
||||
allowfullscreen
|
||||
></iframe>
|
||||
|
||||
### Facial recognition improvements
|
||||
|
||||
Over the past few releases, we have added many UI improvements to the facial recognition feature to help you manage the recognized people better. Some of the highlights:
|
||||
|
||||
#### Choose a new feature photo for a person.
|
||||
|
||||
<iframe
|
||||
width="560"
|
||||
height="315"
|
||||
src="https://youtube.com/embed/PmJp8DmSh1U"
|
||||
title="YouTube video player"
|
||||
frameborder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
||||
allowfullscreen
|
||||
></iframe>
|
||||
|
||||
#### Hide and show faces.
|
||||
|
||||
You can now select irrelevant faces to hide them. The hidden faces won’t be displayed in search results and the people section in the info panel.
|
||||
|
||||
#### Merge faces.
|
||||
|
||||
This is useful when you have multiple faces of the same person in your photos, and you want to merge them into one.
|
||||
|
||||
<iframe
|
||||
width="560"
|
||||
height="315"
|
||||
src="https://youtube.com/embed/-Xskhw-vpc4"
|
||||
title="YouTube video player"
|
||||
frameborder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
||||
allowfullscreen
|
||||
></iframe>
|
||||
|
||||
We also added a nifty mechanism that when naming a face, similar names will prompt you a merge face option for the convenience.
|
||||
|
||||
<iframe
|
||||
width="560"
|
||||
height="315"
|
||||
src="https://youtube.com/embed/XzE6wficbl4"
|
||||
title="YouTube video player"
|
||||
frameborder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
||||
allowfullscreen
|
||||
></iframe>
|
||||
|
||||
### Improvements on multi selection behavior on the web
|
||||
|
||||
We have added a new multi selection behavior on the web to help you select multiple items easier. You can now select a range of photos and videos by holding the `Shift` key.
|
||||
|
||||
<iframe
|
||||
width="560"
|
||||
height="315"
|
||||
src="https://youtube.com/embed/e_SiuHpVnmM"
|
||||
title="YouTube video player"
|
||||
frameborder="0"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
||||
allowfullscreen
|
||||
></iframe>
|
||||
|
||||
### Shortcuts for common actions on the web.
|
||||
|
||||
Some of us only navigate the world and the web with a keyboard (looking at you, Vim and Emacs users). So it would take away the sacred weapon of choice to require many clicks to perform repetitive actions. So we added quick shortcuts for the following action on the web.
|
||||
|
||||
<img
|
||||
src={require('./images/web-shortcuts-panel.png').default}
|
||||
width="100%"
|
||||
style={{ borderRadius: '25px' }}
|
||||
alt="Dot Env Example"
|
||||
/>
|
||||
|
||||
### Support viewer for 360-panorama photos.
|
||||
|
||||
Photos with the EXIF property of `ProjectionType` will now have a special viewer on the web to view all the angles of the panorama.
|
||||
|
||||
The thumbnail of the 360 degrees panoramas will have a special icon on the top right of the thumbnail
|
||||
|
||||
<img
|
||||
src="https://github.com/immich-app/immich/assets/61410067/728ca1b0-375c-4631-8081-a609843e702f"
|
||||
width="50%"
|
||||
style={{ borderRadius: '25px' }}
|
||||
alt="Dot Env Example"
|
||||
/>
|
||||
|
||||
Panorama in the detail view
|
||||
|
||||
<img
|
||||
src="https://github.com/immich-app/immich/assets/61410067/3c89dac4-395d-45fa-9bc5-98a6248fd476"
|
||||
width="50%"
|
||||
style={{ borderRadius: '25px' }}
|
||||
alt="Dot Env Example"
|
||||
/>
|
||||
|
||||
---
|
||||
|
||||
Thank you, and I am asking for your support for the project. I hope to be a full-time maintainer of Immich one day to dedicate myself to the project as my life's work for the community and my family. You can find the support channels below:
|
||||
|
||||
- Monthly donation via [GitHub Sponsors](https://github.com/sponsors/alextran1502)
|
||||
- One-time donation via [GitHub Sponsors](https://github.com/sponsors/alextran1502?frequency=one-time&sponsor=alextran1502)
|
||||
- [Liberapay](https://liberapay.com/alex.tran1502/)
|
||||
- [buymeacoffee](https://www.buymeacoffee.com/altran1502)
|
||||
- Bitcoin: 3QVAb9dCHutquVejeNXitPqZX26Yg5kxb7
|
||||
- Give a project a star - the contributors love gazing at the stars and seeing their creations shining in the sky.
|
||||
|
||||
Join our friendly [Discord](https://discord.immich.app) to talk and discuss Immich, tech, or anything
|
||||
|
||||
Cheer!
|
||||
|
||||
Until next time!
|
||||
|
||||
Alex
|
||||
@@ -1,71 +0,0 @@
|
||||
---
|
||||
title: Immich Recap 2023
|
||||
authors: [alextran]
|
||||
tags: [update, recap-2023]
|
||||
date: 2023-12-30T00:00
|
||||
---
|
||||
|
||||
Hi everyone,
|
||||
|
||||
Alex from Immich here.
|
||||
|
||||
We are entering the last few weeks of 2023, and it has been quite a year for Immich. The project has grown so much in terms of users, developers, features, maturity, and the community around it. When I started working on Immich, it was simply a challenge for myself and an opportunity to learn new technologies, crafting something fun and useful for my wife during my free time to satisfy my urge to build and create things. I never thought it would become so popular and help so many people. At the end of the day, all we have is memory. I am proud that the team and I have created something to make storing and viewing those precious memories easier without restrictions and without sacrificing our privacy. As the year closes, here’s a recap of everything the project accomplished in 2023.
|
||||
|
||||
# Milestones
|
||||
|
||||
- Public shared links
|
||||
- Favorites page
|
||||
- Immich turned 1
|
||||
- Material Design 3 on the mobile app
|
||||
- Auto-link LivePhotos server-side
|
||||
- iOS background backup
|
||||
- Explore page
|
||||
- CLIP search
|
||||
- Search by metadata
|
||||
- Responsive web app
|
||||
- Archive page
|
||||
- Asset descriptions
|
||||
- 10,000 stars on GitHub
|
||||
- Manage auth devices
|
||||
- Map view
|
||||
- Facial recognition, clustering, searching, renaming, and person management
|
||||
- Partner sharing and unifying timeline between partners' users
|
||||
- Custom storage label
|
||||
- XMP sidecar reading
|
||||
- RAW file formats
|
||||
- Justified layout on the web
|
||||
- Memories
|
||||
- Multi-select via SHIFT
|
||||
- Android Motion Photos
|
||||
- 360° Photos
|
||||
- Album description
|
||||
- Album performance improvements (time buckets)
|
||||
- Video hardware transcoding
|
||||
- Slideshow mode on the web
|
||||
- Configuration file
|
||||
- External libraries
|
||||
- Trash page
|
||||
- Custom theme
|
||||
- Asset Stacking
|
||||
- 20,000 stars on GitHub
|
||||
- Shared album activity and comments
|
||||
- CLI v2
|
||||
- Down to 5 containers (from 8)
|
||||
|
||||
# Fun Statistics
|
||||
|
||||
- We have gone from the release version `1.41.0` to `1.90.0` at the time of writing. On average, we see a release every 7 days.
|
||||
- According to GitHub's metrics, the `immich-server` container image has been pulled almost _4 million_ times.
|
||||
- According to mobile app store metrics, we have 22,000 installations on Android and 6700 installation units on iOS (opt-in only).
|
||||
- Immich is making around $1200/month on average from donations. (Thank you all so much!)
|
||||
- We were guests on two podcasts:
|
||||
- [Self-hosted](https://selfhosted.show/110)
|
||||
- [The Vergecast](https://www.theverge.com/23938533/self-hosting-local-first-software-vergecast)
|
||||
- There are over 4,500 members on the Discord server.
|
||||
- We have over 22,000 stars on the main GitHub repository, gaining 15,000 stars since January 2023.
|
||||
|
||||
Diving into the next year, the team will continue to build on the foundation we have laid out over the past year, implementing more advanced features for searching, organizing, and sharing between users. Bugs will continue to be squashed and conquered. “Shit Alex wrote'' code will continue to be replaced by beautiful, clean code from Jason, Zack, Boet, Daniel, Osorin, Mert, Fynn, Marty, Martin, and Jonathan. The team has my eternal gratitude for creating a welcoming environment for new contributors, helping, teaching, and learning from each other. I’ve realized that hardly a day has gone by where the team hasn’t been in communication about Immich related topics over the past year.
|
||||
|
||||
My long-term goal is to help hone Immich into a diamond in the FOSS space, where the UI, UX, development experiences, documentation, and quality are at a high standard while remaining free for everybody to use.
|
||||
|
||||
I hope you enjoy Immich and have a happy and peaceful holiday.
|
||||
@@ -1,75 +0,0 @@
|
||||
---
|
||||
title: The Immich core team goes full-time
|
||||
authors: [alextran]
|
||||
tags: [update, announcement, FUTO]
|
||||
date: 2024-05-01T00:00
|
||||
---
|
||||
|
||||
**Immich is joining [FUTO](https://futo.org/)!**
|
||||
|
||||
Since the beginning of this adventure, my goal has always been to create a better world for my children. Memories are priceless, and privacy should not be a luxury. However, building quality open source has its challenges. Over the past two years, it has taken significant dedication, time, and effort.
|
||||
|
||||
Recently, a company in Austin, Texas, called FUTO contacted the team. FUTO strives to develop quality and sustainable open software. They build software alternatives that focus on giving control to users. From their mission statement:
|
||||
|
||||
“Computers should belong to you, the people. We develop and fund technology to give them back.”
|
||||
|
||||
FUTO loved Immich and wanted to see if we’d consider working with them to take the project to the next level. In short, FUTO offered to:
|
||||
|
||||
- Pay the core team to work on Immich full-time
|
||||
- Let us keep full autonomy about the project’s direction and leadership
|
||||
- Continue to license Immich under AGPL
|
||||
- Keep Immich’s development direction with no paywalled features
|
||||
- Keep Immich “built for the people” (no ads, data mining/selling, or alternative motives)
|
||||
- Provide us with financial, technical, legal, and administrative support
|
||||
|
||||
After careful deliberation, the team decided that FUTO’s vision closely aligns with our own: to build a better future by providing a polished, performant, and privacy-preserving open-source software solution for photo and video management delivered in a sustainable way.
|
||||
|
||||
Immich’s future has never looked brighter, and we look forward to realizing our vision for Immich as part of FUTO.
|
||||
|
||||
If you have more questions, we’ll host a Q&A live stream on May 9th at 3PM UTC (10AM CST). [You can ask questions here](https://www.live-ask.com/event/01HWP2SB99A1K8EXFBDKZ5Z9CF), and the stream will be live [here on our YouTube channel](https://youtube.com/live/cwz2iZwYpgg).
|
||||
|
||||
Cheers,
|
||||
|
||||
The Immich Team
|
||||
|
||||
---
|
||||
|
||||
## FAQs
|
||||
|
||||
### What is FUTO?
|
||||
|
||||
[https://futo.org/what-is-futo/](https://futo.org/what-is-futo/)
|
||||
|
||||
### Will the license change?
|
||||
|
||||
No. Immich will continue to be licensed under AGPL without a CLA.
|
||||
|
||||
### Will Immich continue to be free?
|
||||
|
||||
Yes. The Immich source code will remain freely available under the AGPL license.
|
||||
|
||||
### Is Immich getting VC funding?
|
||||
|
||||
No. Venture capital implies investment in a business, often with the expectation of a future payout (exit plan). Immich is neither a business that can be acquired nor comes with a money-making exit plan.
|
||||
|
||||
### I am currently supporting Immich through GitHub sponsors. What will happen to my donation?
|
||||
|
||||
Effective immediately, all donations to the Immich organization will be canceled. In the future, we will offer an optional, modest payment option instead. Thank you to everyone who donated to help us get this far!
|
||||
|
||||
### How is funding sustainable?
|
||||
|
||||
Immich and FUTO believe a sustainable future requires a model that does not rely on users-as-a-product. To this end, FUTO advocates that users pay for good, open software. In keeping with this model, we will adopt a purchase price. This means we no longer accept donations, but — _without limiting features for those who do not pay_ — we will soon allow you to purchase Immich through a modest payment. We encourage you to pay for the high-quality software you use to foster a healthy software culture where developers build great applications without hidden motives for their users.
|
||||
|
||||
### When does this change take effect?
|
||||
|
||||
This change takes effect immediately.
|
||||
|
||||
### What will change?
|
||||
|
||||
The following things will change as Immich joins FUTO:
|
||||
|
||||
- The brand, logo, and other Immich trademarks will be transferred to FUTO.
|
||||
- We will stop all donations to the project.
|
||||
- The core team can now dedicate our full attention to Immich
|
||||
- Before the end of the year, we plan to have a roadmap for what it will take to get Immich to a stable release.
|
||||
- Bugs will be squashed, and features will be delivered faster.
|
||||
@@ -1,91 +0,0 @@
|
||||
---
|
||||
title: Licensing announcement - Purchase a license to support Immich
|
||||
authors: [alextran]
|
||||
tags: [update, announcement, FUTO]
|
||||
date: 2024-07-18T00:00
|
||||
---
|
||||
|
||||
Hello everybody,
|
||||
|
||||
Firstly, on behalf of the Immich team, I'd like to thank everybody for your continuous support of Immich since the very first day! Your contributions, encouragement, and community engagement have helped bring Immich to its current state. The team and I are forever grateful for that.
|
||||
|
||||
Since our [last announcement of the core team joining FUTO to work on Immich full-time](https://immich.app/blog/2024/immich-core-team-goes-fulltime), one of the goals of our new position is to foster a healthy relationship between the developers and the users. We believe that this enables us to create great software, establish transparent policies and build trust.
|
||||
|
||||
We want to build a great software application that brings value to you and your loved ones' lives. We are not using you as a product, i.e., selling or tracking your data. We are not putting annoying ads into our software. We respect your privacy. We want to be compensated for the hard work we put in to build Immich for you.
|
||||
|
||||
With those notes, we have enabled a way for you to financially support the continued development of Immich, ensuring the software can move forward and will be maintained, by offering a lifetime license of the software. We think if you like and use software, you should pay for it, but _we're never going to force anyone to pay or try to limit Immich for those who don't._
|
||||
|
||||
There are two types of license that you can choose to purchase: **Server License** and **Individual License**.
|
||||
|
||||
### Server License
|
||||
|
||||
This is a lifetime license costing **$99.99**. The license is applied to the whole server. You and all users that use your server are licensed.
|
||||
|
||||
### Individual License
|
||||
|
||||
This is a lifetime license costing **$24.99**. The license is applied to a single user, and can be used on any server they choose to connect to.
|
||||
|
||||
<img
|
||||
width="837"
|
||||
alt="license-social-gh"
|
||||
src="https://github.com/user-attachments/assets/241932ed-ef3b-44ec-a9e2-ee80754e0cca"
|
||||
/>
|
||||
|
||||
You can purchase the license on [our page - https://buy.immich.app](https://buy.immich.app).
|
||||
|
||||
Starting with release `v1.109.0` you can purchase and enter your purchased license key directly in the app.
|
||||
|
||||
<img
|
||||
width="1414"
|
||||
alt="license-page-gh"
|
||||
src="https://github.com/user-attachments/assets/364fc32a-f6ef-4594-9fea-28d5a26ad77c"
|
||||
/>
|
||||
|
||||
## Thank you
|
||||
|
||||
Thank you again for your support, this will help create a strong foundation and stability for the Immich team to continue developing and maintaining the project that you love to use.
|
||||
|
||||
<p align="center">
|
||||
<img
|
||||
src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExbjY2eWc5Y2F0ZW56MmR4aWE0dDhzZXlidXRmYWZyajl1bWZidXZpcyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/87CKDqErVfMqY/giphy.gif"
|
||||
width="550"
|
||||
title="SUPPORT THE PROJECT!"
|
||||
/>
|
||||
</p>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
Cheers! 🎉
|
||||
|
||||
Immich team
|
||||
|
||||
# FAQ
|
||||
|
||||
### 1. Where can I purchase a license?
|
||||
|
||||
There are several places where you can purchase the license from
|
||||
|
||||
- [https://buy.immich.app](https://buy.immich.app)
|
||||
- [https://pay.futo.org](https://pay.futo.org/)
|
||||
- or directly from the app.
|
||||
|
||||
### 2. Do I need both _Individual License_ and _Server License_?
|
||||
|
||||
No,
|
||||
|
||||
If you are the admin and the sole user, or your instance has less than a total of 4 users, you can buy the **Individual License** for each user.
|
||||
|
||||
If your instance has more than 4 users, it is more cost-effective to buy the **Server License**, which will license all the users on your instance.
|
||||
|
||||
### 3. What do I do if I don't pay?
|
||||
|
||||
You can continue using Immich without any restriction.
|
||||
|
||||
### 4. Will there be any paywalled features?
|
||||
|
||||
No, there will never be any paywalled features.
|
||||
|
||||
### 5. Where can I get support regarding payment issues?
|
||||
|
||||
You can email us with your `orderId` and your email address `billing@futo.org` or on our Discord server.
|
||||
@@ -1,78 +0,0 @@
|
||||
---
|
||||
title: Immich Update - July 2024
|
||||
authors: [alextran]
|
||||
date: 2024-07-01T00:00
|
||||
tags: [update, v1.106.0]
|
||||
---
|
||||
|
||||
Hello everybody! Alex from Immich here and I am back with another development progress update for the project.
|
||||
|
||||
Summer has returned once again, and the night sky is filled with stars, thank you for **38_000 shining stars** you have sent to our [GitHub repo](https://github.com/immich-app/immich)! Since the last announcement several core contributors have started full time. Everything is going great with development, PRs get merged with _brrrrrrr_ rate, conversation exchange between team members is on a new high, we met and are working with the great engineers at FUTO. The spirit is high and we have a lot of things brewing that we think you will like.
|
||||
|
||||
Let's go over some of the updates we had since the last post.
|
||||
|
||||
### Container consolidation
|
||||
|
||||
Reduced the number of total containers from 5 to 4 by making the microservices thread get spawned directly in the server container. Woohoo, remember when Immich had 7 containers?
|
||||
|
||||
### Email notifications
|
||||
|
||||

|
||||
|
||||
We added email notifications to the app with SMTP settings that you can configure for the following events
|
||||
|
||||
- A new account is created for you.
|
||||
- You are added to a shared album.
|
||||
- New media is added to an album.
|
||||
|
||||
### Versioned docs
|
||||
|
||||
You can now jump back into the past or take a peek at the unreleased version of the documentation by selecting the version on the website.
|
||||
|
||||

|
||||
|
||||
### Similarity deduplication
|
||||
|
||||
With more machine learning and CLIP magic, we now have similarity deduplication built into the application where it will search for closely similar images and let you decide what to do with them; i.e keep or trash.
|
||||
|
||||

|
||||
|
||||
### Permanent URL for asset on the web
|
||||
|
||||
The detail view for an asset now has a permanent URL so you can easily share them with your loved ones.
|
||||
|
||||
### Web app translations
|
||||
|
||||
We now have a public Weblate project which the community can use to translate the webapp to their native languages. We are planning to port the mobile app translation to this platform as well. If you would like to contribute, you can take a look [here](https://hosted.weblate.org/projects/immich/immich/). We're already close to 50% translations -- we really appreciate everyone contributing to that!
|
||||
|
||||

|
||||
|
||||
### Read-only/Editor mode on shared album
|
||||
|
||||
As the owner of the album, you can choose if the shared user can edit the album or to only view the content of the album without any modification.
|
||||
|
||||

|
||||
|
||||
### Better video thumbnails
|
||||
|
||||
Immich now tries to find a descriptive video thumbnail instead of simply using the first frame. No more black images for thumbnails!
|
||||
|
||||
### Public Roadmap
|
||||
|
||||
We now have a [public roadmap](https://immich.app/roadmap), giving you a high-level overview of things the team is working on. The first goal of this roadmap is to bring Immich to a stable release, which is expected sometime later this year. Some of the highlights include
|
||||
|
||||
- Auto stacking - Auto stacking of burst photos
|
||||
- Basic editor - Basic photo editing capabilities
|
||||
- Workflows - Automate tasks with workflows
|
||||
- Fine grained access controls - Granular access controls for users and api keys
|
||||
- Better background backups - Rework background backups to be more reliable
|
||||
- Private/locked photos - Private assets with extra protections
|
||||
|
||||
Beyond the items in the roadmap, we have _many many_ more ideas for Immich. The team and I hope that you are enjoying the application, find it helpful in your life and we have nothing but the intention of building out great software for you all!
|
||||
|
||||
Have an amazing Summer or Winter for those in the southern hemisphere! :D
|
||||
|
||||
Until next time,
|
||||
|
||||
Cheers!
|
||||
Alex
|
||||
@@ -1,5 +0,0 @@
|
||||
alextran:
|
||||
name: Alex Tran
|
||||
title: Maintainer of Immich
|
||||
url: https://github.com/alextran1502
|
||||
image_url: https://github.com/alextran1502.png
|
||||
@@ -476,5 +476,5 @@ Recommended minimums:
|
||||
|
||||
- Read the [architecture overview](/docs/developer/architecture)
|
||||
- Learn about [database migrations](/docs/developer/database-migrations)
|
||||
- Explore [API documentation](/docs/api)
|
||||
- Explore [API documentation](https://api.immich.app/)
|
||||
- Join `#immich` on [Discord](https://discord.immich.app)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# OpenAPI
|
||||
|
||||
Immich uses the [OpenAPI](https://swagger.io/specification/) standard to generate API documentation. To view the published docs see [here](/docs/api).
|
||||
Immich uses the [OpenAPI](https://swagger.io/specification/) standard to generate API documentation. To view the published docs see [here](https://api.immich.app/).
|
||||
|
||||
## Generator
|
||||
|
||||
|
||||
@@ -42,8 +42,8 @@ const config = {
|
||||
],
|
||||
presets: [
|
||||
[
|
||||
'docusaurus-preset-openapi',
|
||||
/** @type {import('docusaurus-preset-openapi').Options} */
|
||||
'classic',
|
||||
/** @type {import('@docusaurus/preset-classic').Options} */
|
||||
({
|
||||
docs: {
|
||||
showLastUpdateAuthor: true,
|
||||
@@ -54,14 +54,6 @@ const config = {
|
||||
// Remove this to remove the "edit this page" links.
|
||||
editUrl: 'https://github.com/immich-app/immich/tree/main/docs/',
|
||||
},
|
||||
api: {
|
||||
path: '../open-api/immich-openapi-specs.json',
|
||||
routeBasePath: '/docs/api',
|
||||
},
|
||||
// blog: {
|
||||
// showReadingTime: true,
|
||||
// editUrl: "https://github.com/immich-app/immich/tree/main/docs/",
|
||||
// },
|
||||
theme: {
|
||||
customCss: require.resolve('./src/css/custom.css'),
|
||||
},
|
||||
@@ -100,12 +92,12 @@ const config = {
|
||||
label: 'Docs',
|
||||
},
|
||||
{
|
||||
to: '/roadmap',
|
||||
href: 'https://immich.app/roadmap',
|
||||
position: 'right',
|
||||
label: 'Roadmap',
|
||||
},
|
||||
{
|
||||
to: '/docs/api',
|
||||
href: 'https://api.immich.app/',
|
||||
position: 'right',
|
||||
label: 'API',
|
||||
},
|
||||
@@ -161,15 +153,15 @@ const config = {
|
||||
items: [
|
||||
{
|
||||
label: 'Roadmap',
|
||||
to: '/roadmap',
|
||||
href: 'https://immich.app/roadmap',
|
||||
},
|
||||
{
|
||||
label: 'API',
|
||||
to: '/docs/api',
|
||||
href: 'https://api.immich.app/',
|
||||
},
|
||||
{
|
||||
label: 'Cursed Knowledge',
|
||||
to: '/cursed-knowledge',
|
||||
href: 'https://immich.app/cursed-knowledge',
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
"@mdx-js/react": "^3.0.0",
|
||||
"autoprefixer": "^10.4.17",
|
||||
"docusaurus-lunr-search": "^3.3.2",
|
||||
"docusaurus-preset-openapi": "^0.7.5",
|
||||
"lunr": "^2.3.9",
|
||||
"postcss": "^8.4.25",
|
||||
"prism-react-renderer": "^2.3.1",
|
||||
|
||||
@@ -1,273 +0,0 @@
|
||||
import {
|
||||
mdiBug,
|
||||
mdiCalendarToday,
|
||||
mdiCrosshairsOff,
|
||||
mdiCrop,
|
||||
mdiDatabase,
|
||||
mdiLeadPencil,
|
||||
mdiLockOff,
|
||||
mdiLockOutline,
|
||||
mdiMicrosoftWindows,
|
||||
mdiSecurity,
|
||||
mdiSpeedometerSlow,
|
||||
mdiTrashCan,
|
||||
mdiWeb,
|
||||
mdiWrap,
|
||||
mdiCloudKeyOutline,
|
||||
mdiRegex,
|
||||
mdiCodeJson,
|
||||
mdiClockOutline,
|
||||
mdiAccountOutline,
|
||||
mdiRestart,
|
||||
} from '@mdi/js';
|
||||
import Layout from '@theme/Layout';
|
||||
import React from 'react';
|
||||
import { Timeline, Item as TimelineItem } from '../components/timeline';
|
||||
|
||||
const withLanguage = (date: Date) => (language: string) => date.toLocaleDateString(language);
|
||||
|
||||
type Item = Omit<TimelineItem, 'done' | 'getDateLabel'> & { date: Date };
|
||||
|
||||
const items: Item[] = [
|
||||
{
|
||||
icon: mdiClockOutline,
|
||||
iconColor: 'gray',
|
||||
title: 'setTimeout is cursed',
|
||||
description:
|
||||
'The setTimeout method in JavaScript is cursed when used with small values because the implementation may or may not actually wait the specified time.',
|
||||
link: {
|
||||
url: 'https://github.com/immich-app/immich/pull/20655',
|
||||
text: '#20655',
|
||||
},
|
||||
date: new Date(2025, 7, 4),
|
||||
},
|
||||
{
|
||||
icon: mdiAccountOutline,
|
||||
iconColor: '#DAB1DA',
|
||||
title: 'PostgreSQL USER is cursed',
|
||||
description:
|
||||
'The USER keyword in PostgreSQL is cursed because you can select from it like a table, which leads to confusion if you have a table name user as well.',
|
||||
link: {
|
||||
url: 'https://github.com/immich-app/immich/pull/19891',
|
||||
text: '#19891',
|
||||
},
|
||||
date: new Date(2025, 7, 4),
|
||||
},
|
||||
{
|
||||
icon: mdiRestart,
|
||||
iconColor: '#8395e3',
|
||||
title: 'PostgreSQL RESET is cursed',
|
||||
description:
|
||||
'PostgreSQL RESET is cursed because it is impossible to RESET a PostgreSQL extension parameter if the extension has been uninstalled.',
|
||||
link: {
|
||||
url: 'https://github.com/immich-app/immich/pull/19363',
|
||||
text: '#19363',
|
||||
},
|
||||
date: new Date(2025, 5, 20),
|
||||
},
|
||||
{
|
||||
icon: mdiRegex,
|
||||
iconColor: 'purple',
|
||||
title: 'Zitadel Actions are cursed',
|
||||
description:
|
||||
"Zitadel is cursed because its custom scripting feature is executed with a JS engine that doesn't support regex named capture groups.",
|
||||
link: {
|
||||
url: 'https://github.com/dop251/goja',
|
||||
text: 'Go JS engine',
|
||||
},
|
||||
date: new Date(2025, 5, 4),
|
||||
},
|
||||
{
|
||||
icon: mdiCloudKeyOutline,
|
||||
iconColor: '#0078d4',
|
||||
title: 'Entra is cursed',
|
||||
description:
|
||||
"Microsoft Entra supports PKCE, but doesn't include it in its OpenID discovery document. This leads to clients thinking PKCE isn't available.",
|
||||
link: {
|
||||
url: 'https://github.com/immich-app/immich/pull/18725',
|
||||
text: '#18725',
|
||||
},
|
||||
date: new Date(2025, 4, 30),
|
||||
},
|
||||
{
|
||||
icon: mdiCrop,
|
||||
iconColor: 'tomato',
|
||||
title: 'Image dimensions in EXIF metadata are cursed',
|
||||
description:
|
||||
'The dimensions in EXIF metadata can be different from the actual dimensions of the image, causing issues with cropping and resizing.',
|
||||
link: {
|
||||
url: 'https://github.com/immich-app/immich/pull/17974',
|
||||
text: '#17974',
|
||||
},
|
||||
date: new Date(2025, 4, 5),
|
||||
},
|
||||
{
|
||||
icon: mdiCodeJson,
|
||||
iconColor: 'yellow',
|
||||
title: 'YAML whitespace is cursed',
|
||||
description: 'YAML whitespaces are often handled in unintuitive ways.',
|
||||
link: {
|
||||
url: 'https://github.com/immich-app/immich/pull/17309',
|
||||
text: '#17309',
|
||||
},
|
||||
date: new Date(2025, 3, 1),
|
||||
},
|
||||
{
|
||||
icon: mdiMicrosoftWindows,
|
||||
iconColor: '#357EC7',
|
||||
title: 'Hidden files in Windows are cursed',
|
||||
description:
|
||||
'Hidden files in Windows cannot be opened with the "w" flag. That, combined with SMB option "hide dot files" leads to a lot of confusion.',
|
||||
link: {
|
||||
url: 'https://github.com/immich-app/immich/pull/12812',
|
||||
text: '#12812',
|
||||
},
|
||||
date: new Date(2024, 8, 20),
|
||||
},
|
||||
{
|
||||
icon: mdiWrap,
|
||||
iconColor: 'gray',
|
||||
title: 'Carriage returns in bash scripts are cursed',
|
||||
description: 'Git can be configured to automatically convert LF to CRLF on checkout and CRLF breaks bash scripts.',
|
||||
link: {
|
||||
url: 'https://github.com/immich-app/immich/pull/11613',
|
||||
text: '#11613',
|
||||
},
|
||||
date: new Date(2024, 7, 7),
|
||||
},
|
||||
{
|
||||
icon: mdiLockOff,
|
||||
iconColor: 'red',
|
||||
title: 'Fetch inside Cloudflare Workers is cursed',
|
||||
description:
|
||||
'Fetch requests in Cloudflare Workers use http by default, even if you explicitly specify https, which can often cause redirect loops.',
|
||||
link: {
|
||||
url: 'https://community.cloudflare.com/t/does-cloudflare-worker-allow-secure-https-connection-to-fetch-even-on-flexible-ssl/68051/5',
|
||||
text: 'Cloudflare',
|
||||
},
|
||||
date: new Date(2024, 7, 7),
|
||||
},
|
||||
{
|
||||
icon: mdiCrosshairsOff,
|
||||
iconColor: 'gray',
|
||||
title: 'GPS sharing on mobile is cursed',
|
||||
description:
|
||||
'Some phones will silently strip GPS data from images when apps without location permission try to access them.',
|
||||
link: {
|
||||
url: 'https://github.com/immich-app/immich/discussions/11268',
|
||||
text: '#11268',
|
||||
},
|
||||
date: new Date(2024, 6, 21),
|
||||
},
|
||||
{
|
||||
icon: mdiLeadPencil,
|
||||
iconColor: 'gold',
|
||||
title: 'PostgreSQL NOTIFY is cursed',
|
||||
description:
|
||||
'PostgreSQL does everything in a transaction, including NOTIFY. This means using the socket.io postgres-adapter writes to WAL every 5 seconds.',
|
||||
link: { url: 'https://github.com/immich-app/immich/pull/10801', text: '#10801' },
|
||||
date: new Date(2024, 6, 3),
|
||||
},
|
||||
{
|
||||
icon: mdiWeb,
|
||||
iconColor: 'lightskyblue',
|
||||
title: 'npm scripts are cursed',
|
||||
description:
|
||||
'npm scripts make a http call to the npm registry each time they run, which means they are a terrible way to execute a health check.',
|
||||
link: { url: 'https://github.com/immich-app/immich/issues/10796', text: '#10796' },
|
||||
date: new Date(2024, 6, 3),
|
||||
},
|
||||
{
|
||||
icon: mdiSpeedometerSlow,
|
||||
iconColor: 'brown',
|
||||
title: '50 extra packages are cursed',
|
||||
description:
|
||||
'There is a user in the JavaScript community who goes around adding "backwards compatibility" to projects. They do this by adding 50 extra package dependencies to your project, which are maintained by them.',
|
||||
link: { url: 'https://github.com/immich-app/immich/pull/10690', text: '#10690' },
|
||||
date: new Date(2024, 5, 28),
|
||||
},
|
||||
{
|
||||
icon: mdiLockOutline,
|
||||
iconColor: 'gold',
|
||||
title: 'Long passwords are cursed',
|
||||
description:
|
||||
'The bcrypt implementation only uses the first 72 bytes of a string. Any characters after that are ignored.',
|
||||
// link: GHSA-4p64-9f7h-3432
|
||||
date: new Date(2024, 5, 25),
|
||||
},
|
||||
{
|
||||
icon: mdiCalendarToday,
|
||||
iconColor: 'greenyellow',
|
||||
title: 'JavaScript Date objects are cursed',
|
||||
description: 'JavaScript date objects are 1 indexed for years and days, but 0 indexed for months.',
|
||||
link: { url: 'https://github.com/immich-app/immich/pull/6787', text: '#6787' },
|
||||
date: new Date(2024, 0, 31),
|
||||
},
|
||||
{
|
||||
icon: mdiBug,
|
||||
iconColor: 'green',
|
||||
title: 'ESM imports are cursed',
|
||||
description:
|
||||
'Prior to Node.js v20.8 using --experimental-vm-modules in a CommonJS project that imported an ES module that imported a CommonJS modules would create a segfault and crash Node.js',
|
||||
link: {
|
||||
url: 'https://github.com/immich-app/immich/pull/6719',
|
||||
text: '#6179',
|
||||
},
|
||||
date: new Date(2024, 0, 9),
|
||||
},
|
||||
{
|
||||
icon: mdiDatabase,
|
||||
iconColor: 'gray',
|
||||
title: 'PostgreSQL parameters are cursed',
|
||||
description: `PostgresSQL has a limit of ${Number(65535).toLocaleString()} parameters, so bulk inserts can fail with large datasets.`,
|
||||
link: {
|
||||
url: 'https://github.com/immich-app/immich/pull/6034',
|
||||
text: '#6034',
|
||||
},
|
||||
date: new Date(2023, 11, 28),
|
||||
},
|
||||
{
|
||||
icon: mdiSecurity,
|
||||
iconColor: 'gold',
|
||||
title: 'Secure contexts are cursed',
|
||||
description: `Some web features like the clipboard API only work in "secure contexts" (ie. https or localhost)`,
|
||||
link: {
|
||||
url: 'https://github.com/immich-app/immich/issues/2981',
|
||||
text: '#2981',
|
||||
},
|
||||
date: new Date(2023, 5, 26),
|
||||
},
|
||||
{
|
||||
icon: mdiTrashCan,
|
||||
iconColor: 'gray',
|
||||
title: 'TypeORM deletes are cursed',
|
||||
description: `The remove implementation in TypeORM mutates the input, deleting the id property from the original object.`,
|
||||
link: {
|
||||
url: 'https://github.com/typeorm/typeorm/issues/7024#issuecomment-948519328',
|
||||
text: 'typeorm#6034',
|
||||
},
|
||||
date: new Date(2023, 1, 23),
|
||||
},
|
||||
];
|
||||
|
||||
export default function CursedKnowledgePage(): JSX.Element {
|
||||
return (
|
||||
<Layout title="Cursed Knowledge" description="Things we wish we didn't know">
|
||||
<section className="my-8">
|
||||
<h1 className="md:text-6xl text-center mb-10 text-immich-primary dark:text-immich-dark-primary px-2">
|
||||
Cursed Knowledge
|
||||
</h1>
|
||||
<p className="text-center text-xl px-2">
|
||||
Cursed knowledge we have learned as a result of building Immich that we wish we never knew.
|
||||
</p>
|
||||
<div className="flex justify-around mt-8 w-full max-w-full">
|
||||
<Timeline
|
||||
items={items
|
||||
.sort((a, b) => b.date.getTime() - a.date.getTime())
|
||||
.map((item) => ({ ...item, getDateLabel: withLanguage(item.date) }))}
|
||||
/>
|
||||
</div>
|
||||
</section>
|
||||
</Layout>
|
||||
);
|
||||
}
|
||||
@@ -1,123 +1,5 @@
|
||||
import React from 'react';
|
||||
import Link from '@docusaurus/Link';
|
||||
import Layout from '@theme/Layout';
|
||||
import { discordPath, discordViewBox } from '@site/src/components/svg-paths';
|
||||
import ThemedImage from '@theme/ThemedImage';
|
||||
import Icon from '@mdi/react';
|
||||
|
||||
function HomepageHeader() {
|
||||
return (
|
||||
<header>
|
||||
<div className="top-[calc(12%)] md:top-[calc(30%)] h-screen w-full absolute -z-10">
|
||||
<img src={'img/immich-logo.svg'} className="h-[110%] w-[110%] mb-2 antialiased -z-10" alt="Immich logo" />
|
||||
<div className="w-full h-[120vh] absolute left-0 top-0 backdrop-blur-3xl bg-immich-bg/40 dark:bg-transparent"></div>
|
||||
</div>
|
||||
<section className="text-center pt-12 sm:pt-24 bg-immich-bg/50 dark:bg-immich-dark-bg/80">
|
||||
<a href="https://futo.org" target="_blank" rel="noopener noreferrer">
|
||||
<ThemedImage
|
||||
sources={{ dark: 'img/logomark-dark-with-futo.svg', light: 'img/logomark-light-with-futo.svg' }}
|
||||
className="h-[125px] w-[125px] mb-2 antialiased rounded-none"
|
||||
alt="Immich logo"
|
||||
/>
|
||||
</a>
|
||||
|
||||
<div className="mt-8">
|
||||
<p className="text-3xl md:text-5xl sm:leading-tight mb-1 font-extrabold text-black/90 dark:text-white px-4">
|
||||
Self-hosted{' '}
|
||||
<span className="text-immich-primary dark:text-immich-dark-primary">
|
||||
photo and <span className="block"></span>
|
||||
video management{' '}
|
||||
</span>
|
||||
solution<span className="block"></span>
|
||||
</p>
|
||||
|
||||
<p className="max-w-1/4 m-auto mt-4 px-4 text-lg text-gray-700 dark:text-gray-100">
|
||||
Easily back up, organize, and manage your photos on your own server. Immich helps you
|
||||
<span className="sm:block"></span> browse, search and organize your photos and videos with ease, without
|
||||
sacrificing your privacy.
|
||||
</p>
|
||||
</div>
|
||||
<div className="flex flex-col sm:flex-row place-items-center place-content-center mt-9 gap-4 ">
|
||||
<Link
|
||||
className="flex place-items-center place-content-center py-3 px-8 border bg-immich-primary dark:bg-immich-dark-primary rounded-xl no-underline hover:no-underline text-white hover:text-gray-50 dark:text-immich-dark-bg font-bold"
|
||||
to="docs/overview/quick-start"
|
||||
>
|
||||
Get Started
|
||||
</Link>
|
||||
|
||||
<Link
|
||||
className="flex place-items-center place-content-center py-3 px-8 border bg-white/90 dark:bg-gray-300 rounded-xl hover:no-underline text-immich-primary dark:text-immich-dark-bg font-bold"
|
||||
to="https://demo.immich.app/"
|
||||
>
|
||||
Open Demo
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
<div className="my-8 flex gap-1 font-medium place-items-center place-content-center text-immich-primary dark:text-immich-dark-primary">
|
||||
<Icon
|
||||
path={discordPath}
|
||||
viewBox={discordViewBox} /* viewBox may show an error in your IDE but it is normal. */
|
||||
size={1}
|
||||
/>
|
||||
<Link to="https://discord.immich.app/">Join our Discord</Link>
|
||||
</div>
|
||||
<ThemedImage
|
||||
sources={{ dark: '/img/screenshot-dark.webp', light: '/img/screenshot-light.webp' }}
|
||||
alt="screenshots"
|
||||
className="w-[95%] lg:w-[85%] xl:w-[70%] 2xl:w-[60%] "
|
||||
/>
|
||||
<div className="mx-[25%] m-auto my-14 md:my-28">
|
||||
<hr className="border bg-gray-500 dark:bg-gray-400" />
|
||||
</div>
|
||||
<ThemedImage
|
||||
sources={{ dark: 'img/logomark-dark.svg', light: 'img/logomark-light.svg' }}
|
||||
className="h-[115px] w-[115px] mb-2 antialiased rounded-none"
|
||||
alt="Immich logo"
|
||||
/>
|
||||
<div>
|
||||
<p className="font-bold text-2xl md:text-5xl ">Download the mobile app</p>
|
||||
<p className="text-lg">
|
||||
Download the Immich app and start backing up your photos and videos securely to your own server
|
||||
</p>
|
||||
</div>
|
||||
<div className="flex flex-col sm:flex-row place-items-center place-content-center mt-4 gap-1">
|
||||
<div className="h-24">
|
||||
<a href="https://play.google.com/store/apps/details?id=app.alextran.immich">
|
||||
<img className="h-24" alt="Get it on Google Play" src="/img/google-play-badge.png" />
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div className="h-24">
|
||||
<a href="https://apps.apple.com/sg/app/immich/id1613945652">
|
||||
<img className="h-24 sm:p-3.5 p-3" alt="Download on the App Store" src="/img/ios-app-store-badge.svg" />
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div className="h-24">
|
||||
<a href="https://github.com/immich-app/immich/releases/latest">
|
||||
<img className="h-24 sm:p-3.5 p-3" alt="Download APK" src="/img/download-apk-github.svg" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<ThemedImage
|
||||
sources={{ dark: '/img/app-qr-code-dark.svg', light: '/img/app-qr-code-light.svg' }}
|
||||
alt="app qr code"
|
||||
width={'150px'}
|
||||
className="shadow-lg p-3 my-8 dark:bg-immich-dark-bg "
|
||||
/>
|
||||
</section>
|
||||
</header>
|
||||
);
|
||||
}
|
||||
import { Redirect } from '@docusaurus/router';
|
||||
|
||||
export default function Home(): JSX.Element {
|
||||
return (
|
||||
<Layout title="Home" description="Self-hosted photo and video management solution" noFooter={true}>
|
||||
<HomepageHeader />
|
||||
<div className="flex flex-col place-items-center text-center place-content-center dark:bg-immich-dark-bg py-8">
|
||||
<p>This project is available under GNU AGPL v3 license.</p>
|
||||
<p className="text-sm">Privacy should not be a luxury</p>
|
||||
</div>
|
||||
</Layout>
|
||||
);
|
||||
return <Redirect to="/docs/overview/welcome" />;
|
||||
}
|
||||
|
||||
@@ -1,944 +0,0 @@
|
||||
import {
|
||||
mdiAccountGroup,
|
||||
mdiAccountGroupOutline,
|
||||
mdiAndroid,
|
||||
mdiAppleIos,
|
||||
mdiArchiveOutline,
|
||||
mdiBash,
|
||||
mdiBookSearchOutline,
|
||||
mdiBookmark,
|
||||
mdiCakeVariant,
|
||||
mdiCameraBurst,
|
||||
mdiChartBoxMultipleOutline,
|
||||
mdiCheckAll,
|
||||
mdiCheckboxMarked,
|
||||
mdiCloudUploadOutline,
|
||||
mdiCollage,
|
||||
mdiContentDuplicate,
|
||||
mdiCrop,
|
||||
mdiDevices,
|
||||
mdiEmailOutline,
|
||||
mdiExpansionCard,
|
||||
mdiEyeOutline,
|
||||
mdiEyeRefreshOutline,
|
||||
mdiFaceMan,
|
||||
mdiFaceManOutline,
|
||||
mdiFile,
|
||||
mdiFileSearch,
|
||||
mdiFlash,
|
||||
mdiFolder,
|
||||
mdiFolderMultiple,
|
||||
mdiForum,
|
||||
mdiHandshakeOutline,
|
||||
mdiHeart,
|
||||
mdiHistory,
|
||||
mdiImage,
|
||||
mdiImageAlbum,
|
||||
mdiImageEdit,
|
||||
mdiImageMultipleOutline,
|
||||
mdiImageSearch,
|
||||
mdiKeyboardSettingsOutline,
|
||||
mdiLicense,
|
||||
mdiLockOutline,
|
||||
mdiMagnify,
|
||||
mdiMagnifyScan,
|
||||
mdiMap,
|
||||
mdiMaterialDesign,
|
||||
mdiMatrix,
|
||||
mdiMerge,
|
||||
mdiMonitor,
|
||||
mdiMotionPlayOutline,
|
||||
mdiPalette,
|
||||
mdiPanVertical,
|
||||
mdiPartyPopper,
|
||||
mdiPencil,
|
||||
mdiRaw,
|
||||
mdiRocketLaunch,
|
||||
mdiRotate360,
|
||||
mdiScaleBalance,
|
||||
mdiSecurity,
|
||||
mdiServer,
|
||||
mdiShare,
|
||||
mdiShareAll,
|
||||
mdiShareCircle,
|
||||
mdiStar,
|
||||
mdiStarOutline,
|
||||
mdiTableKey,
|
||||
mdiTag,
|
||||
mdiTagMultiple,
|
||||
mdiText,
|
||||
mdiThemeLightDark,
|
||||
mdiTrashCanOutline,
|
||||
mdiVectorCombine,
|
||||
mdiFolderSync,
|
||||
mdiFaceRecognition,
|
||||
mdiVideo,
|
||||
mdiWeb,
|
||||
mdiDatabaseOutline,
|
||||
mdiLinkEdit,
|
||||
mdiTagFaces,
|
||||
mdiMovieOpenPlayOutline,
|
||||
mdiCast,
|
||||
} from '@mdi/js';
|
||||
import Layout from '@theme/Layout';
|
||||
import React from 'react';
|
||||
import { Item, Timeline } from '../components/timeline';
|
||||
|
||||
const releases = {
|
||||
'v1.135.0': new Date(2025, 5, 18),
|
||||
'v1.133.0': new Date(2025, 4, 21),
|
||||
'v1.130.0': new Date(2025, 2, 25),
|
||||
'v1.127.0': new Date(2025, 1, 26),
|
||||
'v1.122.0': new Date(2024, 11, 5),
|
||||
'v1.120.0': new Date(2024, 10, 6),
|
||||
'v1.114.0': new Date(2024, 8, 6),
|
||||
'v1.113.0': new Date(2024, 7, 30),
|
||||
'v1.112.0': new Date(2024, 7, 14),
|
||||
'v1.111.0': new Date(2024, 6, 26),
|
||||
'v1.110.0': new Date(2024, 5, 11),
|
||||
'v1.109.0': new Date(2024, 6, 18),
|
||||
'v1.106.1': new Date(2024, 5, 11),
|
||||
'v1.104.0': new Date(2024, 4, 13),
|
||||
'v1.103.0': new Date(2024, 3, 29),
|
||||
'v1.102.0': new Date(2024, 3, 15),
|
||||
'v1.99.0': new Date(2024, 2, 20),
|
||||
'v1.98.0': new Date(2024, 2, 7),
|
||||
'v1.95.0': new Date(2024, 1, 20),
|
||||
'v1.94.0': new Date(2024, 0, 31),
|
||||
'v1.93.0': new Date(2024, 0, 19),
|
||||
'v1.91.0': new Date(2023, 11, 15),
|
||||
'v1.90.0': new Date(2023, 11, 7),
|
||||
'v1.88.0': new Date(2023, 10, 20),
|
||||
'v1.84.0': new Date(2023, 10, 1),
|
||||
'v1.83.0': new Date(2023, 9, 28),
|
||||
'v1.82.0': new Date(2023, 9, 17),
|
||||
'v1.79.0': new Date(2023, 8, 21),
|
||||
'v1.76.0': new Date(2023, 7, 29),
|
||||
'v1.75.0': new Date(2023, 7, 26),
|
||||
'v1.72.0': new Date(2023, 7, 6),
|
||||
'v1.71.0': new Date(2023, 6, 29),
|
||||
'v1.69.0': new Date(2023, 6, 23),
|
||||
'v1.68.0': new Date(2023, 6, 20),
|
||||
'v1.67.0': new Date(2023, 6, 14),
|
||||
'v1.66.0': new Date(2023, 6, 4),
|
||||
'v1.65.0': new Date(2023, 5, 30),
|
||||
'v1.63.0': new Date(2023, 5, 24),
|
||||
'v1.61.0': new Date(2023, 5, 16),
|
||||
'v1.58.0': new Date(2023, 4, 28),
|
||||
'v1.57.0': new Date(2023, 4, 23),
|
||||
'v1.56.0': new Date(2023, 4, 18),
|
||||
'v1.55.0': new Date(2023, 4, 9),
|
||||
'v1.54.0': new Date(2023, 3, 18),
|
||||
'v1.52.0': new Date(2023, 2, 29),
|
||||
'v1.51.0': new Date(2023, 2, 20),
|
||||
'v1.48.0': new Date(2023, 1, 21),
|
||||
'v1.47.0': new Date(2023, 1, 13),
|
||||
'v1.46.0': new Date(2023, 1, 9),
|
||||
'v1.43.0': new Date(2023, 1, 3),
|
||||
'v1.41.0': new Date(2023, 0, 10),
|
||||
'v1.39.0': new Date(2022, 11, 19),
|
||||
'v1.36.0': new Date(2022, 10, 20),
|
||||
'v1.33.1': new Date(2022, 9, 26),
|
||||
'v1.32.0': new Date(2022, 9, 14),
|
||||
'v1.27.0': new Date(2022, 8, 6),
|
||||
'v1.24.0': new Date(2022, 7, 19),
|
||||
'v1.10.0': new Date(2022, 4, 29),
|
||||
'v1.7.0': new Date(2022, 3, 24),
|
||||
'v1.3.0': new Date(2022, 2, 22),
|
||||
'v1.2.0': new Date(2022, 1, 8),
|
||||
} as const;
|
||||
|
||||
const weirdTags = {
|
||||
'v1.41.0': 'v1.41.1_64-dev',
|
||||
'v1.39.0': 'v1.39.0_61-dev',
|
||||
'v1.36.0': 'v1.36.0_55-dev',
|
||||
'v1.33.1': 'v1.33.0_52-dev',
|
||||
'v1.32.0': 'v1.32.0_50-dev',
|
||||
'v1.27.0': 'v1.27.0_37-dev',
|
||||
'v1.24.0': 'v1.24.0_34-dev',
|
||||
'v1.10.0': 'v1.10.0_15-dev',
|
||||
'v1.7.0': 'v1.7.0_11-dev ',
|
||||
'v1.3.0': 'v1.3.0-dev ',
|
||||
'v1.2.0': 'v0.2-dev ',
|
||||
};
|
||||
|
||||
const title = 'Roadmap';
|
||||
const description = 'A list of future plans and goals, as well as past achievements and milestones.';
|
||||
|
||||
const withLanguage = (date: Date) => (language: string) => date.toLocaleDateString(language);
|
||||
|
||||
type Base = { icon: string; iconColor?: React.CSSProperties['color']; title: string; description: string };
|
||||
const withRelease = ({
|
||||
icon,
|
||||
iconColor,
|
||||
title,
|
||||
description,
|
||||
release: version,
|
||||
}: Base & { release: keyof typeof releases }) => {
|
||||
return {
|
||||
icon,
|
||||
iconColor: iconColor ?? 'gray',
|
||||
title,
|
||||
description,
|
||||
link: {
|
||||
url: `https://github.com/immich-app/immich/releases/tag/${weirdTags[version] ?? version}`,
|
||||
text: version,
|
||||
},
|
||||
getDateLabel: withLanguage(releases[version]),
|
||||
};
|
||||
};
|
||||
|
||||
const roadmap: Item[] = [
|
||||
{
|
||||
done: false,
|
||||
icon: mdiFlash,
|
||||
iconColor: 'gold',
|
||||
title: 'Workflows',
|
||||
description: 'Automate tasks with workflows',
|
||||
getDateLabel: () => 'Planned for 2025',
|
||||
},
|
||||
{
|
||||
done: false,
|
||||
icon: mdiImageEdit,
|
||||
iconColor: 'rebeccapurple',
|
||||
title: 'Basic editor',
|
||||
description: 'Basic photo editing capabilities',
|
||||
getDateLabel: () => 'Planned for 2025',
|
||||
},
|
||||
{
|
||||
done: false,
|
||||
icon: mdiRocketLaunch,
|
||||
iconColor: 'indianred',
|
||||
title: 'Stable release',
|
||||
description: 'Immich goes stable',
|
||||
getDateLabel: () => 'Planned for 2025',
|
||||
},
|
||||
{
|
||||
done: false,
|
||||
icon: mdiCloudUploadOutline,
|
||||
iconColor: 'cornflowerblue',
|
||||
title: 'Better background backups',
|
||||
description: 'Rework background backups to be more reliable',
|
||||
getDateLabel: () => 'Planned for 2025',
|
||||
},
|
||||
{
|
||||
done: false,
|
||||
icon: mdiCameraBurst,
|
||||
iconColor: 'rebeccapurple',
|
||||
title: 'Auto stacking',
|
||||
description: 'Auto stack burst photos',
|
||||
getDateLabel: () => 'Planned for 2025',
|
||||
},
|
||||
];
|
||||
|
||||
const milestones: Item[] = [
|
||||
{
|
||||
icon: mdiStar,
|
||||
iconColor: 'gold',
|
||||
title: '70,000 Stars',
|
||||
description: 'Reached 70K Stars on GitHub!',
|
||||
getDateLabel: withLanguage(new Date(2025, 6, 9)),
|
||||
},
|
||||
withRelease({
|
||||
icon: mdiTableKey,
|
||||
iconColor: 'gray',
|
||||
title: 'Fine grained access controls',
|
||||
description: 'Granular access controls for api keys',
|
||||
release: 'v1.135.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiCast,
|
||||
iconColor: 'aqua',
|
||||
title: 'Google Cast (web and mobile)',
|
||||
description: 'Cast assets to Google Cast/Chromecast compatible devices',
|
||||
release: 'v1.135.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiLockOutline,
|
||||
iconColor: 'sandybrown',
|
||||
title: 'Private/locked photos',
|
||||
description: 'Private assets with extra protections',
|
||||
release: 'v1.133.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiFolderMultiple,
|
||||
iconColor: 'brown',
|
||||
title: 'Folders view in the mobile app',
|
||||
description: 'Browse your photos and videos in their folder structure inside the mobile app',
|
||||
release: 'v1.130.0',
|
||||
}),
|
||||
{
|
||||
icon: mdiStar,
|
||||
iconColor: 'gold',
|
||||
title: '60,000 Stars',
|
||||
description: 'Reached 60K Stars on GitHub!',
|
||||
getDateLabel: withLanguage(new Date(2025, 2, 4)),
|
||||
},
|
||||
withRelease({
|
||||
icon: mdiTagFaces,
|
||||
iconColor: 'teal',
|
||||
title: 'Manual face tagging',
|
||||
description:
|
||||
'Manually tag or remove faces in photos and videos, even when automatic detection misses or misidentifies them.',
|
||||
release: 'v1.127.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiLinkEdit,
|
||||
iconColor: 'crimson',
|
||||
title: 'Automatic URL switching',
|
||||
description: 'The mobile app now supports automatic switching between different server URLs',
|
||||
release: 'v1.122.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiMovieOpenPlayOutline,
|
||||
iconColor: 'darksalmon',
|
||||
title: 'Native video player',
|
||||
description: 'HDR videos are now fully supported using the Immich native video player',
|
||||
release: 'v1.122.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiDatabaseOutline,
|
||||
iconColor: 'brown',
|
||||
title: 'Automatic database dumps',
|
||||
description: 'Database dumps are now integrated into the Immich server',
|
||||
release: 'v1.120.0',
|
||||
}),
|
||||
{
|
||||
icon: mdiStar,
|
||||
iconColor: 'gold',
|
||||
title: '50,000 Stars',
|
||||
description: 'Reached 50K Stars on GitHub!',
|
||||
getDateLabel: withLanguage(new Date(2024, 10, 1)),
|
||||
},
|
||||
withRelease({
|
||||
icon: mdiFaceRecognition,
|
||||
title: 'Metadata Face Import',
|
||||
description: 'Read face metadata in Digikam format during import',
|
||||
release: 'v1.114.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiTagMultiple,
|
||||
iconColor: 'orange',
|
||||
title: 'Tags',
|
||||
description: 'Tag your photos and videos',
|
||||
release: 'v1.113.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiFolderSync,
|
||||
iconColor: 'green',
|
||||
title: 'Album sync (mobile)',
|
||||
description: 'Sync or mirror an album from your phone to the Immich server',
|
||||
release: 'v1.113.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiFolderMultiple,
|
||||
iconColor: 'brown',
|
||||
title: 'Folders view',
|
||||
description: 'Browse your photos and videos in their folder structure',
|
||||
release: 'v1.113.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiPalette,
|
||||
title: 'Theming (mobile)',
|
||||
description: 'Pick a primary color for the mobile app',
|
||||
release: 'v1.112.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiStarOutline,
|
||||
iconColor: 'gold',
|
||||
title: 'Star rating',
|
||||
description: 'Rate your photos and videos',
|
||||
release: 'v1.112.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiCrop,
|
||||
iconColor: 'royalblue',
|
||||
title: 'Editor (mobile)',
|
||||
description: 'Crop and rotate on mobile',
|
||||
release: 'v1.111.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiMap,
|
||||
iconColor: 'green',
|
||||
title: 'Deploy tiles.immich.cloud',
|
||||
description: 'Dedicated tile server for Immich',
|
||||
release: 'v1.111.0',
|
||||
}),
|
||||
{
|
||||
icon: mdiStar,
|
||||
iconColor: 'gold',
|
||||
title: '40,000 Stars',
|
||||
description: 'Reached 40K Stars on GitHub!',
|
||||
getDateLabel: withLanguage(new Date(2024, 6, 21)),
|
||||
},
|
||||
withRelease({
|
||||
icon: mdiShare,
|
||||
title: 'Deploy my.immich.app',
|
||||
description: 'Url router for immich links',
|
||||
release: 'v1.109.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiLicense,
|
||||
iconColor: 'gold',
|
||||
title: 'Supporter Badge',
|
||||
description: 'The option to buy Immich to support its development!',
|
||||
release: 'v1.109.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiHistory,
|
||||
title: 'Versioned documentation',
|
||||
description: 'View documentation as it was at the time of past releases',
|
||||
release: 'v1.106.1',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiWeb,
|
||||
iconColor: 'royalblue',
|
||||
title: 'Web translations',
|
||||
description: 'Translate the web application to multiple languages',
|
||||
release: 'v1.106.1',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiContentDuplicate,
|
||||
title: 'Similar image detection',
|
||||
description: "Detect duplicate assets that aren't exactly identical",
|
||||
release: 'v1.106.1',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiVectorCombine,
|
||||
title: 'Container consolidation',
|
||||
description:
|
||||
'The microservices container can be run as a worker within the server image, allowing us to remove it from the default stack.',
|
||||
release: 'v1.106.1',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiPencil,
|
||||
iconColor: 'saddlebrown',
|
||||
title: 'Read-write external libraries',
|
||||
description: 'Edit, update, and delete files in external libraries',
|
||||
release: 'v1.104.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiEmailOutline,
|
||||
iconColor: 'crimson',
|
||||
title: 'Email notifications',
|
||||
description: 'Send emails for important events',
|
||||
release: 'v1.104.0',
|
||||
}),
|
||||
{
|
||||
icon: mdiHandshakeOutline,
|
||||
iconColor: 'magenta',
|
||||
title: 'Immich joins FUTO!',
|
||||
description: 'Joined Futo and Immich core team goes full-time',
|
||||
getDateLabel: withLanguage(new Date(2024, 4, 1)),
|
||||
},
|
||||
withRelease({
|
||||
icon: mdiEyeOutline,
|
||||
iconColor: 'darkslategray',
|
||||
title: 'Read-only albums',
|
||||
description: 'Share albums with other users as read-only',
|
||||
release: 'v1.103.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiBookmark,
|
||||
iconColor: 'orangered',
|
||||
title: 'Permanent URLs (Web)',
|
||||
description: 'Assets on the web now have permanent URLs',
|
||||
release: 'v1.103.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiStar,
|
||||
iconColor: 'gold',
|
||||
title: '30,000 Stars',
|
||||
description: 'Reached 30K Stars on GitHub!',
|
||||
release: 'v1.102.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiChartBoxMultipleOutline,
|
||||
iconColor: 'mediumvioletred',
|
||||
title: 'OpenTelemetry metrics',
|
||||
description: 'OpenTelemetry metrics for local evaluation and advanced debugging',
|
||||
release: 'v1.99.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: 'immich',
|
||||
title: 'New logo',
|
||||
description: 'Immich got its new logo',
|
||||
release: 'v1.98.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiMagnifyScan,
|
||||
title: 'Search enhancement with advanced filters',
|
||||
description: 'Advanced search with filters by date, location and more',
|
||||
release: 'v1.95.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiScaleBalance,
|
||||
iconColor: 'gold',
|
||||
title: 'AGPL License',
|
||||
description: 'Immich switches to AGPLv3 license',
|
||||
release: 'v1.95.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiEyeRefreshOutline,
|
||||
title: 'Library watching',
|
||||
description: 'Automatically import files in external libraries when the operating system detects changes.',
|
||||
release: 'v1.94.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiExpansionCard,
|
||||
iconColor: 'green',
|
||||
title: 'GPU acceleration for machine-learning',
|
||||
description: 'Hardware acceleration support for Nvidia and Intel devices through CUDA and OpenVINO.',
|
||||
release: 'v1.94.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiAccountGroupOutline,
|
||||
iconColor: 'gray',
|
||||
title: '250 unique contributors',
|
||||
description: '250 amazing people contributed to Immich',
|
||||
release: 'v1.93.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiMatrix,
|
||||
title: 'Search improvement with pgvecto.rs',
|
||||
description: 'Moved the search from typesense to pgvecto.rs',
|
||||
release: 'v1.91.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiPencil,
|
||||
iconColor: 'saddlebrown',
|
||||
title: 'Edit metadata',
|
||||
description: "Edit a photo or video's date, time, hours, timezone, and GPS information",
|
||||
release: 'v1.90.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiVectorCombine,
|
||||
title: 'Container consolidation',
|
||||
description:
|
||||
'The serving of the web app is merged into the server image, allowing us to remove two containers from the stack.',
|
||||
release: 'v1.88.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiBash,
|
||||
iconColor: 'gray',
|
||||
title: 'CLI v2',
|
||||
description: 'Version 2 of the Immich CLI is released, replacing the legacy v1 CLI.',
|
||||
release: 'v1.88.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiForum,
|
||||
iconColor: 'dodgerblue',
|
||||
title: 'Activity',
|
||||
description: 'Comment a photo or a video in a shared album',
|
||||
release: 'v1.84.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiStar,
|
||||
iconColor: 'gold',
|
||||
title: '20,000 Stars',
|
||||
description: 'Reached 20K Stars on GitHub!',
|
||||
release: 'v1.83.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiCameraBurst,
|
||||
iconColor: 'rebeccapurple',
|
||||
title: 'Stack assets',
|
||||
description: 'Manual asset stacking for grouping and hiding related assets in the main timeline.',
|
||||
release: 'v1.83.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiPalette,
|
||||
iconColor: 'magenta',
|
||||
title: 'Custom theme',
|
||||
description: 'Apply your custom CSS for modifying fonts, colors, and styles in the web application.',
|
||||
release: 'v1.83.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiTrashCanOutline,
|
||||
iconColor: 'brown',
|
||||
title: 'Trash feature',
|
||||
description: 'Trash, restore from trash, and automatically empty the recycle bin after 30 days.',
|
||||
release: 'v1.82.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiBookSearchOutline,
|
||||
title: 'External libraries',
|
||||
description: 'Automatically import media into Immich based on imports paths and ignore patterns.',
|
||||
release: 'v1.79.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiMap,
|
||||
iconColor: 'darksalmon',
|
||||
title: 'Map view (mobile)',
|
||||
description: 'Heat map implementation in the mobile app.',
|
||||
release: 'v1.76.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiFile,
|
||||
iconColor: 'lightblue',
|
||||
title: 'Configuration file',
|
||||
description: 'Auto-configure an Immich installation via a configuration file.',
|
||||
release: 'v1.75.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiMonitor,
|
||||
iconColor: 'darkcyan',
|
||||
title: 'Slideshow mode (web)',
|
||||
description: 'Start a full-screen slideshow from an Album on the web.',
|
||||
release: 'v1.75.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiServer,
|
||||
iconColor: 'lightskyblue',
|
||||
title: 'Hardware transcoding',
|
||||
description: 'Support hardware acceleration (QuickSync, VAAPI, and Nvidia) for video transcoding.',
|
||||
release: 'v1.72.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiImageAlbum,
|
||||
iconColor: 'olivedrab',
|
||||
title: 'View albums via time buckets',
|
||||
description: 'Upgrade albums to use time buckets, an optimized virtual viewport.',
|
||||
release: 'v1.72.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiImageAlbum,
|
||||
iconColor: 'olivedrab',
|
||||
title: 'Album description',
|
||||
description: 'Save an album description.',
|
||||
release: 'v1.72.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiRotate360,
|
||||
title: '360° Photos (web)',
|
||||
description: 'View 360° Photos on the web.',
|
||||
release: 'v1.71.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiMotionPlayOutline,
|
||||
title: 'Android motion photos',
|
||||
description: 'Add support for Android Motion Photos.',
|
||||
release: 'v1.69.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiFaceManOutline,
|
||||
iconColor: 'mistyrose',
|
||||
title: 'Show/hide faces',
|
||||
description: 'Add the options to show or hide faces.',
|
||||
release: 'v1.68.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiMerge,
|
||||
iconColor: 'forestgreen',
|
||||
title: 'Merge faces',
|
||||
description: 'Add the ability to merge multiple faces together.',
|
||||
release: 'v1.67.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiImage,
|
||||
iconColor: 'rebeccapurple',
|
||||
title: 'Feature photo',
|
||||
description: 'Add the option to change the feature photo for a person.',
|
||||
release: 'v1.66.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiKeyboardSettingsOutline,
|
||||
iconColor: 'darkslategray',
|
||||
title: 'Multi-select via SHIFT',
|
||||
description: 'Add the option to multi-select while holding SHIFT.',
|
||||
release: 'v1.66.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiImageMultipleOutline,
|
||||
iconColor: 'rebeccapurple',
|
||||
title: 'Memories (mobile)',
|
||||
description: 'View "On this day..." memories in the mobile app.',
|
||||
release: 'v1.65.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiFaceMan,
|
||||
iconColor: 'mistyrose',
|
||||
title: 'Facial recognition (mobile)',
|
||||
description: 'View detected faces in the mobile app.',
|
||||
release: 'v1.63.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiImageMultipleOutline,
|
||||
iconColor: 'rebeccapurple',
|
||||
title: 'Memories (web)',
|
||||
description: 'View pictures taken in past years on this day on the web.',
|
||||
release: 'v1.61.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiCollage,
|
||||
iconColor: 'deeppink',
|
||||
title: 'Justified layout (web)',
|
||||
description: 'Implement justified layout (collage) on the web.',
|
||||
release: 'v1.61.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiRaw,
|
||||
title: 'RAW file formats',
|
||||
description: 'Support for RAW file formats.',
|
||||
release: 'v1.61.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiShareAll,
|
||||
iconColor: 'darkturquoise',
|
||||
title: 'Partner sharing (mobile)',
|
||||
description: 'View shared partner photos in the mobile app.',
|
||||
release: 'v1.58.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiFile,
|
||||
iconColor: 'lightblue',
|
||||
title: 'XMP sidecar',
|
||||
description: 'Attach XMP sidecar files to assets.',
|
||||
release: 'v1.58.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiFolder,
|
||||
iconColor: 'brown',
|
||||
title: 'Custom storage label',
|
||||
description: 'Replace the user UUID in the storage template with a custom label.',
|
||||
release: 'v1.57.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiShareCircle,
|
||||
title: 'Partner sharing',
|
||||
description: 'Share your entire collection with another user.',
|
||||
release: 'v1.56.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiFaceMan,
|
||||
iconColor: 'mistyrose',
|
||||
title: 'Facial recognition',
|
||||
description: 'Detect faces in pictures and cluster them together as people, which can be named.',
|
||||
release: 'v1.56.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiMap,
|
||||
iconColor: 'darksalmon',
|
||||
title: 'Map view (web)',
|
||||
description: 'View a global map, with clusters of photos based on corresponding GPS data.',
|
||||
release: 'v1.55.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiDevices,
|
||||
iconColor: 'slategray',
|
||||
title: 'Manage auth devices',
|
||||
description: 'Manage logged-in devices and revoke access from User Settings.',
|
||||
release: 'v1.55.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiStar,
|
||||
iconColor: 'gold',
|
||||
title: '10,000 Stars',
|
||||
description: 'Reached 10K stars on GitHub!',
|
||||
release: 'v1.54.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiText,
|
||||
title: 'Asset descriptions',
|
||||
description: 'Save an asset description',
|
||||
release: 'v1.54.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiArchiveOutline,
|
||||
title: 'Archiving',
|
||||
description: 'Remove assets from the main timeline by archiving them.',
|
||||
release: 'v1.54.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiDevices,
|
||||
iconColor: 'slategray',
|
||||
title: 'Responsive web app',
|
||||
description: 'Optimize the web app for small screen.',
|
||||
release: 'v1.54.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiFileSearch,
|
||||
iconColor: 'brown',
|
||||
title: 'Search by metadata',
|
||||
description: 'Search images by filename, description, tagged people, make, model, and other metadata.',
|
||||
release: 'v1.52.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiImageSearch,
|
||||
iconColor: 'rebeccapurple',
|
||||
title: 'CLIP search',
|
||||
description: 'Search images with free-form text like "Sunset at the beach".',
|
||||
release: 'v1.51.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiMagnify,
|
||||
iconColor: 'lightblue',
|
||||
title: 'Explore page',
|
||||
description: 'View tagged places, object, and people.',
|
||||
release: 'v1.51.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiAppleIos,
|
||||
title: 'iOS background uploads',
|
||||
description: 'Automatically backup pictures in the background on iOS.',
|
||||
release: 'v1.48.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiMotionPlayOutline,
|
||||
title: 'Auto-Link live photos',
|
||||
description: 'Automatically link live photos, even when uploaded as separate files.',
|
||||
release: 'v1.48.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiMaterialDesign,
|
||||
iconColor: 'blue',
|
||||
title: 'Material design 3 (mobile)',
|
||||
description: 'Upgrade the mobile app to Material Design 3.',
|
||||
release: 'v1.47.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiHeart,
|
||||
iconColor: 'red',
|
||||
title: 'Favorites (mobile)',
|
||||
description: 'Show favorites on the mobile app.',
|
||||
release: 'v1.46.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiCakeVariant,
|
||||
iconColor: 'deeppink',
|
||||
title: 'Immich turns 1',
|
||||
description: 'Immich is officially one year old.',
|
||||
release: 'v1.43.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiHeart,
|
||||
iconColor: 'red',
|
||||
title: 'Favorites page (web)',
|
||||
description: 'Favorite and view favorites on the web.',
|
||||
release: 'v1.43.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiShareCircle,
|
||||
title: 'Public share links',
|
||||
description: 'Share photos and albums publicly via a shared link.',
|
||||
release: 'v1.41.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiFolder,
|
||||
iconColor: 'lightblue',
|
||||
title: 'User-defined storage structure',
|
||||
description: 'Support custom storage structures.',
|
||||
release: 'v1.39.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiMotionPlayOutline,
|
||||
title: 'iOS live photos',
|
||||
description: 'Backup and display iOS Live Photos.',
|
||||
release: 'v1.36.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiSecurity,
|
||||
iconColor: 'green',
|
||||
title: 'OAuth integration',
|
||||
description: 'Support OAuth2 and OIDC capable identity providers.',
|
||||
release: 'v1.36.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiWeb,
|
||||
iconColor: 'royalblue',
|
||||
title: 'Documentation site',
|
||||
description: 'Release an official documentation website.',
|
||||
release: 'v1.33.1',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiThemeLightDark,
|
||||
iconColor: 'slategray',
|
||||
title: 'Dark mode (web)',
|
||||
description: 'Dark mode on the web.',
|
||||
release: 'v1.32.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiPanVertical,
|
||||
title: 'Virtual scrollbar (web)',
|
||||
description: 'View the main timeline with a virtual scrollbar, allowing to jump to any point in time, instantly.',
|
||||
release: 'v1.27.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiCheckAll,
|
||||
iconColor: 'green',
|
||||
title: 'Checksum duplication check',
|
||||
description: 'Enforce per user sha1 checksum uniqueness.',
|
||||
release: 'v1.27.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiAndroid,
|
||||
iconColor: 'greenyellow',
|
||||
title: 'Android background backup',
|
||||
description: 'Automatic backup in the background on Android.',
|
||||
release: 'v1.24.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiAccountGroup,
|
||||
iconColor: 'gray',
|
||||
title: 'Admin portal',
|
||||
description: 'Manage users and admin settings from the web.',
|
||||
release: 'v1.10.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiShareCircle,
|
||||
title: 'Album sharing',
|
||||
description: 'Share albums with other users.',
|
||||
release: 'v1.7.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiTag,
|
||||
iconColor: 'coral',
|
||||
title: 'Image tagging',
|
||||
description: 'Tag images with custom values.',
|
||||
release: 'v1.7.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiImage,
|
||||
iconColor: 'rebeccapurple',
|
||||
title: 'View exif',
|
||||
description: 'View metadata about assets.',
|
||||
release: 'v1.3.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiCheckboxMarked,
|
||||
iconColor: 'green',
|
||||
title: 'Multi select',
|
||||
description: 'Select and execute actions on multiple assets at the same time.',
|
||||
release: 'v1.2.0',
|
||||
}),
|
||||
withRelease({
|
||||
icon: mdiVideo,
|
||||
iconColor: 'slategray',
|
||||
title: 'Video player',
|
||||
description: 'Play videos in the web and on mobile.',
|
||||
release: 'v1.2.0',
|
||||
}),
|
||||
{
|
||||
icon: mdiPartyPopper,
|
||||
iconColor: 'deeppink',
|
||||
title: 'First commit',
|
||||
description: 'First commit on GitHub, Immich is born.',
|
||||
getDateLabel: withLanguage(new Date(2022, 1, 3)),
|
||||
},
|
||||
];
|
||||
|
||||
export default function MilestonePage(): JSX.Element {
|
||||
return (
|
||||
<Layout title={title} description={description}>
|
||||
<section className="my-8">
|
||||
<h1 className="md:text-6xl text-center mb-10 text-immich-primary dark:text-immich-dark-primary px-2">
|
||||
{title}
|
||||
</h1>
|
||||
<p className="text-center text-xl px-2">{description}</p>
|
||||
<div className="flex justify-around mt-8 w-full max-w-full">
|
||||
<Timeline items={[...roadmap, ...milestones]} />
|
||||
</div>
|
||||
</section>
|
||||
</Layout>
|
||||
);
|
||||
}
|
||||
5
docs/static/.well-known/security.txt
vendored
5
docs/static/.well-known/security.txt
vendored
@@ -1,5 +0,0 @@
|
||||
Policy: https://github.com/immich-app/immich/blob/main/SECURITY.md
|
||||
Contact: mailto:security@immich.app
|
||||
Preferred-Languages: en
|
||||
Expires: 2026-05-01T23:59:00.000Z
|
||||
Canonical: https://immich.app/.well-known/security.txt
|
||||
4
docs/static/archived-versions.json
vendored
4
docs/static/archived-versions.json
vendored
@@ -1,4 +1,8 @@
|
||||
[
|
||||
{
|
||||
"label": "v1.143.1",
|
||||
"url": "https://v1.143.1.archive.immich.app"
|
||||
},
|
||||
{
|
||||
"label": "v1.143.0",
|
||||
"url": "https://v1.143.0.archive.immich.app"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "immich-e2e",
|
||||
"version": "1.143.0",
|
||||
"version": "1.143.1",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"type": "module",
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
"logging_enable_description": "تفعيل تسجيل الأحداث",
|
||||
"logging_level_description": "عند التفعيل، أي مستوى تسجيل سيستخدم.",
|
||||
"logging_settings": "تسجيل الاحداث",
|
||||
"machine_learning_availability_checks": "تحقق من التوفر",
|
||||
"machine_learning_clip_model": "نموذج CLIP",
|
||||
"machine_learning_clip_model_description": "اسم نموذج CLIP مدرجٌ <link>هنا</link>. يرجى ملاحظة أنه يجب إعادة تشغيل وظيفة \"البحث الذكي\" لجميع الصور بعد تغيير النموذج.",
|
||||
"machine_learning_duplicate_detection": "كشف التكرار",
|
||||
|
||||
24
i18n/ca.json
24
i18n/ca.json
@@ -84,10 +84,10 @@
|
||||
"image_fullsize_enabled": "Activa la generació d'imatges a tamany complet",
|
||||
"image_fullsize_enabled_description": "Genera imatges a tamany complet per formats no compatibles amb la web. Quan \"Prefereix vista prèvia incrustada\" està activat, les vistes prèvies incrustades s'utilitzen directament sense conversió. No afecta els formats compatibles amb la web com JPEG.",
|
||||
"image_fullsize_quality_description": "De 1 a 100, qualitat de l'imatge a tamany complet. Un valor més alt és millor, però resulta en fitxers de major tamany.",
|
||||
"image_fullsize_title": "Configuració d'imatges a tamany complet",
|
||||
"image_fullsize_title": "Configuració de les imatges a tamany complet",
|
||||
"image_prefer_embedded_preview": "Prefereix vista prèvia incrustada",
|
||||
"image_prefer_embedded_preview_setting_description": "Empra vista prèvia incrustada en les fotografies RAW com a entrada per al processament d'imatge, quan sigui possible. Aquesta acció pot produir colors més acurats en algunes imatges, però la qualitat de la vista prèvia depèn de la càmera i la imatge pot tenir més artefactes de compressió.",
|
||||
"image_prefer_wide_gamut": "Prefereix àmplia gamma",
|
||||
"image_prefer_wide_gamut": "Prefereix la gamma àmplia",
|
||||
"image_prefer_wide_gamut_setting_description": "Uitlitza Display P3 per a les miniatures. Això preserva més bé la vitalitat de les imatges amb espais de color àmplis, però les imatges es poden veure diferent en aparells antics amb una versió antiga del navegador. Les imatges sRGB romandran com a sRGB per a evitar canvis de color.",
|
||||
"image_preview_description": "Imatge de mida mitjana amb metadades eliminades, que s'utilitza quan es visualitza un sol recurs i per a l'aprenentatge automàtic",
|
||||
"image_preview_quality_description": "Vista prèvia de la qualitat de l'1 al 100. Més alt és millor, però produeix fitxers més grans i pot reduir la capacitat de resposta de l'aplicació. Establir un valor baix pot afectar la qualitat de l'aprenentatge automàtic.",
|
||||
@@ -95,11 +95,11 @@
|
||||
"image_quality": "Qualitat",
|
||||
"image_resolution": "Resolució",
|
||||
"image_resolution_description": "Les resolucions més altes poden conservar més detalls però triguen més a codificar-se, tenen mides de fitxer més grans i poden reduir la capacitat de resposta de l'aplicació.",
|
||||
"image_settings": "Configuració d'imatges",
|
||||
"image_settings": "Configuració de les imatges",
|
||||
"image_settings_description": "Gestiona la qualitat i resolució de les imatges generades",
|
||||
"image_thumbnail_description": "Miniatura petita amb metadades eliminades, que s'utilitza quan es visualitzen grups de fotos com la línia de temps principal",
|
||||
"image_thumbnail_quality_description": "Qualitat de miniatura d'1 a 100. Més alt és millor, però produeix fitxers més grans i pot reduir la capacitat de resposta de l'aplicació.",
|
||||
"image_thumbnail_title": "Configuració de miniatures",
|
||||
"image_thumbnail_title": "Configuració de les miniatures",
|
||||
"job_concurrency": "{job} simultàniament",
|
||||
"job_created": "Tasca creada",
|
||||
"job_not_concurrency_safe": "Aquesta tasca no és segura per a la conconcurrència.",
|
||||
@@ -123,6 +123,13 @@
|
||||
"logging_enable_description": "Habilitar el registrament",
|
||||
"logging_level_description": "Quan està habilitat, quin nivell de registre es vol emprar.",
|
||||
"logging_settings": "Registre",
|
||||
"machine_learning_availability_checks": "Comprovacions de disponibilitat",
|
||||
"machine_learning_availability_checks_description": "Detectar i preferir automàticament els servidors d'aprenentatge automàtic disponibles",
|
||||
"machine_learning_availability_checks_enabled": "Habilita les comprovacions de disponibilitat",
|
||||
"machine_learning_availability_checks_interval": "Interval de comprovació",
|
||||
"machine_learning_availability_checks_interval_description": "Interval en mil·lisegons entre comprovacions de disponibilitat",
|
||||
"machine_learning_availability_checks_timeout": "Temps d'espera de la sol·licitud",
|
||||
"machine_learning_availability_checks_timeout_description": "Temps d'espera en mil·lisegons per a les comprovacions de disponibilitat",
|
||||
"machine_learning_clip_model": "Model CLIP",
|
||||
"machine_learning_clip_model_description": "El nom d'un model CLIP que apareix a <link>aquí</link>. Tingues en compte que has de tornar a executar la cerca intel·ligent per a totes les imatges quan es canvia de model.",
|
||||
"machine_learning_duplicate_detection": "Detecció de duplicats",
|
||||
@@ -496,6 +503,7 @@
|
||||
"asset_skipped": "Saltat",
|
||||
"asset_skipped_in_trash": "A la paperera",
|
||||
"asset_trashed": "Recurs a la paperera",
|
||||
"asset_troubleshoot": "Diagnòstic de l'element",
|
||||
"asset_uploaded": "Carregat",
|
||||
"asset_uploading": "S'està carregant…",
|
||||
"asset_viewer_settings_subtitle": "Gestiona la configuració del visualitzador de la galeria",
|
||||
@@ -532,6 +540,7 @@
|
||||
"background_backup_running_error": "La còpia de seguretat en segon pla s'està executant actualment, no es pot iniciar la còpia de seguretat manual",
|
||||
"background_location_permission": "Permís d'ubicació en segon pla",
|
||||
"background_location_permission_content": "Per canviar de xarxa quan s'executa en segon pla, Immich ha de *sempre* tenir accés a la ubicació precisa perquè l'aplicació pugui llegir el nom de la xarxa Wi-Fi",
|
||||
"background_options": "Opcions en segon pla",
|
||||
"backup": "Còpia",
|
||||
"backup_album_selection_page_albums_device": "Àlbums al dispositiu ({count})",
|
||||
"backup_album_selection_page_albums_tap": "Un toc per incloure, doble toc per excloure",
|
||||
@@ -655,6 +664,7 @@
|
||||
"change_pin_code": "Canviar el codi PIN",
|
||||
"change_your_password": "Canvia la teva contrasenya",
|
||||
"changed_visibility_successfully": "Visibilitat canviada amb èxit",
|
||||
"charging": "Carregant",
|
||||
"check_corrupt_asset_backup": "Comprovar les còpies de seguretat corruptes",
|
||||
"check_corrupt_asset_backup_button": "Realitzar comprovació",
|
||||
"check_corrupt_asset_backup_description": "Executeu aquesta comprovació només mitjançant Wi-Fi i un cop s'hagi fet una còpia de seguretat de tots els actius. El procediment pot trigar uns minuts.",
|
||||
@@ -880,7 +890,7 @@
|
||||
"empty_trash": "Buidar la paperera",
|
||||
"empty_trash_confirmation": "Esteu segur que voleu buidar la paperera? Això eliminarà tots els recursos a la paperera permanentment d'Immich.\nNo podeu desfer aquesta acció!",
|
||||
"enable": "Activar",
|
||||
"enable_backup": "Habilitar Còpia de Seguretat",
|
||||
"enable_backup": "Còpia de Seguretat",
|
||||
"enable_biometric_auth_description": "Introduïu el codi PIN per a habilitar l'autenticació biomètrica",
|
||||
"enabled": "Activat",
|
||||
"end_date": "Data final",
|
||||
@@ -1517,9 +1527,9 @@
|
||||
"profile_drawer_app_logs": "Registres",
|
||||
"profile_drawer_client_out_of_date_major": "L'aplicació mòbil està desactualitzada. Si us plau, actualitzeu a l'última versió major.",
|
||||
"profile_drawer_client_out_of_date_minor": "L'aplicació mòbil està desactualitzada. Si us plau, actualitzeu a l'última versió menor.",
|
||||
"profile_drawer_client_server_up_to_date": "El Client i el Servidor estan actualitzats",
|
||||
"profile_drawer_client_server_up_to_date": "El client i el servidor estan actualitzats",
|
||||
"profile_drawer_github": "GitHub",
|
||||
"profile_drawer_readonly_mode": "Manera de només lectura activada. Feu doble click a la icona de l'avatar de l'usuari per sortir.",
|
||||
"profile_drawer_readonly_mode": "Mode només lectura. Feu pulsació llarga a la icona de l'avatar d'usuari per sortir.",
|
||||
"profile_drawer_server_out_of_date_major": "El servidor està desactualitzat. Si us plau, actualitzeu a l'última versió major.",
|
||||
"profile_drawer_server_out_of_date_minor": "El servidor està desactualitzat. Si us plau, actualitzeu a l'última versió menor.",
|
||||
"profile_image_of_user": "Imatge de perfil de {user}",
|
||||
|
||||
40
i18n/da.json
40
i18n/da.json
@@ -123,6 +123,13 @@
|
||||
"logging_enable_description": "Aktiver logning",
|
||||
"logging_level_description": "Når slået til, hvilket logniveau, der skal bruges.",
|
||||
"logging_settings": "Logning",
|
||||
"machine_learning_availability_checks": "Tilgængelighedstjek",
|
||||
"machine_learning_availability_checks_description": "Opdag og foretræk automatisk tilgængelige maskinlæringsservere",
|
||||
"machine_learning_availability_checks_enabled": "Aktivér tilgængelighedstjek",
|
||||
"machine_learning_availability_checks_interval": "Kontroller interval",
|
||||
"machine_learning_availability_checks_interval_description": "Interval i millisekunder mellem tilgængelighedstjeks",
|
||||
"machine_learning_availability_checks_timeout": "Timeout på anmodning",
|
||||
"machine_learning_availability_checks_timeout_description": "Timeout i millisekunder på tilgængelighedstjeks",
|
||||
"machine_learning_clip_model": "CLIP-model",
|
||||
"machine_learning_clip_model_description": "Navnet på CLIP-modellen på listen <link>her</link>. Bemærk at du skal genkøre \"Smart Søgning\"-jobbet for alle billeder, hvis du skifter model.",
|
||||
"machine_learning_duplicate_detection": "Dubletdetektion",
|
||||
@@ -423,6 +430,7 @@
|
||||
"album_remove_user_confirmation": "Er du sikker på at du vil fjerne {user}?",
|
||||
"album_search_not_found": "Ingen album fundet som matcher din søgning",
|
||||
"album_share_no_users": "Det ser ud til at du har delt denne album med alle brugere, eller du har ikke nogen brugere til at dele med.",
|
||||
"album_summary": "Albumoversigt",
|
||||
"album_updated": "Album opdateret",
|
||||
"album_updated_setting_description": "Modtag en emailnotifikation når et delt album får nye mediefiler",
|
||||
"album_user_left": "Forlod {album}",
|
||||
@@ -494,6 +502,8 @@
|
||||
"asset_restored_successfully": "Elementet blev gendannet succesfuldt",
|
||||
"asset_skipped": "Sprunget over",
|
||||
"asset_skipped_in_trash": "I skraldespand",
|
||||
"asset_trashed": "Objekt kasseret",
|
||||
"asset_troubleshoot": "Fejlsøg på objekt",
|
||||
"asset_uploaded": "Uploadet",
|
||||
"asset_uploading": "Uploader…",
|
||||
"asset_viewer_settings_subtitle": "Administrer indstillinger for gallerifremviser",
|
||||
@@ -527,8 +537,10 @@
|
||||
"autoplay_slideshow": "Afspil slideshow automatisk",
|
||||
"back": "Tilbage",
|
||||
"back_close_deselect": "Tilbage, luk eller fravælg",
|
||||
"background_backup_running_error": "Backup kører lige nu i baggrund; kan ikke starte manuel backup",
|
||||
"background_location_permission": "Tilladelse til baggrundsplacering",
|
||||
"background_location_permission_content": "For at skifte netværk, når appen kører i baggrunden, skal Immich *altid* have præcis placeringsadgang, så appen kan læse WiFi-netværkets navn",
|
||||
"background_options": "Baggrundsmuligheder",
|
||||
"backup": "Sikkerhedskopier",
|
||||
"backup_album_selection_page_albums_device": "Albummer på enheden ({count})",
|
||||
"backup_album_selection_page_albums_tap": "Tryk en gang for at inkludere, tryk to gange for at ekskludere",
|
||||
@@ -536,6 +548,7 @@
|
||||
"backup_album_selection_page_select_albums": "Vælg albummer",
|
||||
"backup_album_selection_page_selection_info": "Oplysninger om valgte",
|
||||
"backup_album_selection_page_total_assets": "Samlede unikke elementer",
|
||||
"backup_albums_sync": "Synkronisering af backupalbums",
|
||||
"backup_all": "Alt",
|
||||
"backup_background_service_backup_failed_message": "Sikkerhedskopiering af elementer fejlede. Forsøger igen…",
|
||||
"backup_background_service_connection_failed_message": "Forbindelsen til serveren blev tabt. Forsøger igen…",
|
||||
@@ -633,7 +646,7 @@
|
||||
"cannot_merge_people": "Kan ikke sammenflette personer",
|
||||
"cannot_undo_this_action": "Du kan ikke fortryde denne handling!",
|
||||
"cannot_update_the_description": "Kan ikke opdatere beskrivelsen",
|
||||
"cast": "Cast",
|
||||
"cast": "Caste",
|
||||
"cast_description": "Konfigurer tilgængelige cast destinationer",
|
||||
"change_date": "Ændr dato",
|
||||
"change_description": "Beskrivelse af ændringer",
|
||||
@@ -652,6 +665,8 @@
|
||||
"change_pin_code": "Skift PIN kode",
|
||||
"change_your_password": "Skift dit kodeord",
|
||||
"changed_visibility_successfully": "Synlighed blev ændret",
|
||||
"charging": "Lader",
|
||||
"charging_requirement_mobile_backup": "Baggrundsbackup kræver, at enheden er tilsluttet oplader",
|
||||
"check_corrupt_asset_backup": "Tjek for korrupte sikkerhedskopier af elementer",
|
||||
"check_corrupt_asset_backup_button": "Foretag kontrol",
|
||||
"check_corrupt_asset_backup_description": "Kør kun denne kontrol via Wi-Fi, og når alle elementer er blevet sikkerhedskopieret. Proceduren kan tage et par minutter.",
|
||||
@@ -738,6 +753,7 @@
|
||||
"create_user": "Opret bruger",
|
||||
"created": "Oprettet",
|
||||
"created_at": "Oprettet",
|
||||
"creating_linked_albums": "Opretter sammenkædede albums...",
|
||||
"crop": "Beskær",
|
||||
"curated_object_page_title": "Ting",
|
||||
"current_device": "Nuværende enhed",
|
||||
@@ -887,7 +903,9 @@
|
||||
"error": "Fejl",
|
||||
"error_change_sort_album": "Ændring af sorteringsrækkefølgen mislykkedes",
|
||||
"error_delete_face": "Fejl ved sletning af ansigt fra mediefil",
|
||||
"error_getting_places": "Fejl ved hentning af steder",
|
||||
"error_loading_image": "Fejl ved indlæsning af billede",
|
||||
"error_loading_partners": "Fejl ved indlæsning af partnere: {error}",
|
||||
"error_saving_image": "Fejl: {error}",
|
||||
"error_tag_face_bounding_box": "Fejl ved tagging af ansigt - kan ikke finde koordinator for afgrænsningskasse",
|
||||
"error_title": "Fejl - Noget gik galt",
|
||||
@@ -1052,6 +1070,7 @@
|
||||
"favorites_page_no_favorites": "Ingen favoritter blev fundet",
|
||||
"feature_photo_updated": "Forsidebillede uploadet",
|
||||
"features": "Funktioner",
|
||||
"features_in_development": "Funktioner under udvikling",
|
||||
"features_setting_description": "Administrer app-funktioner",
|
||||
"file_name": "Filnavn",
|
||||
"file_name_or_extension": "Filnavn eller filtype",
|
||||
@@ -1216,6 +1235,7 @@
|
||||
"local": "Lokal",
|
||||
"local_asset_cast_failed": "Kan ikke caste et aktiv, der ikke er uploadet til serveren",
|
||||
"local_assets": "Lokale objekter",
|
||||
"local_media_summary": "Opsummering af lokale media",
|
||||
"local_network": "Lokalt netværk",
|
||||
"local_network_sheet_info": "Appen vil oprette forbindelse til serveren via denne URL, når du bruger det angivne WiFi-netværk",
|
||||
"location_permission": "Tilladelse til placering",
|
||||
@@ -1227,6 +1247,7 @@
|
||||
"location_picker_longitude_hint": "Indtast din længdegrad her",
|
||||
"lock": "Lås",
|
||||
"locked_folder": "Låst mappe",
|
||||
"log_detail_title": "Logdetaljer",
|
||||
"log_out": "Log ud",
|
||||
"log_out_all_devices": "Log ud af alle enheder",
|
||||
"logged_in_as": "Logget ind som {user}",
|
||||
@@ -1257,6 +1278,7 @@
|
||||
"login_password_changed_success": "Kodeordet blev opdateret",
|
||||
"logout_all_device_confirmation": "Er du sikker på, at du vil logge ud af alle enheder?",
|
||||
"logout_this_device_confirmation": "Er du sikker på, at du vil logge denne enhed ud?",
|
||||
"logs": "Logs",
|
||||
"longitude": "Længdegrad",
|
||||
"look": "Kig",
|
||||
"loop_videos": "Gentag videoer",
|
||||
@@ -1299,6 +1321,7 @@
|
||||
"mark_as_read": "Marker som læst",
|
||||
"marked_all_as_read": "Markerede alle som læst",
|
||||
"matches": "Parringer",
|
||||
"matching_assets": "Matchende objekter",
|
||||
"media_type": "Medietype",
|
||||
"memories": "Minder",
|
||||
"memories_all_caught_up": "Ajour",
|
||||
@@ -1339,6 +1362,7 @@
|
||||
"name_or_nickname": "Navn eller kælenavn",
|
||||
"network_requirement_photos_upload": "Benyt mobildatanettet for at sikkerhedskopiere dine fotos",
|
||||
"network_requirement_videos_upload": "Benyt mobildatanettet for at sikkerhedskopiere dine videoer",
|
||||
"network_requirements": "Netværkskrav",
|
||||
"network_requirements_updated": "Netværkskravene er ændret, backup-køen nulstilles",
|
||||
"networking_settings": "Netværk",
|
||||
"networking_subtitle": "Administrer serverens endepunktindstillinger",
|
||||
@@ -1349,6 +1373,7 @@
|
||||
"new_person": "Ny person",
|
||||
"new_pin_code": "Ny PIN kode",
|
||||
"new_pin_code_subtitle": "Dette er første gang du tilgår den låste mappe. Lav en PIN kode for sikkert at tilgå denne side",
|
||||
"new_timeline": "Ny tidslinje",
|
||||
"new_user_created": "Ny bruger oprettet",
|
||||
"new_version_available": "NY VERSION TILGÆNGELIG",
|
||||
"newest_first": "Nyeste først",
|
||||
@@ -1362,20 +1387,25 @@
|
||||
"no_assets_message": "KLIK FOR AT UPLOADE DIT FØRSTE BILLEDE",
|
||||
"no_assets_to_show": "Ingen elementer at vise",
|
||||
"no_cast_devices_found": "Ingen Cast-enheder fundet",
|
||||
"no_checksum_local": "Ingen checksum tilgængelig – kan ikke hente lokale objekter",
|
||||
"no_checksum_remote": "Ingen checksum tilgængelig – kan ikke hente eksterne objekter",
|
||||
"no_duplicates_found": "Ingen duplikater fundet.",
|
||||
"no_exif_info_available": "Ingen tilgængelig exif information",
|
||||
"no_explore_results_message": "Upload flere billeder for at udforske din samling.",
|
||||
"no_favorites_message": "Tilføj favoritter for hurtigt at finde dine bedst billeder og videoer",
|
||||
"no_libraries_message": "Opret et eksternt bibliotek for at se dine billeder og videoer",
|
||||
"no_local_assets_found": "Ingen lokale objekter fundet med denne checksum",
|
||||
"no_locked_photos_message": "Billeder og videoer i den låste mappe er skjulte og vil ikke blive vist i dit bibliotek.",
|
||||
"no_name": "Intet navn",
|
||||
"no_notifications": "Ingen notifikationer",
|
||||
"no_people_found": "Ingen tilsvarende personer fundet",
|
||||
"no_places": "Ingen steder",
|
||||
"no_remote_assets_found": "Ingen eksterne objekter fundet med denne checksum",
|
||||
"no_results": "Ingen resultater",
|
||||
"no_results_description": "Prøv et synonym eller et mere generelt søgeord",
|
||||
"no_shared_albums_message": "Opret et album for at dele billeder og videoer med personer i dit netværk",
|
||||
"no_uploads_in_progress": "Ingen upload i gang",
|
||||
"not_available": "ikke tilgængelig",
|
||||
"not_in_any_album": "Ikke i noget album",
|
||||
"not_selected": "Ikke valgt",
|
||||
"note_apply_storage_label_to_previously_uploaded assets": "Bemærk: For at anvende Lagringsmærkat på tidligere uploadede medier, kør",
|
||||
@@ -1497,6 +1527,7 @@
|
||||
"port": "Port",
|
||||
"preferences_settings_subtitle": "Administrer app-præferencer",
|
||||
"preferences_settings_title": "Præferencer",
|
||||
"preparing": "Forberedelse",
|
||||
"preset": "Forudindstilling",
|
||||
"preview": "Forhåndsvisning",
|
||||
"previous": "Forrige",
|
||||
@@ -1562,6 +1593,7 @@
|
||||
"read_changelog": "Læs ændringslog",
|
||||
"readonly_mode_disabled": "Skrivebeskyttet tilstand deaktiveret",
|
||||
"readonly_mode_enabled": "Skrivebeskyttet tilstand aktiveret",
|
||||
"ready_for_upload": "Klar til upload",
|
||||
"reassign": "Gentildel",
|
||||
"reassigned_assets_to_existing_person": "{count, plural, one {# mediefil} other {# mediefiler}} er blevet gentildelt til {name, select, null {en eksisterende person} other {{name}}}",
|
||||
"reassigned_assets_to_new_person": "Gentildelt {count, plural, one {# aktiv} other {# aktiver}} til en ny person",
|
||||
@@ -1586,6 +1618,7 @@
|
||||
"regenerating_thumbnails": "Regenererer forhåndsvisninger",
|
||||
"remote": "Eksternt",
|
||||
"remote_assets": "Eksterne objekter",
|
||||
"remote_media_summary": "Oversigt over eksterne media",
|
||||
"remove": "Fjern",
|
||||
"remove_assets_album_confirmation": "Er du sikker på, at du vil fjerne {count, plural, one {# aktiv} other {# aktiver}} fra albummet?",
|
||||
"remove_assets_shared_link_confirmation": "Er du sikker på, at du vil fjerne {count, plural, one {# aktiv} other {# aktiver}} fra dette delte link?",
|
||||
@@ -1861,6 +1894,7 @@
|
||||
"show_slideshow_transition": "Vis overgang til diasshow",
|
||||
"show_supporter_badge": "Supportermærke",
|
||||
"show_supporter_badge_description": "Vis et supportermærke",
|
||||
"show_text_search_menu": "Vis tekstsøgningsmenu",
|
||||
"shuffle": "Bland",
|
||||
"sidebar": "Sidebjælke",
|
||||
"sidebar_display_description": "Vis et link til visningen i sidebjælken",
|
||||
@@ -1891,6 +1925,7 @@
|
||||
"stacktrace": "Stacktrace",
|
||||
"start": "Start",
|
||||
"start_date": "Startdato",
|
||||
"start_date_before_end_date": "Startdato skal ligge før slutdato",
|
||||
"state": "Stat",
|
||||
"status": "Status",
|
||||
"stop_casting": "Stop støbning",
|
||||
@@ -2093,5 +2128,6 @@
|
||||
"yes": "Ja",
|
||||
"you_dont_have_any_shared_links": "Du har ikke nogen delte links",
|
||||
"your_wifi_name": "Dit Wi-Fi navn",
|
||||
"zoom_image": "Zoom billede"
|
||||
"zoom_image": "Zoom billede",
|
||||
"zoom_to_bounds": "Zoom til grænserne"
|
||||
}
|
||||
|
||||
10
i18n/de.json
10
i18n/de.json
@@ -1360,8 +1360,8 @@
|
||||
"my_albums": "Meine Alben",
|
||||
"name": "Name",
|
||||
"name_or_nickname": "Name oder Nickname",
|
||||
"network_requirement_photos_upload": "Mobiles Datennetz verwenden, um Fotos zu sichern",
|
||||
"network_requirement_videos_upload": "Mobiles Datennetz verwenden, um Videos zu sichern",
|
||||
"network_requirement_photos_upload": "Mobile Daten verwenden, um Fotos zu sichern",
|
||||
"network_requirement_videos_upload": "Mobile Daten verwenden, um Videos zu sichern",
|
||||
"network_requirements": "Anforderungen ans Netzwerk",
|
||||
"network_requirements_updated": "Netzwerk-Abhängigkeiten haben sich geändert, Backup-Warteschlange wird zurückgesetzt",
|
||||
"networking_settings": "Netzwerk",
|
||||
@@ -1503,7 +1503,7 @@
|
||||
"person": "Person",
|
||||
"person_age_months": "{months, plural, one {# month} other {# months}} alt",
|
||||
"person_age_year_months": "1 Jahr, {months, plural, one {# month} other {# months}} alt",
|
||||
"person_age_years": "{years, plural, other {# years}} alt",
|
||||
"person_age_years": "{years, plural, one {# Jahr} other {# Jahre}} alt",
|
||||
"person_birthdate": "Geboren am {date}",
|
||||
"person_hidden": "{name}{hidden, select, true { (verborgen)} other {}}",
|
||||
"photo_shared_all_users": "Es sieht so aus, als hättest du deine Fotos mit allen Benutzern geteilt oder du hast keine Benutzer, mit denen du teilen kannst.",
|
||||
@@ -1527,6 +1527,7 @@
|
||||
"port": "Port",
|
||||
"preferences_settings_subtitle": "App-Einstellungen verwalten",
|
||||
"preferences_settings_title": "Voreinstellungen",
|
||||
"preparing": "Vorbereiten",
|
||||
"preset": "Voreinstellung",
|
||||
"preview": "Vorschau",
|
||||
"previous": "Vorherige",
|
||||
@@ -1569,7 +1570,7 @@
|
||||
"purchase_license_subtitle": "Kaufe Immich, um die fortlaufende Entwicklung zu unterstützen",
|
||||
"purchase_lifetime_description": "Lebenslange Gültigkeit",
|
||||
"purchase_option_title": "KAUFOPTIONEN",
|
||||
"purchase_panel_info_1": "Die Entwicklung von Immich erfordert viel Zeit und Mühe, und wir haben Vollzeit-Entwickler, die daran arbeiten es möglichst perfekt zu machen. Unser Ziel ist es, dass Open-Source-Software und moralische Geschäftsmethoden zu einer nachhaltigen Einkommensquelle für Entwickler werden und ein datenschutzfreundliches Ökosystem mit echten Alternativen zu ausbeuterischen Cloud-Diensten geschaffen wird.",
|
||||
"purchase_panel_info_1": "Die Entwicklung von Immich erfordert viel Zeit und Mühe und wir haben Vollzeit-Entwickler, die daran arbeiten Immich möglichst perfekt zu machen. Unser Ziel ist es, Open-Source-Software und ethische Geschäftspraktiken zu einer verlässlichen Einkommensquelle für Entwickler zu machen und ein datenschutzfreundliches Ökosystem mit echten Alternativen zu ausbeuterischen Cloud-Diensten zu schaffen.",
|
||||
"purchase_panel_info_2": "Weil wir uns dagegen entschieden haben, eine Bezahlschranke einzusetzen, wird dieser Kauf keine zusätzlichen Funktionen in Immich freischalten. Wir verlassen uns auf Nutzende wie dich, um die Entwicklung von Immich zu unterstützen.",
|
||||
"purchase_panel_title": "Das Projekt unterstützen",
|
||||
"purchase_per_server": "Pro Server",
|
||||
@@ -1592,6 +1593,7 @@
|
||||
"read_changelog": "Changelog lesen",
|
||||
"readonly_mode_disabled": "Schreibgeschützter Modus deaktiviert",
|
||||
"readonly_mode_enabled": "Schreibgeschützter Modus aktiviert",
|
||||
"ready_for_upload": "Bereit zum Hochladen",
|
||||
"reassign": "Neu zuweisen",
|
||||
"reassigned_assets_to_existing_person": "{count, plural, one {# Datei wurde} other {# Dateien wurden}} {name, select, null {einer vorhandenen Person} other {{name}}} zugewiesen",
|
||||
"reassigned_assets_to_new_person": "{count, plural, one {# Datei wurde} other {# Dateien wurden}} einer neuen Person zugewiesen",
|
||||
|
||||
@@ -123,6 +123,13 @@
|
||||
"logging_enable_description": "Ενεργοποίηση καταγραφής συμβάντων",
|
||||
"logging_level_description": "Το επίπεδο καταγραφής συμβάντων που θα εφαρμοστεί, όταν αυτή είναι ενεργοποιημένη.",
|
||||
"logging_settings": "Καταγραφή Συμβάντων",
|
||||
"machine_learning_availability_checks": "Έλεγχοι διαθεσιμότητας",
|
||||
"machine_learning_availability_checks_description": "Αυτόματος ανίχνευση και προτίμηση διαθέσιμων διακομιστών μηχανικής μάθησης",
|
||||
"machine_learning_availability_checks_enabled": "Ενεργοποίηση ελέγχων διαθεσιμότητας",
|
||||
"machine_learning_availability_checks_interval": "Διάστημα ελέγχου",
|
||||
"machine_learning_availability_checks_interval_description": "Διάστημα σε χιλιοστά δευτερολέπτου μεταξύ των ελέγχων διαθεσιμότητας",
|
||||
"machine_learning_availability_checks_timeout": "Αίτημα χρονικού ορίου λήξης",
|
||||
"machine_learning_availability_checks_timeout_description": "Χρονικό όριο σε χιλιοστά δευτερολέπτου για ελέγχους διαθεσιμότητας",
|
||||
"machine_learning_clip_model": "Μοντέλο CLIP",
|
||||
"machine_learning_clip_model_description": "Το όνομα ενός μοντέλου CLIP που αναφέρεται <link>εδώ</link>. Σημειώστε ότι πρέπει να επανεκτελέσετε την εργασία 'Έξυπνη Αναζήτηση' για όλες τις εικόνες μετά την αλλαγή μοντέλου.",
|
||||
"machine_learning_duplicate_detection": "Εντοπισμός Διπλότυπων",
|
||||
|
||||
18
i18n/es.json
18
i18n/es.json
@@ -123,13 +123,13 @@
|
||||
"logging_enable_description": "Habilitar registro",
|
||||
"logging_level_description": "Indica el nivel de registro a utilizar cuando está habilitado.",
|
||||
"logging_settings": "Registro",
|
||||
"machine_learning_availability_checks": "Verificaciones de disponibilidad",
|
||||
"machine_learning_availability_checks": "Comprobaciones de disponibilidad",
|
||||
"machine_learning_availability_checks_description": "Automáticamente detectar y preferir servidores de machine learning disponibles",
|
||||
"machine_learning_availability_checks_enabled": "Habilitar verificaciones de disponibilidad",
|
||||
"machine_learning_availability_checks_interval": "Intervalo de verificación",
|
||||
"machine_learning_availability_checks_interval_description": "Intervalo en milisegundos entre las verificaciones de disponibilidad",
|
||||
"machine_learning_availability_checks_enabled": "Habilitar comprobaciones de disponibilidad",
|
||||
"machine_learning_availability_checks_interval": "Intervalo de comprobación",
|
||||
"machine_learning_availability_checks_interval_description": "Intervalo en milisegundos entre las comprobaciones de disponibilidad",
|
||||
"machine_learning_availability_checks_timeout": "Tiempo de espera de solicitud",
|
||||
"machine_learning_availability_checks_timeout_description": "Tiempo de espera en milisegundos para verificaciones de disponibilidad",
|
||||
"machine_learning_availability_checks_timeout_description": "Tiempo de espera en milisegundos para comprobaciones de disponibilidad",
|
||||
"machine_learning_clip_model": "Modelo CLIP (Contrastive Language-Image Pre-Training)",
|
||||
"machine_learning_clip_model_description": "El nombre de un modelo CLIP listado <link>aquí</link>. Tendrás que relanzar el trabajo 'Búsqueda Inteligente' para todos los elementos al cambiar de modelo.",
|
||||
"machine_learning_duplicate_detection": "Detección de duplicados",
|
||||
@@ -698,7 +698,7 @@
|
||||
"comments_and_likes": "Comentarios y me gusta",
|
||||
"comments_are_disabled": "Los comentarios están deshabilitados",
|
||||
"common_create_new_album": "Crear nuevo álbum",
|
||||
"common_server_error": "Por favor, verifica tu conexión de red, asegúrate de que el servidor esté accesible y las versiones de la aplicación y del servidor sean compatibles.",
|
||||
"common_server_error": "Por favor, comprueba 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.",
|
||||
"completed": "Completado",
|
||||
"confirm": "Confirmar",
|
||||
"confirm_admin_password": "Confirmar contraseña del administrador",
|
||||
@@ -812,7 +812,7 @@
|
||||
"deletes_missing_assets": "Elimina archivos que faltan en el disco duro",
|
||||
"description": "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, comprueba el registro para obtener más detalles",
|
||||
"deselect_all": "Deseleccionar Todo",
|
||||
"details": "Detalles",
|
||||
"direction": "Dirección",
|
||||
@@ -1255,7 +1255,7 @@
|
||||
"logged_out_device": "Dispositivo desconectado",
|
||||
"login": "Inicio de sesión",
|
||||
"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, comprueba el URL del servidor e inténtalo de nuevo.",
|
||||
"login_form_back_button_text": "Atrás",
|
||||
"login_form_email_hint": "tucorreo@correo.com",
|
||||
"login_form_endpoint_hint": "http://tu-ip-de-servidor:puerto",
|
||||
@@ -1265,7 +1265,7 @@
|
||||
"login_form_err_invalid_url": "URL no válida",
|
||||
"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_config": "Error al iniciar sesión con OAuth, comprueba 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. Activa la compatibilidad con certificados autofirmados en la configuración si estás utilizando un certificado autofirmado.",
|
||||
|
||||
@@ -1526,6 +1526,7 @@
|
||||
"port": "Port",
|
||||
"preferences_settings_subtitle": "Halda rakenduse eelistusi",
|
||||
"preferences_settings_title": "Eelistused",
|
||||
"preparing": "Ettevalmistamine",
|
||||
"preset": "Eelseadistus",
|
||||
"preview": "Eelvaade",
|
||||
"previous": "Eelmine",
|
||||
@@ -1590,6 +1591,7 @@
|
||||
"read_changelog": "Vaata muudatuste ülevaadet",
|
||||
"readonly_mode_disabled": "Kirjutuskaitserežiim välja lülitatud",
|
||||
"readonly_mode_enabled": "Kirjutuskaitserežiim sisse lülitatud",
|
||||
"ready_for_upload": "Valmis üleslaadimiseks",
|
||||
"reassign": "Määra uuesti",
|
||||
"reassigned_assets_to_existing_person": "{count, plural, one {# üksus} other {# üksust}} seostatud {name, select, null {olemasoleva isikuga} other {isikuga {name}}}",
|
||||
"reassigned_assets_to_new_person": "{count, plural, one {# üksus} other {# üksust}} seostatud uue isikuga",
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
"logging_enable_description": "Ota lokikirjaus käyttöön",
|
||||
"logging_level_description": "Kun käytössä, mitä lokituksen tasoa käytetään.",
|
||||
"logging_settings": "Lokit",
|
||||
"machine_learning_availability_checks": "Saatavyystarkastukset",
|
||||
"machine_learning_clip_model": "CLIP-malli",
|
||||
"machine_learning_clip_model_description": "Käytettävän CLIP-mallin nimi <link>toimivien mallien listasta</link>. Huomaa että sinun täytyy suorittaa \"Älykäs etsintä\"-työ uudelleen vaihdettuasi käytettävää mallia.",
|
||||
"machine_learning_duplicate_detection": "Kaksoiskappaleiden tunnistus",
|
||||
|
||||
@@ -1546,6 +1546,7 @@
|
||||
"year": "वर्ष",
|
||||
"yes": "हाँ",
|
||||
"you_dont_have_any_shared_links": "आपके पास कोई साझा लिंक नहीं है",
|
||||
"your_wifi_name": "Your WiFi name",
|
||||
"zoom_image": "छवि ज़ूम करें"
|
||||
"your_wifi_name": "आपके वाईफाई का नाम",
|
||||
"zoom_image": "छवि ज़ूम करें",
|
||||
"zoom_to_bounds": "सीमा तक ज़ूम करें"
|
||||
}
|
||||
|
||||
44
i18n/id.json
44
i18n/id.json
@@ -123,6 +123,13 @@
|
||||
"logging_enable_description": "Aktifkan log",
|
||||
"logging_level_description": "Ketika diaktifkan, tingkat log apa yang digunakan.",
|
||||
"logging_settings": "Penulisan log",
|
||||
"machine_learning_availability_checks": "Pemeriksaan ketersediaan",
|
||||
"machine_learning_availability_checks_description": "Secara otomatis mendeteksi dan memprioritaskan server machine learning yang tersedia",
|
||||
"machine_learning_availability_checks_enabled": "Aktifkan pemeriksaan ketersediaan",
|
||||
"machine_learning_availability_checks_interval": "Interval pemeriksaan",
|
||||
"machine_learning_availability_checks_interval_description": "Interval dalam milidetik antar pemeriksaan ketersediaan",
|
||||
"machine_learning_availability_checks_timeout": "Batas waktu permintaan",
|
||||
"machine_learning_availability_checks_timeout_description": "Batas waktu dalam milidetik untuk pemeriksaan ketersediaan",
|
||||
"machine_learning_clip_model": "Model CLIP",
|
||||
"machine_learning_clip_model_description": "Nama model CLIP yang didaftarkan <link>di sini</link>. Anda harus menjalankan ulang tugas 'Pencarian Otomatis' untuk semua gambar ketika mengganti model.",
|
||||
"machine_learning_duplicate_detection": "Deteksi Duplikat",
|
||||
@@ -423,6 +430,7 @@
|
||||
"album_remove_user_confirmation": "Apakah Anda yakin ingin mengeluarkan {user}?",
|
||||
"album_search_not_found": "Tidak ada album yang ditemukan sesuai pencarian Anda",
|
||||
"album_share_no_users": "Sepertinya Anda telah membagikan album ini dengan semua pengguna atau tidak memiliki pengguna siapa pun untuk dibagikan.",
|
||||
"album_summary": "Ringkasan album",
|
||||
"album_updated": "Album diperbarui",
|
||||
"album_updated_setting_description": "Terima notifikasi surel ketika album terbagi memiliki aset baru",
|
||||
"album_user_left": "Keluar dari {album}",
|
||||
@@ -494,6 +502,8 @@
|
||||
"asset_restored_successfully": "Aset telah berhasil dipulihkan",
|
||||
"asset_skipped": "Dilewati",
|
||||
"asset_skipped_in_trash": "Dalam sampah",
|
||||
"asset_trashed": "Aset dibuang",
|
||||
"asset_troubleshoot": "Troubleshoot Aset",
|
||||
"asset_uploaded": "Sudah diunggah",
|
||||
"asset_uploading": "Mengunggah…",
|
||||
"asset_viewer_settings_subtitle": "Kelola pengaturan penampil galeri Anda",
|
||||
@@ -527,8 +537,10 @@
|
||||
"autoplay_slideshow": "Putar otomatis tayangan slide",
|
||||
"back": "Kembali",
|
||||
"back_close_deselect": "Kembali, tutup, atau batalkan pemilihan",
|
||||
"background_backup_running_error": "Cadangan latar belakang sedang berjalan, tidak dapat memulai cadangan manual",
|
||||
"background_location_permission": "Izin lokasi latar belakang",
|
||||
"background_location_permission_content": "Untuk beralih jaringan saat berjalan di latar belakang, Immich harus selalu memiliki akses lokasi akurat agar aplikasi dapat membaca nama jaringan Wi-Fi",
|
||||
"background_options": "Opsi Latar Belakang",
|
||||
"backup": "Cadangkan",
|
||||
"backup_album_selection_page_albums_device": "Album di perangkat ({count})",
|
||||
"backup_album_selection_page_albums_tap": "Sentuh untuk memilih, sentuh 2x untuk mengecualikan",
|
||||
@@ -536,6 +548,7 @@
|
||||
"backup_album_selection_page_select_albums": "Pilih album",
|
||||
"backup_album_selection_page_selection_info": "Info Pilihan",
|
||||
"backup_album_selection_page_total_assets": "Total aset unik",
|
||||
"backup_albums_sync": "Sinkronisasi cadangan album",
|
||||
"backup_all": "Semua",
|
||||
"backup_background_service_backup_failed_message": "Gagal mencadangkan aset. Mencoba lagi…",
|
||||
"backup_background_service_connection_failed_message": "Koneksi ke server gagal. Mencoba ulang…",
|
||||
@@ -652,6 +665,8 @@
|
||||
"change_pin_code": "Ubah kode PIN",
|
||||
"change_your_password": "Ubah kata sandi Anda",
|
||||
"changed_visibility_successfully": "Keterlihatan berhasil diubah",
|
||||
"charging": "Mengisi daya",
|
||||
"charging_requirement_mobile_backup": "Cadangan latar belakang memerlukan perangkat dalam keadaan mengisi daya",
|
||||
"check_corrupt_asset_backup": "Periksa cadangan aset yang rusak",
|
||||
"check_corrupt_asset_backup_button": "Lakukan pemeriksaan",
|
||||
"check_corrupt_asset_backup_description": "Jalankan pemeriksaan ini hanya melalui Wi-Fi dan setelah semua aset dicadangkan. Prosedur ini mungkin memerlukan waktu beberapa menit.",
|
||||
@@ -738,6 +753,7 @@
|
||||
"create_user": "Buat pengguna",
|
||||
"created": "Dibuat",
|
||||
"created_at": "Dibuat",
|
||||
"creating_linked_albums": "Membuat album tertaut...",
|
||||
"crop": "Pangkas",
|
||||
"curated_object_page_title": "Benda",
|
||||
"current_device": "Perangkat saat ini",
|
||||
@@ -887,7 +903,9 @@
|
||||
"error": "Eror",
|
||||
"error_change_sort_album": "Gagal mengubah urutan album",
|
||||
"error_delete_face": "Terjadi kesalahan menghapus wajah dari aset",
|
||||
"error_getting_places": "Kesalahan saat mengambil lokasi",
|
||||
"error_loading_image": "Terjadi eror memuat gambar",
|
||||
"error_loading_partners": "Kesalahan saat memuat partner: {error}",
|
||||
"error_saving_image": "Kesalahan: {error}",
|
||||
"error_tag_face_bounding_box": "Galat saat memberi tag wajah – tidak dapat memperoleh koordinat kotak pembatas",
|
||||
"error_title": "Eror - Ada yang salah",
|
||||
@@ -1052,6 +1070,7 @@
|
||||
"favorites_page_no_favorites": "Tidak ada aset favorit",
|
||||
"feature_photo_updated": "Foto terfitur diperbarui",
|
||||
"features": "Fitur",
|
||||
"features_in_development": "Fitur dalam Pengembangan",
|
||||
"features_setting_description": "Kelola fitur aplikasi",
|
||||
"file_name": "Nama berkas",
|
||||
"file_name_or_extension": "Nama berkas atau ekstensi",
|
||||
@@ -1216,6 +1235,7 @@
|
||||
"local": "Lokal",
|
||||
"local_asset_cast_failed": "Tidak dapat melakukan cast aset yang belum diunggah ke server",
|
||||
"local_assets": "Aset Lokal",
|
||||
"local_media_summary": "Ringkasan Media Lokal",
|
||||
"local_network": "Jaringan Lokal",
|
||||
"local_network_sheet_info": "Aplikasi akan terhubung ke server melalui URL ini saat menggunakan jaringan Wi-Fi yang ditentukan",
|
||||
"location_permission": "Izin lokasi",
|
||||
@@ -1227,6 +1247,7 @@
|
||||
"location_picker_longitude_hint": "Masukkan bujur di sini",
|
||||
"lock": "Kunci",
|
||||
"locked_folder": "Folder Terkunci",
|
||||
"log_detail_title": "Detail Log",
|
||||
"log_out": "Log keluar",
|
||||
"log_out_all_devices": "Keluar dari Semua Perangkat",
|
||||
"logged_in_as": "Masuk sebagai {user}",
|
||||
@@ -1257,6 +1278,7 @@
|
||||
"login_password_changed_success": "Sandi berhasil diperbarui",
|
||||
"logout_all_device_confirmation": "Apakah Anda yakin ingin keluar dari semua perangkat?",
|
||||
"logout_this_device_confirmation": "Apakah Anda yakin ingin mengeluarkan perangkat ini?",
|
||||
"logs": "Log",
|
||||
"longitude": "Bujur",
|
||||
"look": "Tampilan",
|
||||
"loop_videos": "Ulangi video",
|
||||
@@ -1299,6 +1321,7 @@
|
||||
"mark_as_read": "Tandai sebagai telah dibaca",
|
||||
"marked_all_as_read": "Semua telah ditandai sebagai telah dibaca",
|
||||
"matches": "Cocokan",
|
||||
"matching_assets": "Aset yang Cocok",
|
||||
"media_type": "Jenis media",
|
||||
"memories": "Kenangan",
|
||||
"memories_all_caught_up": "Semua telah dilihat",
|
||||
@@ -1339,6 +1362,7 @@
|
||||
"name_or_nickname": "Nama atau nama panggilan",
|
||||
"network_requirement_photos_upload": "Gunakan data seluler untuk cadangkan foto",
|
||||
"network_requirement_videos_upload": "Gunakan data seluler untuk cadangkan video",
|
||||
"network_requirements": "Persyaratan Jaringan",
|
||||
"network_requirements_updated": "Persyaratan jaringan telah berubah, antrean pencadangan diatur ulang",
|
||||
"networking_settings": "Jaringan",
|
||||
"networking_subtitle": "Kelola pengaturan Endpoint server",
|
||||
@@ -1349,6 +1373,7 @@
|
||||
"new_person": "Orang baru",
|
||||
"new_pin_code": "Kode PIN baru",
|
||||
"new_pin_code_subtitle": "Ini adalah akses pertama Anda ke folder terkunci. Buat kode PIN untuk mengamankan akses ke halaman ini",
|
||||
"new_timeline": "Linimasa Baru",
|
||||
"new_user_created": "Pengguna baru dibuat",
|
||||
"new_version_available": "VERSI BARU TERSEDIA",
|
||||
"newest_first": "Terkini dahulu",
|
||||
@@ -1362,20 +1387,25 @@
|
||||
"no_assets_message": "KLIK UNTUK MENGUNGGAH FOTO PERTAMA ANDA",
|
||||
"no_assets_to_show": "Tidak ada aset",
|
||||
"no_cast_devices_found": "Tidak ada perangkat cast yang ditemukan",
|
||||
"no_checksum_local": "Tidak ada checksum yang tersedia - tidak dapat mengambil aset lokal",
|
||||
"no_checksum_remote": "Tidak ada checksum yang tersedia - tidak dapat mengambil aset jarak jauh",
|
||||
"no_duplicates_found": "Tidak ada duplikat yang ditemukan.",
|
||||
"no_exif_info_available": "Tidak ada info EXIF yang tersedia",
|
||||
"no_explore_results_message": "Unggah lebih banyak foto untuk menjelajahi koleksi Anda.",
|
||||
"no_favorites_message": "Tambahkan favorit untuk mencari foto dan video terbaik Anda dengan cepat",
|
||||
"no_libraries_message": "Buat pustaka eksternal untuk menampilkan foto dan video Anda",
|
||||
"no_local_assets_found": "Tidak ada aset lokal yang ditemukan dengan checksum ini",
|
||||
"no_locked_photos_message": "Foto dan video di folder terkunci disembunyikan dan tidak akan muncul saat Anda menelusuri atau mencari di pustaka.",
|
||||
"no_name": "Tidak Ada Nama",
|
||||
"no_notifications": "Tidak ada notifikasi",
|
||||
"no_people_found": "Orang tidak ditemukan",
|
||||
"no_places": "Tidak ada tempat",
|
||||
"no_remote_assets_found": "Tidak ada aset jarak jauh yang ditemukan dengan checksum ini",
|
||||
"no_results": "Tidak ada hasil",
|
||||
"no_results_description": "Coba sinonim atau kata kunci yang lebih umum",
|
||||
"no_shared_albums_message": "Buat sebuah album untuk membagikan foto dan video dengan orang-orang dalam jaringan Anda",
|
||||
"no_uploads_in_progress": "Tidak ada unggahan yang sedang berlangsung",
|
||||
"not_available": "T/T",
|
||||
"not_in_any_album": "Tidak ada dalam album apa pun",
|
||||
"not_selected": "Belum dipilih",
|
||||
"note_apply_storage_label_to_previously_uploaded assets": "Catatan: Untuk menerapkan Label Penyimpanan pada aset yang sebelumnya telah diunggah, jalankan",
|
||||
@@ -1497,6 +1527,7 @@
|
||||
"port": "Porta",
|
||||
"preferences_settings_subtitle": "Kelola preferensi aplikasi",
|
||||
"preferences_settings_title": "Preferensi",
|
||||
"preparing": "Mempersiapkan",
|
||||
"preset": "Prasetel",
|
||||
"preview": "Pratinjau",
|
||||
"previous": "Sebelumnya",
|
||||
@@ -1513,7 +1544,7 @@
|
||||
"profile_drawer_client_out_of_date_minor": "Versi app seluler ini sudah kedaluwarsa. Silakan perbarui ke versi minor terbaru.",
|
||||
"profile_drawer_client_server_up_to_date": "Klien dan server menjalankan versi terbaru",
|
||||
"profile_drawer_github": "GitHub",
|
||||
"profile_drawer_readonly_mode": "Mode baca-saja aktif. Ketuk dua kali ikon avatar pengguna untuk keluar.",
|
||||
"profile_drawer_readonly_mode": "Mode baca-saja aktif. Tekan lama ikon avatar pengguna untuk keluar.",
|
||||
"profile_drawer_server_out_of_date_major": "Versi server ini telah kedaluwarsa. Silakan perbarui ke versi major terbaru.",
|
||||
"profile_drawer_server_out_of_date_minor": "Versi server ini telah kedaluwarsa. Silakan perbarui ke versi minor terbaru.",
|
||||
"profile_image_of_user": "Foto profil dari {user}",
|
||||
@@ -1562,6 +1593,7 @@
|
||||
"read_changelog": "Baca Log Perubahan",
|
||||
"readonly_mode_disabled": "Mode baca-saja dimatikan",
|
||||
"readonly_mode_enabled": "Mode baca-saja diaktifkan",
|
||||
"ready_for_upload": "Siap untuk mengunggah",
|
||||
"reassign": "Tetapkan ulang",
|
||||
"reassigned_assets_to_existing_person": "Menetapkan ulang {count, plural, one {# aset} other {# aset}} kepada {name, select, null {orang yang sudah ada} other {{name}}}",
|
||||
"reassigned_assets_to_new_person": "Menetapkan ulang {count, plural, one {# aset} other {# aset}} kepada orang baru",
|
||||
@@ -1586,6 +1618,7 @@
|
||||
"regenerating_thumbnails": "Membuat ulang gambar kecil",
|
||||
"remote": "Jarak Jauh",
|
||||
"remote_assets": "Aset Jarak Jauh",
|
||||
"remote_media_summary": "Ringkasan Media Jarak Jauh",
|
||||
"remove": "Hapus",
|
||||
"remove_assets_album_confirmation": "Apakah Anda yakin ingin menghapus {count, plural, one {# aset} other {# aset}} dari album?",
|
||||
"remove_assets_shared_link_confirmation": "Apakah Anda yakin ingin menghapus {count, plural, one {# aset} other {# aset}} dari tautan terbagi ini?",
|
||||
@@ -1638,6 +1671,7 @@
|
||||
"restore_user": "Pulihkan pengguna",
|
||||
"restored_asset": "Aset dipulihkan",
|
||||
"resume": "Lanjutkan",
|
||||
"resume_paused_jobs": "Lanjutkan {count, plural, one {# pekerjaan yang dijeda} other {# pekerjaan yang dijeda}}",
|
||||
"retry_upload": "Ulangi pengunggahan",
|
||||
"review_duplicates": "Pratinjau duplikat",
|
||||
"review_large_files": "Meninjau berkas berukuran besar",
|
||||
@@ -1860,6 +1894,7 @@
|
||||
"show_slideshow_transition": "Tampilkan transisi salindia",
|
||||
"show_supporter_badge": "Lencana suporter",
|
||||
"show_supporter_badge_description": "Tampilkan lencana suporter",
|
||||
"show_text_search_menu": "Tampilkan menu pencarian teks",
|
||||
"shuffle": "Acak",
|
||||
"sidebar": "Bilah sisi",
|
||||
"sidebar_display_description": "Menampilkan tautan ke tampilan di bilah sisi",
|
||||
@@ -1890,6 +1925,7 @@
|
||||
"stacktrace": "Jejak tumpukan",
|
||||
"start": "Mulai",
|
||||
"start_date": "Tanggal mulai",
|
||||
"start_date_before_end_date": "Tanggal mulai harus sebelum tanggal akhir",
|
||||
"state": "Keadaan",
|
||||
"status": "Status",
|
||||
"stop_casting": "Hentikan cast",
|
||||
@@ -1914,6 +1950,8 @@
|
||||
"sync_albums_manual_subtitle": "Melakukan sinkronisasi semua video dan foto yang telah diunggah ke album cadangan yang dipilih",
|
||||
"sync_local": "Sinkronkan lokal",
|
||||
"sync_remote": "Sinkronkan jarak jauh",
|
||||
"sync_status": "Status Sinkronisasi",
|
||||
"sync_status_subtitle": "Lihat dan atur sistem sinkronisasi",
|
||||
"sync_upload_album_setting_subtitle": "Membuat dan mengunggah foto serta video Anda ke album yang telah dipilih pada Immich",
|
||||
"tag": "Label",
|
||||
"tag_assets": "Tag aset",
|
||||
@@ -1973,6 +2011,7 @@
|
||||
"trash_page_select_assets_btn": "Pilih aset",
|
||||
"trash_page_title": "Sampah ({count})",
|
||||
"trashed_items_will_be_permanently_deleted_after": "Item yang dibuang akan dihapus secara permanen setelah {days, plural, one {# hari} other {# hari}}.",
|
||||
"troubleshoot": "Pemecahan Masalah",
|
||||
"type": "Jenis",
|
||||
"unable_to_change_pin_code": "Tidak dapat mengubah kode PIN",
|
||||
"unable_to_setup_pin_code": "Tidak dapat memasang kode PIN",
|
||||
@@ -2089,5 +2128,6 @@
|
||||
"yes": "Ya",
|
||||
"you_dont_have_any_shared_links": "Anda tidak memiliki tautan terbagi",
|
||||
"your_wifi_name": "Nama Wi-Fi Anda",
|
||||
"zoom_image": "Perbesar Gambar"
|
||||
"zoom_image": "Perbesar Gambar",
|
||||
"zoom_to_bounds": "Perbesar ke batas"
|
||||
}
|
||||
|
||||
15
i18n/it.json
15
i18n/it.json
@@ -123,6 +123,13 @@
|
||||
"logging_enable_description": "Attiva il logging",
|
||||
"logging_level_description": "Quando attivato, che livello di log utilizzare.",
|
||||
"logging_settings": "Registro dei Log",
|
||||
"machine_learning_availability_checks": "Verifiche di disponibilità",
|
||||
"machine_learning_availability_checks_description": "Rileva automaticamente e usa i server di machine learning disponibili",
|
||||
"machine_learning_availability_checks_enabled": "Attiva verifiche di disponibilità",
|
||||
"machine_learning_availability_checks_interval": "Intervallo di verifica",
|
||||
"machine_learning_availability_checks_interval_description": "Intervallo (ms) tra le verifiche di disponibilità",
|
||||
"machine_learning_availability_checks_timeout": "Timeout richiesta",
|
||||
"machine_learning_availability_checks_timeout_description": "Timeout (ms) per le verifiche di disponibilità",
|
||||
"machine_learning_clip_model": "Modello CLIP",
|
||||
"machine_learning_clip_model_description": "Il nome del modello CLIP mostrato <link>qui</link>. Nota che devi rieseguire il processo 'Ricerca Intelligente' per tutte le immagini al cambio del modello.",
|
||||
"machine_learning_duplicate_detection": "Rilevamento Duplicati",
|
||||
@@ -533,6 +540,7 @@
|
||||
"background_backup_running_error": "Il backup in background è attualmente in esecuzione, impossibile avviare il backup manuale",
|
||||
"background_location_permission": "Permesso di localizzazione in background",
|
||||
"background_location_permission_content": "Per fare in modo che sia possibile cambiare rete quando è in esecuzione in background, Immich deve *sempre* avere accesso alla tua posizione precisa in modo da poter leggere il nome della rete Wi-Fi",
|
||||
"background_options": "Opzioni sfondo",
|
||||
"backup": "Backup",
|
||||
"backup_album_selection_page_albums_device": "Album sul dispositivo ({count})",
|
||||
"backup_album_selection_page_albums_tap": "Tap per includere, doppio tap per escludere",
|
||||
@@ -540,6 +548,7 @@
|
||||
"backup_album_selection_page_select_albums": "Seleziona gli album",
|
||||
"backup_album_selection_page_selection_info": "Informazioni sulla selezione",
|
||||
"backup_album_selection_page_total_assets": "Numero totale delle risorse",
|
||||
"backup_albums_sync": "Sincronizzazione album di backup",
|
||||
"backup_all": "Tutti",
|
||||
"backup_background_service_backup_failed_message": "È stato impossibile fare il backup dei contenuti. Riprovo…",
|
||||
"backup_background_service_connection_failed_message": "Impossibile connettersi al server. Riprovo…",
|
||||
@@ -656,6 +665,8 @@
|
||||
"change_pin_code": "Cambia il codice PIN",
|
||||
"change_your_password": "Modifica la tua password",
|
||||
"changed_visibility_successfully": "Visibilità modificata con successo",
|
||||
"charging": "In carica",
|
||||
"charging_requirement_mobile_backup": "Il backup in background richiede che il dispositivo sia in carica",
|
||||
"check_corrupt_asset_backup": "Verifica la presenza di backup di asset corrotti",
|
||||
"check_corrupt_asset_backup_button": "Effettua controllo",
|
||||
"check_corrupt_asset_backup_description": "Effettua questo controllo solo sotto rete Wi-Fi e quando tutti gli asset sono stati sottoposti a backup. La procedura potrebbe impiegare qualche minuto.",
|
||||
@@ -1351,6 +1362,7 @@
|
||||
"name_or_nickname": "Nome o soprannome",
|
||||
"network_requirement_photos_upload": "Utilizza la connessione dati per il backup delle foto",
|
||||
"network_requirement_videos_upload": "Utilizza la connessione dati per il backup dei video",
|
||||
"network_requirements": "Requisiti di rete",
|
||||
"network_requirements_updated": "Requisiti di rete modificati, coda di backup reimpostata",
|
||||
"networking_settings": "Rete",
|
||||
"networking_subtitle": "Gestisci le impostazioni riguardanti gli endpoint del server",
|
||||
@@ -1515,6 +1527,7 @@
|
||||
"port": "Porta",
|
||||
"preferences_settings_subtitle": "Gestisci le preferenze dell'app",
|
||||
"preferences_settings_title": "Preferenze",
|
||||
"preparing": "Preparando",
|
||||
"preset": "Preimpostazione",
|
||||
"preview": "Anteprima",
|
||||
"previous": "Precedente",
|
||||
@@ -1580,6 +1593,7 @@
|
||||
"read_changelog": "Leggi Riepilogo Modifiche",
|
||||
"readonly_mode_disabled": "Modalità di sola lettura disabilitata",
|
||||
"readonly_mode_enabled": "Modalità di sola lettura abilitata",
|
||||
"ready_for_upload": "Pronto per il caricamento",
|
||||
"reassign": "Riassegna",
|
||||
"reassigned_assets_to_existing_person": "{count, plural, one {Riassegnato # asset} other {Riassegnati # assets}} {name, select, null {ad una persona esistente} other {a {name}}}",
|
||||
"reassigned_assets_to_new_person": "{count, plural, one {Riassegnato # asset} other {Riassegnati # assets}} ad una nuova persona",
|
||||
@@ -1911,6 +1925,7 @@
|
||||
"stacktrace": "Traccia dell'errore",
|
||||
"start": "Avvia",
|
||||
"start_date": "Data di inizio",
|
||||
"start_date_before_end_date": "La data di inizio deve essere precedente alla data di fine",
|
||||
"state": "Provincia",
|
||||
"status": "Stato",
|
||||
"stop_casting": "Interrompi trasmissione",
|
||||
|
||||
30
i18n/ja.json
30
i18n/ja.json
@@ -123,6 +123,8 @@
|
||||
"logging_enable_description": "ログの有効化",
|
||||
"logging_level_description": "有効な場合に使用されるログ レベル。",
|
||||
"logging_settings": "ログ",
|
||||
"machine_learning_availability_checks": "可用性の確認",
|
||||
"machine_learning_availability_checks_description": "利用可能な機械学習のサーバーを自動で検知し優先的に使用します",
|
||||
"machine_learning_availability_checks_enabled": "可用性チェックを有効にする",
|
||||
"machine_learning_availability_checks_interval": "チェックの間隔",
|
||||
"machine_learning_availability_checks_interval_description": "可用性チェックの間隔(ミリ秒単位)",
|
||||
@@ -428,6 +430,7 @@
|
||||
"album_remove_user_confirmation": "本当に{user}を削除しますか?",
|
||||
"album_search_not_found": "検索に一致するアルバムがありません",
|
||||
"album_share_no_users": "このアルバムを全てのユーザーと共有したか、共有するユーザーがいないようです。",
|
||||
"album_summary": "アルバムのまとめ",
|
||||
"album_updated": "アルバム更新",
|
||||
"album_updated_setting_description": "共有アルバムに新しいアセットが追加されたとき通知を受け取る",
|
||||
"album_user_left": "{album} を去りました",
|
||||
@@ -499,6 +502,8 @@
|
||||
"asset_restored_successfully": "復元できました",
|
||||
"asset_skipped": "スキップ済",
|
||||
"asset_skipped_in_trash": "ゴミ箱の中",
|
||||
"asset_trashed": "項目が削除されました",
|
||||
"asset_troubleshoot": "項目をトラブルシューㇳ",
|
||||
"asset_uploaded": "アップロード済",
|
||||
"asset_uploading": "アップロード中…",
|
||||
"asset_viewer_settings_subtitle": "ギャラリービューアーに関する設定",
|
||||
@@ -532,8 +537,10 @@
|
||||
"autoplay_slideshow": "スライドショーを自動再生",
|
||||
"back": "戻る",
|
||||
"back_close_deselect": "戻る、閉じる、選択解除",
|
||||
"background_backup_running_error": "バックグラウンドのバックアップがすでに行われている最中です。そのため、マニュアルでのバックアップを開始することはできません。",
|
||||
"background_location_permission": "バックグラウンド位置情報アクセス",
|
||||
"background_location_permission_content": "正常にWi-Fiの名前(SSID)を獲得するにはアプリが常に詳細な位置情報にアクセスできる必要があります",
|
||||
"background_options": "バックグラウンドの動作オプション",
|
||||
"backup": "バックアップ",
|
||||
"backup_album_selection_page_albums_device": "デバイス上のアルバム({count})",
|
||||
"backup_album_selection_page_albums_tap": "タップで選択、ダブルタップで除外",
|
||||
@@ -541,6 +548,7 @@
|
||||
"backup_album_selection_page_select_albums": "アルバムを選択",
|
||||
"backup_album_selection_page_selection_info": "選択・除外中のアルバム",
|
||||
"backup_album_selection_page_total_assets": "選択されたアルバムの写真と動画の数",
|
||||
"backup_albums_sync": "アルバム同期状態をバックアップ",
|
||||
"backup_all": "すべて",
|
||||
"backup_background_service_backup_failed_message": "アップロードに失敗しました。リトライ中…",
|
||||
"backup_background_service_connection_failed_message": "サーバーに接続できません。リトライ中…",
|
||||
@@ -657,6 +665,8 @@
|
||||
"change_pin_code": "PINコードを変更",
|
||||
"change_your_password": "パスワードを変更します",
|
||||
"changed_visibility_successfully": "非表示設定を正常に変更しました",
|
||||
"charging": "充電中",
|
||||
"charging_requirement_mobile_backup": "バックグラウンドでのバックアップを行うためには、デバイスが充電中である必要があります",
|
||||
"check_corrupt_asset_backup": "破損されている項目を探す",
|
||||
"check_corrupt_asset_backup_button": "チェックを行う",
|
||||
"check_corrupt_asset_backup_description": "写真や動画などが全てアップロードし終えてからWi-Fiに接続時のみチェックを行なってください。作業が完了するには数分かかる場合があります",
|
||||
@@ -743,6 +753,7 @@
|
||||
"create_user": "ユーザーを作成",
|
||||
"created": "作成",
|
||||
"created_at": "作成:",
|
||||
"creating_linked_albums": "リンクされたアルバムを作成中・・・",
|
||||
"crop": "クロップ",
|
||||
"curated_object_page_title": "被写体",
|
||||
"current_device": "現在のデバイス",
|
||||
@@ -892,7 +903,9 @@
|
||||
"error": "エラー",
|
||||
"error_change_sort_album": "アルバムの表示順の変更に失敗しました",
|
||||
"error_delete_face": "アセットから顔の削除ができませんでした",
|
||||
"error_getting_places": "場所の取得に失敗しました",
|
||||
"error_loading_image": "画像の読み込みエラー",
|
||||
"error_loading_partners": "パートナーの読み込みに失敗しました: {error}",
|
||||
"error_saving_image": "エラー: {error}",
|
||||
"error_tag_face_bounding_box": "顔の登録に失敗しました - 顔を囲む四角形の座標取得に失敗",
|
||||
"error_title": "エラー - 問題が発生しました",
|
||||
@@ -1057,6 +1070,7 @@
|
||||
"favorites_page_no_favorites": "お気に入り登録された項目がありません",
|
||||
"feature_photo_updated": "人物画像が更新されました",
|
||||
"features": "機能",
|
||||
"features_in_development": "開発中の機能",
|
||||
"features_setting_description": "アプリの機能を管理する",
|
||||
"file_name": "ファイル名",
|
||||
"file_name_or_extension": "ファイル名または拡張子",
|
||||
@@ -1221,6 +1235,7 @@
|
||||
"local": "ローカル",
|
||||
"local_asset_cast_failed": "サーバーにアップロードされていない項目はキャストできません",
|
||||
"local_assets": "ローカルの項目",
|
||||
"local_media_summary": "ローカルメディアのまとめ",
|
||||
"local_network": "ローカルネットワーク",
|
||||
"local_network_sheet_info": "アプリは指定されたWi-Fiに繋がっている時サーバーへの接続を下記のURLで行います",
|
||||
"location_permission": "位置情報権限",
|
||||
@@ -1232,6 +1247,7 @@
|
||||
"location_picker_longitude_hint": "経度を入力",
|
||||
"lock": "ロック",
|
||||
"locked_folder": "鍵付きフォルダー",
|
||||
"log_detail_title": "ログの詳細",
|
||||
"log_out": "ログアウト",
|
||||
"log_out_all_devices": "全てのデバイスからログアウト",
|
||||
"logged_in_as": "{user}としてログイン中",
|
||||
@@ -1262,6 +1278,7 @@
|
||||
"login_password_changed_success": "パスワードの変更に成功",
|
||||
"logout_all_device_confirmation": "本当に全てのデバイスからログアウトしますか?",
|
||||
"logout_this_device_confirmation": "本当にこのデバイスからログアウトしますか?",
|
||||
"logs": "ログ",
|
||||
"longitude": "経度",
|
||||
"look": "見た目",
|
||||
"loop_videos": "動画をループ",
|
||||
@@ -1304,6 +1321,7 @@
|
||||
"mark_as_read": "既読にする",
|
||||
"marked_all_as_read": "すべて既読にしました",
|
||||
"matches": "マッチ",
|
||||
"matching_assets": "一致する項目",
|
||||
"media_type": "メディアタイプ",
|
||||
"memories": "メモリー",
|
||||
"memories_all_caught_up": "これで全部です",
|
||||
@@ -1344,6 +1362,7 @@
|
||||
"name_or_nickname": "名前またはニックネーム",
|
||||
"network_requirement_photos_upload": "モバイル通信を使用して写真のバックアップを行う",
|
||||
"network_requirement_videos_upload": "モバイル通信を使用して動画のバックアップを行う",
|
||||
"network_requirements": "ネットワークの要件",
|
||||
"network_requirements_updated": "ネットワークの条件が変更されたため、バックアップの順番待ちをリセットします",
|
||||
"networking_settings": "ネットワーク",
|
||||
"networking_subtitle": "サーバーエンドポイントに関する設定",
|
||||
@@ -1354,6 +1373,7 @@
|
||||
"new_person": "新しい人物",
|
||||
"new_pin_code": "新しいPINコード",
|
||||
"new_pin_code_subtitle": "鍵付きフォルダーを利用するのが初めてのようです。PINコードを作成してください",
|
||||
"new_timeline": "新たなタイムライン",
|
||||
"new_user_created": "新しいユーザーが作成されました",
|
||||
"new_version_available": "新しいバージョンが利用可能",
|
||||
"newest_first": "最新順",
|
||||
@@ -1367,20 +1387,25 @@
|
||||
"no_assets_message": "クリックして最初の写真をアップロード",
|
||||
"no_assets_to_show": "表示する項目がありません",
|
||||
"no_cast_devices_found": "キャスト先のデバイスが見つかりません",
|
||||
"no_checksum_local": "チェックサムが見つかりません - デバイス上の項目を取得できないようです",
|
||||
"no_checksum_remote": "チェックサムが見つかりません - サーバー上の項目を取得できないようです",
|
||||
"no_duplicates_found": "重複は見つかりませんでした。",
|
||||
"no_exif_info_available": "exif情報が利用できません",
|
||||
"no_explore_results_message": "コレクションを探索するにはさらに写真をアップロードしてください。",
|
||||
"no_favorites_message": "お気に入り登録すると好きな写真や動画をすぐに見つけられます",
|
||||
"no_libraries_message": "あなたの写真や動画を表示するための外部ライブラリを作成しましょう",
|
||||
"no_local_assets_found": "このチェックサムの項目はデバイス上に存在しません",
|
||||
"no_locked_photos_message": "鍵付きフォルダー内の写真や動画は通常のライブラリに表示されなくなります。",
|
||||
"no_name": "名前なし",
|
||||
"no_notifications": "通知なし",
|
||||
"no_people_found": "一致する人物が見つかりません",
|
||||
"no_places": "場所なし",
|
||||
"no_remote_assets_found": "このチェックサムの項目はサーバー上に存在しません",
|
||||
"no_results": "結果がありません",
|
||||
"no_results_description": "同義語やより一般的なキーワードを試してください",
|
||||
"no_shared_albums_message": "アルバムを作成して写真や動画を共有しましょう",
|
||||
"no_uploads_in_progress": "アップロードは行われていません",
|
||||
"not_available": "適用なし",
|
||||
"not_in_any_album": "どのアルバムにも入っていない",
|
||||
"not_selected": "選択なし",
|
||||
"note_apply_storage_label_to_previously_uploaded assets": "注意: 以前にアップロードしたアセットにストレージラベルを適用するには以下を実行してください",
|
||||
@@ -1593,6 +1618,7 @@
|
||||
"regenerating_thumbnails": "サムネイルを再生成中",
|
||||
"remote": "リモート",
|
||||
"remote_assets": "リモートの項目",
|
||||
"remote_media_summary": "サーバー上のメディアまとめ",
|
||||
"remove": "削除",
|
||||
"remove_assets_album_confirmation": "本当に{count, plural, one {#個} other {#個}}のアセットをアルバムから削除しますか?",
|
||||
"remove_assets_shared_link_confirmation": "本当にこの共有リンクから{count, plural, one {#個} other {#個}}のアセットを削除しますか?",
|
||||
@@ -1868,6 +1894,7 @@
|
||||
"show_slideshow_transition": "スライドショーのトランジションを表示",
|
||||
"show_supporter_badge": "サポーターバッジ",
|
||||
"show_supporter_badge_description": "サポーターバッジを表示",
|
||||
"show_text_search_menu": "テキスト検索メニューを表示",
|
||||
"shuffle": "ランダム",
|
||||
"sidebar": "サイドバー",
|
||||
"sidebar_display_description": "サイドバーにビューへのリンクを表示",
|
||||
@@ -2101,5 +2128,6 @@
|
||||
"yes": "はい",
|
||||
"you_dont_have_any_shared_links": "共有リンクはありません",
|
||||
"your_wifi_name": "Wi-Fiの名前(SSID)",
|
||||
"zoom_image": "画像を拡大"
|
||||
"zoom_image": "画像を拡大",
|
||||
"zoom_to_bounds": "画面端までズーム"
|
||||
}
|
||||
|
||||
21
i18n/lt.json
21
i18n/lt.json
@@ -123,6 +123,13 @@
|
||||
"logging_enable_description": "Įjungti žurnalo vedimą",
|
||||
"logging_level_description": "Įjungus, kokį žurnalo vedimo lygį naudot.",
|
||||
"logging_settings": "Žurnalo vedimas",
|
||||
"machine_learning_availability_checks": "Prieinamumo patikrinimai",
|
||||
"machine_learning_availability_checks_description": "Automatiškai aptikti ir teikti pirmenybę prieinamiems mašininio mokymosi serveriams",
|
||||
"machine_learning_availability_checks_enabled": "Įjungti prieinamumo patikrinimus",
|
||||
"machine_learning_availability_checks_interval": "Patikros intervalas",
|
||||
"machine_learning_availability_checks_interval_description": "Intervalas milisekundėmis tarp prieinamumo patikrinimų",
|
||||
"machine_learning_availability_checks_timeout": "Užklausos laiko limitas",
|
||||
"machine_learning_availability_checks_timeout_description": "Laiko limitas milisekundėmis prieinamumo patikrinimams",
|
||||
"machine_learning_clip_model": "CLIP modelis",
|
||||
"machine_learning_clip_model_description": "Pavadinimas CLIP modelio įvardintio <link>here</link>. Dėmesio, keičiant modelį jūs privalote iš naujo paleisti 'Išmaniosios Paieškos' užduotį visiems vaizdams.",
|
||||
"machine_learning_duplicate_detection": "Dublikatų aptikimas",
|
||||
@@ -264,8 +271,8 @@
|
||||
"storage_template_date_time_description": "Elemento sukūrimo laiko žymė yra naudojama laiko informacijai",
|
||||
"storage_template_date_time_sample": "Pavyzdinis laikas {date}",
|
||||
"storage_template_enable_description": "Aktyvuoti saugyklos šabloną",
|
||||
"storage_template_hash_verification_enabled": "Aktyvuoti Hash tikrinimą",
|
||||
"storage_template_hash_verification_enabled_description": "Aktyvuojamas Hash tikrinimas, neišjungti nebent gerai suprantate galimas pasekmes",
|
||||
"storage_template_hash_verification_enabled": "Aktyvuoti failo parašo tikrinimą",
|
||||
"storage_template_hash_verification_enabled_description": "Aktyvuojamas failo parašo tikrinimas, neišjungti nebent gerai suprantate galimas pasekmes",
|
||||
"storage_template_migration": "Saugyklos tvarkymas pagal šabloną",
|
||||
"storage_template_migration_description": "Taikyti dabartinį <link>{template}</link> anksčiau įkeltiems duomenims",
|
||||
"storage_template_migration_info": "Saugyklos tvarkyklė konvertuos visus plėtinius mažosiomis raidėmis. Šablonas bus taikomas tik naujiems duomenims. Taikyti šabloną retroaktyviai anksčiau įkeltiems duomenims, paleiskite šią <link>{job}</link>.",
|
||||
@@ -481,7 +488,7 @@
|
||||
"asset_description_updated": "Elemento aprašymas buvo atnaujintas",
|
||||
"asset_filename_is_offline": "Elementas {filename} nepasiekiamas",
|
||||
"asset_has_unassigned_faces": "Elementas turi nepriskirtų veidų",
|
||||
"asset_hashing": "Maišoma…",
|
||||
"asset_hashing": "Kuriami bylų parašai…",
|
||||
"asset_list_group_by_sub_title": "Grupuoti pagal",
|
||||
"asset_list_layout_settings_dynamic_layout_title": "Dinaminis išdėstymas",
|
||||
"asset_list_layout_settings_group_automatically": "Automatiškai",
|
||||
@@ -689,7 +696,7 @@
|
||||
"comments_are_disabled": "Komentarai yra išjungti",
|
||||
"common_create_new_album": "Sukurti naują albumą",
|
||||
"common_server_error": "Prašome patikrinti tinklo prisijungimą ir įsitikinti, kad serveris pasiekiamas ir programos/serverio versija sutampa.",
|
||||
"completed": "Atlikta",
|
||||
"completed": "Užbaigta",
|
||||
"confirm": "Patvirtinti",
|
||||
"confirm_admin_password": "Patvirtinti administratoriaus slaptažodį",
|
||||
"confirm_delete_face": "Ar tikrai norite ištrinti {name} veidą iš elementų?",
|
||||
@@ -1100,9 +1107,9 @@
|
||||
"haptic_feedback_switch": "Įjungti haptinį grįžtamąjį ryšį",
|
||||
"haptic_feedback_title": "Haptinis grįžtamasis ryšys",
|
||||
"has_quota": "Turi kvotą",
|
||||
"hash_asset": "Maišymo elementas",
|
||||
"hashed_assets": "Sumaišyti elementai",
|
||||
"hashing": "Maišoma",
|
||||
"hash_asset": "Kurti bylos parašą elementui",
|
||||
"hashed_assets": "Elementai su bylų parašais",
|
||||
"hashing": "Bylų parašo kūrimas",
|
||||
"header_settings_add_header_tip": "Pridėti antraštę",
|
||||
"header_settings_field_validator_msg": "Reikšmė negali būti tuščia",
|
||||
"header_settings_header_name_input": "Antraštės pavadinimas",
|
||||
|
||||
@@ -1059,6 +1059,7 @@
|
||||
"rating_description": "Rādīt EXIF vērtējumu informācijas panelī",
|
||||
"reaction_options": "Reakcijas iespējas",
|
||||
"read_changelog": "Lasīt izmaiņu sarakstu",
|
||||
"ready_for_upload": "Gatavs augšupielādei",
|
||||
"recently_added_page_title": "Nesen Pievienotais",
|
||||
"refresh": "Atsvaidzināt",
|
||||
"refresh_faces": "Atsvaidzināt sejas",
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
"add_a_location": "Tambah lokasi",
|
||||
"add_a_name": "Tambah nama",
|
||||
"add_a_title": "Tambah tajuk",
|
||||
"add_birthday": "Tambah hari jadi",
|
||||
"add_endpoint": "Tambah titik akhir",
|
||||
"add_exclusion_pattern": "Tambahkan corak pengecualian",
|
||||
"add_import_path": "Tambahkan laluan import",
|
||||
@@ -27,6 +28,8 @@
|
||||
"add_to_album": "Tambah ke album",
|
||||
"add_to_album_bottom_sheet_added": "Dimasukkan ke {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Sudah ada di {album}",
|
||||
"add_to_albums": "Tambah pada album",
|
||||
"add_to_albums_count": "Tambah pada album ({count})",
|
||||
"add_to_shared_album": "Tambah ke album yang dikongsi",
|
||||
"add_url": "Tambah URL",
|
||||
"added_to_archive": "Tambah ke arkib",
|
||||
@@ -44,6 +47,9 @@
|
||||
"backup_database": "Buat Salinan Pangkalan Data",
|
||||
"backup_database_enable_description": "Dayakan salinan pangkalan data",
|
||||
"backup_keep_last_amount": "Jumlah salinan pangkalan data sebelumnya untuk disimpan",
|
||||
"backup_onboarding_1_description": "salinan luar tapak di awan atau di lokasi fizikal lain",
|
||||
"backup_onboarding_2_description": "salinan tempatan pada peranti yang berbeza. Ini termasuk fail utama dan sandaran fail tersebut secara setempat.",
|
||||
"backup_onboarding_3_description": "jumlah salinan data anda, termasuk fail asal. Ini termasuk 1 salinan luar tapak dan 2 salinan tempatan.",
|
||||
"backup_settings": "Tetapan Salinan Pangkalan Data",
|
||||
"backup_settings_description": "Urus tetapan salinan pangkalan data.",
|
||||
"cleared_jobs": "Kerja telah dibersihkan untuk: {job}",
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
"library_watching_settings_description": "Se automatisk etter endrede filer",
|
||||
"logging_enable_description": "Aktiver logging",
|
||||
"logging_level_description": "Hvis aktivert, hvilket loggnivå som skal brukes.",
|
||||
"logging_settings": "Logger",
|
||||
"logging_settings": "Loggføring",
|
||||
"machine_learning_availability_checks": "Tilgjengelighetssjekk",
|
||||
"machine_learning_availability_checks_description": "Automatisk oppdag og velg tilgjengelige maskinlæring-servere",
|
||||
"machine_learning_availability_checks_enabled": "Aktiver tilgjengelighetssjekk",
|
||||
@@ -1527,6 +1527,7 @@
|
||||
"port": "Port",
|
||||
"preferences_settings_subtitle": "Administrer appens preferanser",
|
||||
"preferences_settings_title": "Innstillinger",
|
||||
"preparing": "Forbereder",
|
||||
"preset": "Forhåndsinstilling",
|
||||
"preview": "Forhåndsvis",
|
||||
"previous": "Forrige",
|
||||
@@ -1592,6 +1593,7 @@
|
||||
"read_changelog": "Les endringslogg",
|
||||
"readonly_mode_disabled": "Skrivebeskyttet modus deaktivert",
|
||||
"readonly_mode_enabled": "Skrivebeskyttet modus aktivert",
|
||||
"ready_for_upload": "Klar for opplasting",
|
||||
"reassign": "Tilordne på nytt",
|
||||
"reassigned_assets_to_existing_person": "Flyttet {count, plural, one {# objekt} other {# objekter}} to {name, select, null {en eksisterende person} other {{name}}}",
|
||||
"reassigned_assets_to_new_person": "Flyttet {count, plural, one {# objekt} other {# objekter}} til en ny person",
|
||||
|
||||
22
i18n/nl.json
22
i18n/nl.json
@@ -123,10 +123,13 @@
|
||||
"logging_enable_description": "Logboek inschakelen",
|
||||
"logging_level_description": "Indien ingeschakeld, welk logniveau er wordt gebruikt.",
|
||||
"logging_settings": "Logging",
|
||||
"machine_learning_availability_checks": "Beschikbaarheid",
|
||||
"machine_learning_availability_checks_description": "Automatisch detecteren en selecteren van beschikbare machine learning servers",
|
||||
"machine_learning_availability_checks_enabled": "Activeer beschikbaarheid controles",
|
||||
"machine_learning_availability_checks_interval": "Controleinterval",
|
||||
"machine_learning_availability_checks_interval_description": "Interval in milliseconden tussen beschikbaarheid checks",
|
||||
"machine_learning_availability_checks_timeout": "Verzoek time-out",
|
||||
"machine_learning_availability_checks_timeout_description": "Time-out in milliseconden voor beschikbaarheidschecks",
|
||||
"machine_learning_clip_model": "CLIP model",
|
||||
"machine_learning_clip_model_description": "De naam van een CLIP-model dat <link>hier</link> is vermeld. Let op: je moet de 'Slim Zoeken -taak opnieuw uitvoeren voor alle afbeeldingen wanneer je een model wijzigt.",
|
||||
"machine_learning_duplicate_detection": "Duplicaat detectie",
|
||||
@@ -750,7 +753,7 @@
|
||||
"create_user": "Gebruiker aanmaken",
|
||||
"created": "Aangemaakt",
|
||||
"created_at": "Aangemaakt",
|
||||
"creating_linked_albums": "Gekoppelde albums worden aangemaakt",
|
||||
"creating_linked_albums": "Gekoppelde albums worden aangemaakt...",
|
||||
"crop": "Bijsnijden",
|
||||
"curated_object_page_title": "Dingen",
|
||||
"current_device": "Huidig apparaat",
|
||||
@@ -846,7 +849,7 @@
|
||||
"download_sucess_android": "Het bestand is gedownload naar DCIM/Immich",
|
||||
"download_waiting_to_retry": "Wachten om opnieuw te proberen",
|
||||
"downloading": "Downloaden",
|
||||
"downloading_asset_filename": "Downloading asset {filename}",
|
||||
"downloading_asset_filename": "Downloaden asset {filename}",
|
||||
"downloading_media": "Media aan het downloaden",
|
||||
"drop_files_to_upload": "Zet bestanden ergens neer om ze te uploaden",
|
||||
"duplicates": "Duplicaten",
|
||||
@@ -900,7 +903,9 @@
|
||||
"error": "Fout",
|
||||
"error_change_sort_album": "Sorteervolgorde van album wijzigen mislukt",
|
||||
"error_delete_face": "Fout bij verwijderen van gezicht uit het item",
|
||||
"error_getting_places": "Fout bij ophalen plaatsen",
|
||||
"error_loading_image": "Fout bij laden afbeelding",
|
||||
"error_loading_partners": "Fout bij ophalen partners: {error}",
|
||||
"error_saving_image": "Fout: {error}",
|
||||
"error_tag_face_bounding_box": "Fout bij taggen van gezicht - kan coördinaten van omvattend kader niet ophalen",
|
||||
"error_title": "Fout - Er is iets misgegaan",
|
||||
@@ -1382,20 +1387,25 @@
|
||||
"no_assets_message": "KLIK HIER OM JE EERSTE FOTO TE UPLOADEN",
|
||||
"no_assets_to_show": "Geen foto's om te laten zien",
|
||||
"no_cast_devices_found": "Geen cast-apparaten gevonden",
|
||||
"no_checksum_local": "Geen checksum beschikbaar - kan lokale assets niet ophalen",
|
||||
"no_checksum_remote": "Geen checksum beschikbaar - kan online assets niet ophalen",
|
||||
"no_duplicates_found": "Er zijn geen duplicaten gevonden.",
|
||||
"no_exif_info_available": "Geen exif info beschikbaar",
|
||||
"no_explore_results_message": "Upload meer foto's om je verzameling te verkennen.",
|
||||
"no_favorites_message": "Voeg favorieten toe om snel je beste foto's en video's te vinden",
|
||||
"no_libraries_message": "Maak een externe bibliotheek om je foto's en video's te bekijken",
|
||||
"no_local_assets_found": "Geen lokale assets gevonden met deze checksum",
|
||||
"no_locked_photos_message": "Foto’s en video’s in de vergrendelde map zijn verborgen en worden niet weergegeven wanneer je door je bibliotheek bladert of zoekt.",
|
||||
"no_name": "Geen naam",
|
||||
"no_notifications": "Geen meldingen",
|
||||
"no_people_found": "Geen mensen gevonden",
|
||||
"no_places": "Geen plaatsen",
|
||||
"no_remote_assets_found": "Geen online assets gevonden met deze checksum",
|
||||
"no_results": "Geen resultaten",
|
||||
"no_results_description": "Probeer een synoniem of een algemener zoekwoord",
|
||||
"no_shared_albums_message": "Maak een album om foto's en video's te delen met mensen in je netwerk",
|
||||
"no_uploads_in_progress": "Geen uploads bezig",
|
||||
"not_available": "N.B.",
|
||||
"not_in_any_album": "Niet in een album",
|
||||
"not_selected": "Niet geselecteerd",
|
||||
"note_apply_storage_label_to_previously_uploaded assets": "Opmerking: om het opslaglabel toe te passen op eerder geüploade items, voer de volgende taak uit",
|
||||
@@ -1517,6 +1527,7 @@
|
||||
"port": "Poort",
|
||||
"preferences_settings_subtitle": "Beheer de voorkeuren van de app",
|
||||
"preferences_settings_title": "Voorkeuren",
|
||||
"preparing": "Voorbereiden",
|
||||
"preset": "Voorinstelling",
|
||||
"preview": "Voorbeeld",
|
||||
"previous": "Vorige",
|
||||
@@ -1582,6 +1593,7 @@
|
||||
"read_changelog": "Lees wijzigingen",
|
||||
"readonly_mode_disabled": "Alleen-lezen modus uitgeschakeld",
|
||||
"readonly_mode_enabled": "Alleen-lezen modus ingeschakeld",
|
||||
"ready_for_upload": "Klaar voor upload",
|
||||
"reassign": "Opnieuw toewijzen",
|
||||
"reassigned_assets_to_existing_person": "{count, plural, one {# item} other {# items}} opnieuw toegewezen aan {name, select, null {een bestaand persoon} other {{name}}}",
|
||||
"reassigned_assets_to_new_person": "{count, plural, one {# item} other {# items}} opnieuw toegewezen aan een nieuw persoon",
|
||||
@@ -1606,6 +1618,7 @@
|
||||
"regenerating_thumbnails": "Thumbnails opnieuw aan het genereren",
|
||||
"remote": "Externe",
|
||||
"remote_assets": "Externe Items",
|
||||
"remote_media_summary": "Online media samenvatting",
|
||||
"remove": "Verwijderen",
|
||||
"remove_assets_album_confirmation": "Weet je zeker dat je {count, plural, one {# item} other {# items}} uit het album wilt verwijderen?",
|
||||
"remove_assets_shared_link_confirmation": "Weet je zeker dat je {count, plural, one {# item} other {# items}} uit deze gedeelde link wilt verwijderen?",
|
||||
@@ -1881,6 +1894,7 @@
|
||||
"show_slideshow_transition": "Diavoorstellingsovergang tonen",
|
||||
"show_supporter_badge": "Supportersbadge",
|
||||
"show_supporter_badge_description": "Toon een supportersbadge",
|
||||
"show_text_search_menu": "Laat tekst zoek menu zien",
|
||||
"shuffle": "Willekeurig",
|
||||
"sidebar": "Zijbalk",
|
||||
"sidebar_display_description": "Toon een link naar deze pagina in de zijbalk",
|
||||
@@ -1911,6 +1925,7 @@
|
||||
"stacktrace": "Stacktrace",
|
||||
"start": "Start",
|
||||
"start_date": "Startdatum",
|
||||
"start_date_before_end_date": "Startdatum moet voor einddatum liggen",
|
||||
"state": "Staat",
|
||||
"status": "Status",
|
||||
"stop_casting": "Stop met casten",
|
||||
@@ -2113,5 +2128,6 @@
|
||||
"yes": "Ja",
|
||||
"you_dont_have_any_shared_links": "Je hebt geen gedeelde links",
|
||||
"your_wifi_name": "Je WiFi-naam",
|
||||
"zoom_image": "Inzoomen"
|
||||
"zoom_image": "Inzoomen",
|
||||
"zoom_to_bounds": "Zoom naar randen"
|
||||
}
|
||||
|
||||
12
i18n/pl.json
12
i18n/pl.json
@@ -1527,6 +1527,7 @@
|
||||
"port": "Port",
|
||||
"preferences_settings_subtitle": "Zarządzaj preferencjami aplikacji",
|
||||
"preferences_settings_title": "Ustawienia",
|
||||
"preparing": "Przygotowywanie",
|
||||
"preset": "Ustawienie",
|
||||
"preview": "Podgląd",
|
||||
"previous": "Poprzedni",
|
||||
@@ -1592,6 +1593,7 @@
|
||||
"read_changelog": "Zobacz Zmiany",
|
||||
"readonly_mode_disabled": "Tryb tylko do odczytu wyłączony",
|
||||
"readonly_mode_enabled": "Tryb tylko do odczytu włączony",
|
||||
"ready_for_upload": "Gotowe do przesłania",
|
||||
"reassign": "Przypisz ponownie",
|
||||
"reassigned_assets_to_existing_person": "Przypisano ponownie {count, plural, one {# zasób} other {# zasobów}} do {name, select, null {istniejącej osoby} other {{name}}}",
|
||||
"reassigned_assets_to_new_person": "Przypisano ponownie {count, plural, one {# zasób} other {# zasobów}} do nowej osoby",
|
||||
@@ -1630,8 +1632,8 @@
|
||||
"remove_from_locked_folder": "Usuń z folderu zablokowanego",
|
||||
"remove_from_locked_folder_confirmation": "Czy na pewno chcesz przenieść te zdjęcia i filmy z folderu zablokowanego? Będą one widoczne w bibliotece.",
|
||||
"remove_from_shared_link": "Usuń z udostępnionego linku",
|
||||
"remove_memory": "Usuń pamięć",
|
||||
"remove_photo_from_memory": "Usuń zdjęcia z tej pamięci",
|
||||
"remove_memory": "Usuń wspomnienie",
|
||||
"remove_photo_from_memory": "Usuń zdjęcia z tych wspomnień",
|
||||
"remove_tag": "Usuń tag",
|
||||
"remove_url": "Usuń URL",
|
||||
"remove_user": "Usuń użytkownika",
|
||||
@@ -1639,15 +1641,15 @@
|
||||
"removed_from_archive": "Usunięto z archiwum",
|
||||
"removed_from_favorites": "Usunięto z ulubionych",
|
||||
"removed_from_favorites_count": "{count, plural, other {Usunięto #}} z ulubionych",
|
||||
"removed_memory": "Pamięć została usunięta",
|
||||
"removed_photo_from_memory": "Usunięto zdjęcie z pamięci",
|
||||
"removed_memory": "Wspomnienie usunięte",
|
||||
"removed_photo_from_memory": "Usunięto zdjęcie ze wspomnień",
|
||||
"removed_tagged_assets": "Usunięto etykietę z {count, plural, one {# zasobu} other {# zasobów}}",
|
||||
"rename": "Zmień nazwę",
|
||||
"repair": "Napraw",
|
||||
"repair_no_results_message": "Tutaj pojawią się nieśledzone i brakujące pliki",
|
||||
"replace_with_upload": "Prześlij nową wersję",
|
||||
"repository": "Repozytorium",
|
||||
"require_password": "Wymagaj hasło",
|
||||
"require_password": "Wymagaj hasła",
|
||||
"require_user_to_change_password_on_first_login": "Zmuś użytkownika do zmiany hasła podczas następnego logowania",
|
||||
"rescan": "Ponowne skanowanie",
|
||||
"reset": "Reset",
|
||||
|
||||
@@ -123,6 +123,12 @@
|
||||
"logging_enable_description": "Ativar registo",
|
||||
"logging_level_description": "Quando ativado, qual o nível de log a usar.",
|
||||
"logging_settings": "Registo",
|
||||
"machine_learning_availability_checks": "Verificação de disponibilidade",
|
||||
"machine_learning_availability_checks_description": "Detectar automaticamente e dar preferência aos servidores de aprendizagem automática disponíveis",
|
||||
"machine_learning_availability_checks_enabled": "Activar confirmações de disponibilidade",
|
||||
"machine_learning_availability_checks_interval": "Confirmação de intervalo",
|
||||
"machine_learning_availability_checks_interval_description": "Intervalo, em milisegundos, entre confirmações de disponibilidade",
|
||||
"machine_learning_availability_checks_timeout": "Tempo limite para requisição",
|
||||
"machine_learning_clip_model": "Modelo CLIP",
|
||||
"machine_learning_clip_model_description": "O nome do modelo CLIP definido <link>aqui</link>. Tome nota de que é necessário voltar a executar a tarefa de \"Pesquisa Inteligente\" para todas as imagens depois de alterar o modelo.",
|
||||
"machine_learning_duplicate_detection": "Deteção de Itens Duplicados",
|
||||
@@ -423,6 +429,7 @@
|
||||
"album_remove_user_confirmation": "Tem a certeza de que quer remover {user}?",
|
||||
"album_search_not_found": "Nenhum álbum encontrado segundo a pesquisa",
|
||||
"album_share_no_users": "Parece que tem este álbum partilhado com todos os utilizadores ou que não existem utilizadores com quem o partilhar.",
|
||||
"album_summary": "Resumo do álbum",
|
||||
"album_updated": "Álbum atualizado",
|
||||
"album_updated_setting_description": "Receber uma notificação por e-mail quando um álbum partilhado tiver novos ficheiros",
|
||||
"album_user_left": "Saíu do {album}",
|
||||
|
||||
@@ -123,6 +123,13 @@
|
||||
"logging_enable_description": "Habilitar logs",
|
||||
"logging_level_description": "Quando ativado, qual nível de log usar.",
|
||||
"logging_settings": "Logs",
|
||||
"machine_learning_availability_checks": "Verficações de disponibilidade",
|
||||
"machine_learning_availability_checks_description": "Automaticamente detectar e preferir servidores de machine learning disponíveis",
|
||||
"machine_learning_availability_checks_enabled": "Habilitar verificações de disponibilidade",
|
||||
"machine_learning_availability_checks_interval": "Intervalo de verificação",
|
||||
"machine_learning_availability_checks_interval_description": "Intervalo em milisegundos entre verificações de disponibilidade",
|
||||
"machine_learning_availability_checks_timeout": "Tempo limite da solicitação",
|
||||
"machine_learning_availability_checks_timeout_description": "Tempo limite em milisegundos para verificações de disponibilidade",
|
||||
"machine_learning_clip_model": "Modelo CLIP",
|
||||
"machine_learning_clip_model_description": "O nome de um modelo CLIP listado <link>aqui</link>. Lembre-se de executar novamente a tarefa de 'Pesquisa Inteligente' para todas as imagens após alterar o modelo.",
|
||||
"machine_learning_duplicate_detection": "Detecção de duplicidade",
|
||||
@@ -1520,6 +1527,7 @@
|
||||
"port": "Porta",
|
||||
"preferences_settings_subtitle": "Gerenciar as preferências do aplicativo",
|
||||
"preferences_settings_title": "Preferências",
|
||||
"preparing": "Preparando",
|
||||
"preset": "Predefinição",
|
||||
"preview": "Pré-visualizar",
|
||||
"previous": "Anterior",
|
||||
@@ -1585,6 +1593,7 @@
|
||||
"read_changelog": "Ler Novidades",
|
||||
"readonly_mode_disabled": "Modo apenas visualização desativado",
|
||||
"readonly_mode_enabled": "Modo apenas visualização ativado",
|
||||
"ready_for_upload": "Pronto para upload",
|
||||
"reassign": "Reatribuir",
|
||||
"reassigned_assets_to_existing_person": "{count, plural, one {# arquivo reatribuído} other {# arquivos reatribuídos}} a {name, select, null {uma pessoa} other {{name}}}",
|
||||
"reassigned_assets_to_new_person": "{count, plural, one {# arquivo reatribuído} other {# arquivos reatribuídos}} a uma nova pessoa",
|
||||
@@ -1916,6 +1925,7 @@
|
||||
"stacktrace": "Stacktrace",
|
||||
"start": "Início",
|
||||
"start_date": "Data inicial",
|
||||
"start_date_before_end_date": "A data de início deve ser antes da data final",
|
||||
"state": "Estado",
|
||||
"status": "Status",
|
||||
"stop_casting": "Parar transmissão",
|
||||
|
||||
10
i18n/ru.json
10
i18n/ru.json
@@ -371,7 +371,7 @@
|
||||
"user_cleanup_job": "Очистка пользователя",
|
||||
"user_delete_delay": "Аккаунт и файлы пользователя <b>{user}</b> будут отложены до окончательного удаления через {delay, plural, one {# день} few {# дня} many {# дней} other {# дня}}.",
|
||||
"user_delete_delay_settings": "Отложенное удаление",
|
||||
"user_delete_delay_settings_description": "Срок в днях, по истечение которого происходит окончательное удаление учетной записи пользователя и его ресурсов. Задача по удалению пользователей выполняется в полночь. Изменения этой настройки будут учтены при следующем запуске задачи.",
|
||||
"user_delete_delay_settings_description": "Срок в днях, по истечении которого происходит окончательное удаление учётной записи пользователя и всех его объектов. Задача по удалению пользователей выполняется в полночь. Изменение этой настройки будет учтено при следующем запуске задачи.",
|
||||
"user_delete_immediately": "Аккаунт и файлы пользователя <b>{user}</b> будут <b>немедленно</b> поставлены в очередь для окончательного удаления.",
|
||||
"user_delete_immediately_checkbox": "Поместить пользователя и его файлы в очередь для немедленного удаления",
|
||||
"user_details": "Данные пользователя",
|
||||
@@ -540,7 +540,7 @@
|
||||
"background_backup_running_error": "Выполняется фоновое резервное копирование, запуск вручную пока невозможен",
|
||||
"background_location_permission": "Доступ к местоположению в фоне",
|
||||
"background_location_permission_content": "Чтобы считывать имя Wi-Fi сети в фоне, приложению *всегда* необходим доступ к точному местоположению устройства",
|
||||
"background_options": "Параметры фоновых задач",
|
||||
"background_options": "Выполнение фоновых задач",
|
||||
"backup": "Резервное копирование",
|
||||
"backup_album_selection_page_albums_device": "Альбомы на устройстве ({count})",
|
||||
"backup_album_selection_page_albums_tap": "Нажмите, чтобы включить, дважды, чтобы исключить",
|
||||
@@ -567,7 +567,7 @@
|
||||
"backup_controller_page_background_battery_info_title": "Оптимизация батареи",
|
||||
"backup_controller_page_background_charging": "Только во время зарядки",
|
||||
"backup_controller_page_background_configure_error": "Не удалось настроить фоновую службу",
|
||||
"backup_controller_page_background_delay": "Отложить резервное копирование новых объектов: {duration}",
|
||||
"backup_controller_page_background_delay": "Задержка перед загрузкой новых объектов: {duration}",
|
||||
"backup_controller_page_background_description": "Включите фоновую службу для автоматического резервного копирования любых новых объектов без необходимости открывать приложение",
|
||||
"backup_controller_page_background_is_off": "Автоматическое резервное копирование в фоновом режиме отключено",
|
||||
"backup_controller_page_background_is_on": "Автоматическое резервное копирование в фоновом режиме включено",
|
||||
@@ -584,7 +584,7 @@
|
||||
"backup_controller_page_filename": "Имя файла: {filename} [{size}]",
|
||||
"backup_controller_page_id": "ID: {id}",
|
||||
"backup_controller_page_info": "Информация о резервном копировании",
|
||||
"backup_controller_page_none_selected": "Ничего не выбрано",
|
||||
"backup_controller_page_none_selected": "Не выбрано",
|
||||
"backup_controller_page_remainder": "Осталось",
|
||||
"backup_controller_page_remainder_sub": "Фото и видео для загрузки",
|
||||
"backup_controller_page_server_storage": "Хранилище на сервере",
|
||||
@@ -665,7 +665,7 @@
|
||||
"change_pin_code": "Изменить PIN-код",
|
||||
"change_your_password": "Изменить свой пароль",
|
||||
"changed_visibility_successfully": "Видимость успешно изменена",
|
||||
"charging": "На зарядке",
|
||||
"charging": "При зарядке",
|
||||
"charging_requirement_mobile_backup": "Запускать резервное копирование только во время зарядки",
|
||||
"check_corrupt_asset_backup": "Проверка поврежденных резервных копий",
|
||||
"check_corrupt_asset_backup_button": "Проверить",
|
||||
|
||||
@@ -1527,6 +1527,7 @@
|
||||
"port": "Port",
|
||||
"preferences_settings_subtitle": "Spravovať predvoľby aplikácie",
|
||||
"preferences_settings_title": "Predvoľby",
|
||||
"preparing": "Pripravuje sa",
|
||||
"preset": "Predvoľba",
|
||||
"preview": "Náhľad",
|
||||
"previous": "Predošlé",
|
||||
@@ -1592,6 +1593,7 @@
|
||||
"read_changelog": "Prečítať zoznam zmien",
|
||||
"readonly_mode_disabled": "Režim iba na čítanie je vypnutý",
|
||||
"readonly_mode_enabled": "Režim iba na čítanie je zapnutý",
|
||||
"ready_for_upload": "Pripravené na nahratie",
|
||||
"reassign": "Preradiť",
|
||||
"reassigned_assets_to_existing_person": "Opätovne {count, plural, one {priradená # položka} few {priradené # položky} other {priradených # položiek}} k {name, select, null {existujúcej osobe} other {{name}}}",
|
||||
"reassigned_assets_to_new_person": "Opätovne {count, plural, one {priradená # položka} few {priradené # položky} other {priradených # položiek}} novej osobe",
|
||||
|
||||
14
i18n/sl.json
14
i18n/sl.json
@@ -306,14 +306,14 @@
|
||||
"transcoding_acceleration_qsv": "Hitra sinhronizacija (zahteva procesor Intel 7. generacije ali novejši)",
|
||||
"transcoding_acceleration_rkmpp": "RKMPP (samo na Rockchip SOC)",
|
||||
"transcoding_acceleration_vaapi": "VAAPI",
|
||||
"transcoding_accepted_audio_codecs": "Dovoljeni zvočni kodeksi",
|
||||
"transcoding_accepted_audio_codecs_description": "Izberite, katerih zvočnih kodeksov ni treba prekodirati. Uporablja se samo za določene politike prekodiranja.",
|
||||
"transcoding_accepted_audio_codecs": "Dovoljeni zvočni kodeki",
|
||||
"transcoding_accepted_audio_codecs_description": "Izberite, katerih zvočnih kodekov ni treba prekodirati. Uporablja se samo za določene politike prekodiranja.",
|
||||
"transcoding_accepted_containers": "Sprejeti zabojniki",
|
||||
"transcoding_accepted_containers_description": "Izberite, katerih formatov zabojnika ni treba ponovno muksirati v MP4. Uporablja se samo za določene politike prekodiranja.",
|
||||
"transcoding_accepted_video_codecs": "Podprti video kodeksi",
|
||||
"transcoding_accepted_video_codecs_description": "Izberite, katerih video kodeksov ni treba prekodirati. Uporablja se samo za določene politike prekodiranja.",
|
||||
"transcoding_accepted_video_codecs": "Podprti video kodeki",
|
||||
"transcoding_accepted_video_codecs_description": "Izberite, katerih video kodekov ni treba prekodirati. Uporablja se samo za določene politike prekodiranja.",
|
||||
"transcoding_advanced_options_description": "Možnosti, ki jih večini uporabnikov ne treba spreminjati",
|
||||
"transcoding_audio_codec": "Zvočni kodeks",
|
||||
"transcoding_audio_codec": "Zvočni kodek",
|
||||
"transcoding_audio_codec_description": "Opus je najbolj kakovostna možnost, vendar ima slabšo združljivost s starimi napravami ali programsko opremo.",
|
||||
"transcoding_bitrate_description": "Videoposnetki, ki presegajo največjo bitno hitrost ali niso v sprejemljivem formatu",
|
||||
"transcoding_codecs_learn_more": "Če želite izvedeti več o tukaj uporabljeni terminologiji, glejte dokumentacijo FFmpeg za <h264-link>kodek H.264</h264-link>, <hevc-link>kodek HEVC</hevc-link> in <vp9-link>VP9 kodek</vp9-link>.",
|
||||
@@ -323,7 +323,7 @@
|
||||
"transcoding_constant_rate_factor_description": "Raven kakovosti videa. Tipične vrednosti so 23 za H.264, 28 za HEVC, 31 za VP9 in 35 za AV1. Nižje je boljše, vendar ustvarja večje datoteke.",
|
||||
"transcoding_disabled_description": "Ne prekodirajte nobenih videoposnetkov, lahko prekine predvajanje na nekaterih odjemalcih",
|
||||
"transcoding_encoding_options": "Možnosti kodiranja",
|
||||
"transcoding_encoding_options_description": "Nastavite kodekse, ločljivost, kakovost in druge možnosti za kodirane videoposnetke",
|
||||
"transcoding_encoding_options_description": "Nastavite kodeke, ločljivost, kakovost in druge možnosti za kodirane videoposnetke",
|
||||
"transcoding_hardware_acceleration": "Strojno pospeševanje",
|
||||
"transcoding_hardware_acceleration_description": "Eksperimentalno: hitrejše prekodiranje, vendar se lahko kakovost pri enaki bitni hitrosti zmanjša",
|
||||
"transcoding_hardware_decoding": "Strojno dekodiranje",
|
||||
@@ -1527,6 +1527,7 @@
|
||||
"port": "Vrata",
|
||||
"preferences_settings_subtitle": "Upravljaj nastavitve aplikacije",
|
||||
"preferences_settings_title": "Nastavitve",
|
||||
"preparing": "Priprava",
|
||||
"preset": "Prednastavitev",
|
||||
"preview": "Predogled",
|
||||
"previous": "Prejšnj-a/-i",
|
||||
@@ -1592,6 +1593,7 @@
|
||||
"read_changelog": "Preberi dnevnik sprememb",
|
||||
"readonly_mode_disabled": "Način samo za branje je onemogočen",
|
||||
"readonly_mode_enabled": "Način samo za branje je omogočen",
|
||||
"ready_for_upload": "Pripravljeno za nalaganje",
|
||||
"reassign": "Prerazporedi",
|
||||
"reassigned_assets_to_existing_person": "Ponovno dodeljeno {count, plural, one {# sredstvo} two {# sredstvi} few {# sredstva} other {# sredstev}} za {name, select, null {an existing person} other {{name}}}",
|
||||
"reassigned_assets_to_new_person": "Ponovno dodeljeno {count, plural, one {# sredstvo} two {# sredstvi} few {# sredstva} other {# sredstev}} za novo osebo",
|
||||
|
||||
50
i18n/sv.json
50
i18n/sv.json
@@ -123,6 +123,13 @@
|
||||
"logging_enable_description": "Aktivera loggning",
|
||||
"logging_level_description": "Vilken loggnivå som ska användas vid aktivering.",
|
||||
"logging_settings": "Loggning",
|
||||
"machine_learning_availability_checks": "Tillgänglighetskontroller",
|
||||
"machine_learning_availability_checks_description": "Upptäck och föredrar automatiskt tillgängliga maskininlärningsservrar",
|
||||
"machine_learning_availability_checks_enabled": "Aktivera tillgänglighetskontroller",
|
||||
"machine_learning_availability_checks_interval": "Kontrollera intervall",
|
||||
"machine_learning_availability_checks_interval_description": "Intervall i millisekunder mellan tillgänglighetskontroller",
|
||||
"machine_learning_availability_checks_timeout": "Begär timeout",
|
||||
"machine_learning_availability_checks_timeout_description": "Timeout i millisekunder för tillgänglighetskontroller",
|
||||
"machine_learning_clip_model": "CLIP-modell",
|
||||
"machine_learning_clip_model_description": "Namnet på en CLIP-modell listad <link> här </link>. Observera att du måste köra ett \"Smart Sökning\" jobb för alla bilder när du ändrar modell.",
|
||||
"machine_learning_duplicate_detection": "Dubblettdetektering",
|
||||
@@ -423,6 +430,7 @@
|
||||
"album_remove_user_confirmation": "Är du säker på att du vill ta bort {user}?",
|
||||
"album_search_not_found": "Inga album hittades som matchade din sökning",
|
||||
"album_share_no_users": "Det verkar som att du har delat det här albumet med alla användare eller så har du inte någon användare att dela med.",
|
||||
"album_summary": "Albumsammanfattning",
|
||||
"album_updated": "Albumet uppdaterat",
|
||||
"album_updated_setting_description": "Få ett e-postmeddelande när ett delat album har nya tillgångar",
|
||||
"album_user_left": "Lämnade {album}",
|
||||
@@ -494,6 +502,8 @@
|
||||
"asset_restored_successfully": "Objekt återställt",
|
||||
"asset_skipped": "Överhoppad",
|
||||
"asset_skipped_in_trash": "I papperskorgen",
|
||||
"asset_trashed": "Tillgång kasserad",
|
||||
"asset_troubleshoot": "Felsökning av tillgångar",
|
||||
"asset_uploaded": "Uppladdad",
|
||||
"asset_uploading": "Laddar upp...…",
|
||||
"asset_viewer_settings_subtitle": "Hantera inställningar för gallerivisare",
|
||||
@@ -527,8 +537,10 @@
|
||||
"autoplay_slideshow": "Spela upp bildspel automatiskt",
|
||||
"back": "Bakåt",
|
||||
"back_close_deselect": "Tillbaka, stäng eller avmarkera",
|
||||
"background_backup_running_error": "Bakgrundssäkerhetskopiering körs för närvarande, kan inte starta manuell säkerhetskopiering",
|
||||
"background_location_permission": "Tillåtelse för bakgrundsplats",
|
||||
"background_location_permission_content": "För att kunna byta nätverk när appen körs i bakgrunden måste Immich *alltid* ha åtkomst till exakt plats så att appen kan läsa av Wi-Fi-nätverkets namn",
|
||||
"background_options": "Bakgrundsalternativ",
|
||||
"backup": "Säkerhetskopiera",
|
||||
"backup_album_selection_page_albums_device": "Album på enhet ({count})",
|
||||
"backup_album_selection_page_albums_tap": "Tryck en gång för att inkludera, tryck två gånger för att exkludera",
|
||||
@@ -536,6 +548,7 @@
|
||||
"backup_album_selection_page_select_albums": "Välj album",
|
||||
"backup_album_selection_page_selection_info": "Info om valda objekt",
|
||||
"backup_album_selection_page_total_assets": "Antal unika objekt",
|
||||
"backup_albums_sync": "Säkerhetskopiera album synkronisering",
|
||||
"backup_all": "Allt",
|
||||
"backup_background_service_backup_failed_message": "Säkerhetskopiering av foton och videor misslyckades. Försöker igen…",
|
||||
"backup_background_service_connection_failed_message": "Anslutning till servern misslyckades. Försöker igen…",
|
||||
@@ -652,6 +665,8 @@
|
||||
"change_pin_code": "Ändra PIN-kod",
|
||||
"change_your_password": "Ändra ditt lösenord",
|
||||
"changed_visibility_successfully": "Synligheten har ändrats",
|
||||
"charging": "Laddar",
|
||||
"charging_requirement_mobile_backup": "Bakgrundssäkerhetskopiering kräver att enheten laddas",
|
||||
"check_corrupt_asset_backup": "Kontrollera om det finns korrupta säkerhetskopior av objekt",
|
||||
"check_corrupt_asset_backup_button": "Kontrollera",
|
||||
"check_corrupt_asset_backup_description": "Kör kontrollen endast över Wi-Fi och när alla objekt har säkerhetskopierats. Det kan ta några minuter.",
|
||||
@@ -738,6 +753,7 @@
|
||||
"create_user": "Skapa användare",
|
||||
"created": "Skapad",
|
||||
"created_at": "Skapad",
|
||||
"creating_linked_albums": "Skapar länkade album...",
|
||||
"crop": "Beskär",
|
||||
"curated_object_page_title": "Objekt",
|
||||
"current_device": "Aktuell enhet",
|
||||
@@ -869,7 +885,7 @@
|
||||
"editor_close_without_save_prompt": "Ändringarna kommer inte att sparas",
|
||||
"editor_close_without_save_title": "Stäng redigeraren?",
|
||||
"editor_crop_tool_h2_aspect_ratios": "Bildförhållande",
|
||||
"editor_crop_tool_h2_rotation": "Rotation",
|
||||
"editor_crop_tool_h2_rotation": "Vridning",
|
||||
"email": "Epost",
|
||||
"email_notifications": "E-postaviseringar",
|
||||
"empty_folder": "Mappen är tom",
|
||||
@@ -887,7 +903,9 @@
|
||||
"error": "Fel",
|
||||
"error_change_sort_album": "Kunde inte ändra sorteringsordning för album",
|
||||
"error_delete_face": "Fel uppstod när ansikte skulle tas bort från objektet",
|
||||
"error_getting_places": "Det gick inte att hämta platser",
|
||||
"error_loading_image": "Fel vid bildladdning",
|
||||
"error_loading_partners": "Fel vid inläsning av partner: {error}",
|
||||
"error_saving_image": "Fel: {error}",
|
||||
"error_tag_face_bounding_box": "Fel vid taggning av ansikte – kan inte hämta koordinater för begränsningsruta",
|
||||
"error_title": "Fel – något gick fel",
|
||||
@@ -1013,7 +1031,7 @@
|
||||
"unable_to_update_user": "Kunde inte uppdatera användare",
|
||||
"unable_to_upload_file": "Det går inte att ladda upp filen"
|
||||
},
|
||||
"exif": "Exif",
|
||||
"exif": "EXIF",
|
||||
"exif_bottom_sheet_description": "Lägg till beskrivning...",
|
||||
"exif_bottom_sheet_description_error": "Fel vid uppdatering av beskrivningen",
|
||||
"exif_bottom_sheet_details": "DETALJER",
|
||||
@@ -1052,6 +1070,7 @@
|
||||
"favorites_page_no_favorites": "Inga favoritobjekt hittades",
|
||||
"feature_photo_updated": "Funktionsfoto uppdaterad",
|
||||
"features": "Funktioner",
|
||||
"features_in_development": "Funktioner i utveckling",
|
||||
"features_setting_description": "Hantera appens funktioner",
|
||||
"file_name": "Filnamn",
|
||||
"file_name_or_extension": "Filnamn eller -tillägg",
|
||||
@@ -1069,7 +1088,7 @@
|
||||
"folders_feature_description": "Bläddra i mappvyn för foton och videoklipp i filsystemet",
|
||||
"forgot_pin_code_question": "Glömt din pinkod?",
|
||||
"forward": "Framåt",
|
||||
"gcast_enabled": "Google Cast",
|
||||
"gcast_enabled": "Google-Cast",
|
||||
"gcast_enabled_description": "Denna funktion läser in externa resurser från Google för att fungera.",
|
||||
"general": "Allmänt",
|
||||
"geolocation_instruction_location": "Klicka på en tillgång med GPS-koordinater för att använda dess plats, eller välj en plats direkt från kartan",
|
||||
@@ -1211,11 +1230,12 @@
|
||||
"link_to_oauth": "Länk till OAuth",
|
||||
"linked_oauth_account": "Länkat OAuth konto",
|
||||
"list": "Lista",
|
||||
"loading": "Laddar",
|
||||
"loading": "Inläsning",
|
||||
"loading_search_results_failed": "Det gick inte att läsa in sökresultat",
|
||||
"local": "Lokalt",
|
||||
"local_asset_cast_failed": "Det går inte att casta en tillgång som inte har laddats upp till servern",
|
||||
"local_assets": "Lokala tillgångar",
|
||||
"local_media_summary": "Sammanfattning av lokala medier",
|
||||
"local_network": "Lokalt nätverk",
|
||||
"local_network_sheet_info": "Appen kommer ansluta till servern via denna URL när det specificerade WiFi-nätverket används",
|
||||
"location_permission": "Plats-rättighet",
|
||||
@@ -1227,6 +1247,7 @@
|
||||
"location_picker_longitude_hint": "Ange din longitud här",
|
||||
"lock": "Lås",
|
||||
"locked_folder": "Låst Mapp",
|
||||
"log_detail_title": "Loggdetalj",
|
||||
"log_out": "Logga ut",
|
||||
"log_out_all_devices": "Logga ut alla enheter",
|
||||
"logged_in_as": "Inloggad som {user}",
|
||||
@@ -1257,6 +1278,7 @@
|
||||
"login_password_changed_success": "Uppdatering av lösenord lyckades",
|
||||
"logout_all_device_confirmation": "Är du säker på att du vill logga ut från alla enheter?",
|
||||
"logout_this_device_confirmation": "Är du säker på att du vill logga ut från denna enhet?",
|
||||
"logs": "Loggar",
|
||||
"longitude": "Longitud",
|
||||
"look": "Titta",
|
||||
"loop_videos": "Loopa videor",
|
||||
@@ -1299,6 +1321,7 @@
|
||||
"mark_as_read": "Markera som läst",
|
||||
"marked_all_as_read": "Markerade alla som lästa",
|
||||
"matches": "Matchar",
|
||||
"matching_assets": "Matchande tillgångar",
|
||||
"media_type": "Mediatyp",
|
||||
"memories": "Minnen",
|
||||
"memories_all_caught_up": "Du är ikapp",
|
||||
@@ -1339,6 +1362,7 @@
|
||||
"name_or_nickname": "Namn eller smeknamn",
|
||||
"network_requirement_photos_upload": "Använd mobildata för att säkerhetskopiera foton",
|
||||
"network_requirement_videos_upload": "Använd mobildata för att säkerhetskopiera videor",
|
||||
"network_requirements": "Nätverkskrav",
|
||||
"network_requirements_updated": "Nätverkskraven har ändrats, återställer säkerhetskopieringskön",
|
||||
"networking_settings": "Nätverk",
|
||||
"networking_subtitle": "Hantera inställningar för server-endpointen",
|
||||
@@ -1349,6 +1373,7 @@
|
||||
"new_person": "Ny person",
|
||||
"new_pin_code": "Ny PIN-kod",
|
||||
"new_pin_code_subtitle": "Det här är första gången du öppnar den låsta mappen. Skapa en PIN-kod för att säkert få åtkomst till den här sidan",
|
||||
"new_timeline": "Ny tidslinje",
|
||||
"new_user_created": "Ny användare skapad",
|
||||
"new_version_available": "NY VERSION TILLGÄNGLIG",
|
||||
"newest_first": "Nyast först",
|
||||
@@ -1362,20 +1387,25 @@
|
||||
"no_assets_message": "KLICKA FÖR ATT LADDA UPP DIN FÖRSTA BILD",
|
||||
"no_assets_to_show": "Inga objekt att visa",
|
||||
"no_cast_devices_found": "Inga Cast-enheter hittades",
|
||||
"no_checksum_local": "Ingen kontrollsumma tillgänglig - kan inte hämta lokala tillgångar",
|
||||
"no_checksum_remote": "Ingen kontrollsumma tillgänglig - kan inte hämta fjärrtillgång",
|
||||
"no_duplicates_found": "Inga dubbletter hittades.",
|
||||
"no_exif_info_available": "EXIF-information ej tillgänglig",
|
||||
"no_explore_results_message": "Ladda upp fler bilder för att utforska din samling.",
|
||||
"no_favorites_message": "Lägg till favoriter för att snabbt hitta dina bästa bilder och videor",
|
||||
"no_libraries_message": "Skapa ett externt bibliotek för att se dina bilder och videor",
|
||||
"no_local_assets_found": "Inga lokala tillgångar hittades med denna kontrollsumma",
|
||||
"no_locked_photos_message": "Foton och videor i den låsta mappen är dolda och visas inte när du bläddrar eller söker i ditt bibliotek.",
|
||||
"no_name": "Inget namn",
|
||||
"no_notifications": "Inga aviseringar",
|
||||
"no_people_found": "Inga matchande personer hittade",
|
||||
"no_places": "Inga platser",
|
||||
"no_remote_assets_found": "Inga fjärrtillgångar hittades med denna kontrollsumma",
|
||||
"no_results": "Inga resultat",
|
||||
"no_results_description": "Pröva en synonym eller ett annat mer allmänt sökord",
|
||||
"no_shared_albums_message": "Skapa ett album för att dela bilder och videor med andra personer",
|
||||
"no_uploads_in_progress": "Inga uppladdningar pågår",
|
||||
"not_available": "N/A",
|
||||
"not_in_any_album": "Inte i något album",
|
||||
"not_selected": "Ej vald",
|
||||
"note_apply_storage_label_to_previously_uploaded assets": "Obs: Om du vill använda lagringsetiketten på tidigare uppladdade tillgångar kör du",
|
||||
@@ -1497,6 +1527,7 @@
|
||||
"port": "Port",
|
||||
"preferences_settings_subtitle": "Hantera appens inställningar",
|
||||
"preferences_settings_title": "Inställningar",
|
||||
"preparing": "Förbereder",
|
||||
"preset": "Förinställt värde",
|
||||
"preview": "Förhandsvisning",
|
||||
"previous": "Föregående",
|
||||
@@ -1520,7 +1551,7 @@
|
||||
"profile_picture_set": "Profilbild vald.",
|
||||
"public_album": "Publikt album",
|
||||
"public_share": "Offentlig delning",
|
||||
"purchase_account_info": "Supporter",
|
||||
"purchase_account_info": "Anhängare",
|
||||
"purchase_activated_subtitle": "Tack för att du stödjer Immich och open source-mjukvara",
|
||||
"purchase_activated_time": "Aktiverad {date}",
|
||||
"purchase_activated_title": "Aktiveringan av din nyckel lyckades",
|
||||
@@ -1562,6 +1593,7 @@
|
||||
"read_changelog": "Läs ändringslogg",
|
||||
"readonly_mode_disabled": "Skrivskyddat läge inaktiverat",
|
||||
"readonly_mode_enabled": "Skrivskyddat läge aktiverat",
|
||||
"ready_for_upload": "Redo för uppladdning",
|
||||
"reassign": "Omfördela",
|
||||
"reassigned_assets_to_existing_person": "Tilldelade om {count, plural, one {# objekt} other {# objekt}} till {name, select, null {an existing person} other {{name}}}",
|
||||
"reassigned_assets_to_new_person": "Tilldelade om {count, plural, one {# objekt} other {# objekt}} till en ny persson",
|
||||
@@ -1586,6 +1618,7 @@
|
||||
"regenerating_thumbnails": "Uppdaterar miniatyrer",
|
||||
"remote": "Fjärrr",
|
||||
"remote_assets": "Fjärrtillgångar",
|
||||
"remote_media_summary": "Sammanfattning av fjärrmedia",
|
||||
"remove": "Ta bort",
|
||||
"remove_assets_album_confirmation": "Är du säker på att du vill ta bort {count, plural, one {# asset} other {# assets}} från albumet?",
|
||||
"remove_assets_shared_link_confirmation": "Är du säker på att du vill ta bort {count, plural, one {# asset} other {# assets}} från denna delade länk?",
|
||||
@@ -1861,6 +1894,7 @@
|
||||
"show_slideshow_transition": "Visa bildspelsövergång",
|
||||
"show_supporter_badge": "Supporteremblem",
|
||||
"show_supporter_badge_description": "Visa supporteremblem",
|
||||
"show_text_search_menu": "Visa textsökningsmeny",
|
||||
"shuffle": "Blanda",
|
||||
"sidebar": "Sidopanel",
|
||||
"sidebar_display_description": "Visa en länk till vyn i sidofältet",
|
||||
@@ -1891,6 +1925,7 @@
|
||||
"stacktrace": "Stapelspårning",
|
||||
"start": "Starta",
|
||||
"start_date": "Startdatum",
|
||||
"start_date_before_end_date": "Startdatumet måste vara före slutdatumet",
|
||||
"state": "Stat",
|
||||
"status": "Status",
|
||||
"stop_casting": "Sluta casta",
|
||||
@@ -1907,7 +1942,7 @@
|
||||
"suggestions": "Förslag",
|
||||
"sunrise_on_the_beach": "Soluppgång på stranden",
|
||||
"support": "Support",
|
||||
"support_and_feedback": "Support & Feedback",
|
||||
"support_and_feedback": "Support och Feedback",
|
||||
"support_third_party_description": "Din Immich-installation paketerades av en tredje part. Problem som du upplever kan orsakas av det paketet, så vänligen ta upp problem med dem i första hand med hjälp av länkarna nedan.",
|
||||
"swap_merge_direction": "Byt sammanfogningsriktning",
|
||||
"sync": "Synka",
|
||||
@@ -2093,5 +2128,6 @@
|
||||
"yes": "Ja",
|
||||
"you_dont_have_any_shared_links": "Du har inga delade länkar",
|
||||
"your_wifi_name": "Ditt Wi-Fi-namn",
|
||||
"zoom_image": "Zooma bild"
|
||||
"zoom_image": "Zooma bild",
|
||||
"zoom_to_bounds": "Zooma till gränser"
|
||||
}
|
||||
|
||||
24
i18n/ta.json
24
i18n/ta.json
@@ -537,9 +537,9 @@
|
||||
"autoplay_slideshow": "ஆட்டோபிளே ச்லைடுசோ",
|
||||
"back": "பின்",
|
||||
"back_close_deselect": "பின், மூடு அல்லது தேர்வுநீக்கம்",
|
||||
"background_backup_running_error": "பின்னணி காப்புப்பிரதி தற்போது இயங்குகிறது, கையேடு காப்புப்பிரதியைத் தொடங்க முடியாது",
|
||||
"background_backup_running_error": "பின்னணி காப்புப்பிரதி தற்போது இயங்குகிறது, கைமுறை காப்புப்பிரதியைத் தொடங்க முடியாது",
|
||||
"background_location_permission": "பின்னணி இருப்பிட இசைவு",
|
||||
"background_location_permission_content": "பின்னணியில் இயங்கும் போது நெட்வொர்க்குகளை மாற்ற, இம்மிச் * எப்போதும் * துல்லியமான இருப்பிட அணுகலைக் கொண்டிருக்க வேண்டும், எனவே பயன்பாடு வைஃபை நெட்வொர்க்கின் பெயரைப் படிக்க முடியும்",
|
||||
"background_location_permission_content": "பின்னணியில் இயங்கும் போது நெட்வொர்க்குகளை மாற்ற, இம்மிச் *எப்போதும்* துல்லியமான இருப்பிட அணுகலைக் கொண்டிருக்க வேண்டும், எனவே பயன்பாடு வைஃபை நெட்வொர்க்கின் பெயரைப் படிக்க முடியும்",
|
||||
"background_options": "பின்னணி விருப்பங்கள்",
|
||||
"backup": "காப்புப்பிரதி",
|
||||
"backup_album_selection_page_albums_device": "சாதனத்தில் ஆல்பங்கள் ({count})",
|
||||
@@ -1527,23 +1527,24 @@
|
||||
"port": "துறைமுகம்",
|
||||
"preferences_settings_subtitle": "பயன்பாட்டின் விருப்பங்களை நிர்வகிக்கவும்",
|
||||
"preferences_settings_title": "விருப்பத்தேர்வுகள்",
|
||||
"preparing": "தயாராகிறது",
|
||||
"preset": "முன்னமைவு",
|
||||
"preview": "முன்னோட்டம்",
|
||||
"previous": "முந்தைய",
|
||||
"previous_memory": "முந்தைய நினைவகம்",
|
||||
"previous_or_next_day": "நாள் முன்னோக்கி/பின்புறம்",
|
||||
"previous_or_next_month": "மாதம் முன்னோக்கி/பின்",
|
||||
"previous_or_next_photo": "புகைப்படம் முன்னோக்கி/பின்",
|
||||
"previous_or_next_year": "ஆண்டு முன்னோக்கி/பின்புறம்",
|
||||
"previous_or_next_day": "நாள் முன்னோக்கி/பின்னோக்கி",
|
||||
"previous_or_next_month": "மாதம் முன்னோக்கி/பின்னோக்கி",
|
||||
"previous_or_next_photo": "புகைப்படம் முன்னோக்கி/பின்னோக்கி",
|
||||
"previous_or_next_year": "ஆண்டு முன்னோக்கி/பின்னோக்கி",
|
||||
"primary": "முதன்மை",
|
||||
"privacy": "தனியுரிமை",
|
||||
"profile": "சுயவிவரம்",
|
||||
"profile_drawer_app_logs": "பதிவுகள்",
|
||||
"profile_drawer_client_out_of_date_major": "மொபைல் பயன்பாடு காலாவதியானது. அண்மைக் கால முக்கிய பதிப்பிற்கு புதுப்பிக்கவும்.",
|
||||
"profile_drawer_client_out_of_date_minor": "மொபைல் பயன்பாடு காலாவதியானது. அண்மைக் கால சிறிய பதிப்பிற்கு புதுப்பிக்கவும்.",
|
||||
"profile_drawer_client_out_of_date_major": "மொபைல் பயன்பாடு காலாவதியானது. தயவு செய்து சமீபத்திய முக்கிய பதிப்பிற்கு புதுப்பிக்கவும்.",
|
||||
"profile_drawer_client_out_of_date_minor": "மொபைல் பயன்பாடு காலாவதியானது. தயவு செய்து சமீபத்திய சிறிய பதிப்பிற்கு புதுப்பிக்கவும்.",
|
||||
"profile_drawer_client_server_up_to_date": "வாங்கி மற்றும் சேவையகம் புதுப்பித்த நிலையில் உள்ளன",
|
||||
"profile_drawer_github": "கிரப்",
|
||||
"profile_drawer_readonly_mode": "படிக்க மட்டும் பயன்முறை இயக்கப்பட்டது. வெளியேற பயனர் அவதார் ஐகானை நீண்ட அழுத்தவும்.",
|
||||
"profile_drawer_github": "கிட்ஹப்",
|
||||
"profile_drawer_readonly_mode": "படிக்க மட்டும் பயன்முறை இயக்கப்பட்டது. வெளியேற பயனர் அவதார் ஐகானை நீண்ட நேரம் அழுத்தவும்.",
|
||||
"profile_drawer_server_out_of_date_major": "சேவையகம் காலாவதியானது. அண்மைக் கால முக்கிய பதிப்பிற்கு புதுப்பிக்கவும்.",
|
||||
"profile_drawer_server_out_of_date_minor": "சேவையகம் காலாவதியானது. அண்மைக் கால சிறிய பதிப்பிற்கு புதுப்பிக்கவும்.",
|
||||
"profile_image_of_user": "{பயனரின் சுயவிவரப் படம்",
|
||||
@@ -1592,7 +1593,8 @@
|
||||
"read_changelog": "சேஞ்ச்லாக் படிக்கவும்",
|
||||
"readonly_mode_disabled": "படிக்க மட்டும் பயன்முறை முடக்கப்பட்டுள்ளது",
|
||||
"readonly_mode_enabled": "படிக்க மட்டும் பயன்முறை இயக்கப்பட்டது",
|
||||
"reassign": "மீண்டும் இணைக்கவும்",
|
||||
"ready_for_upload": "பதிவேற்றத் தயார்",
|
||||
"reassign": "மீண்டும் ஒதுக்கு",
|
||||
"reassigned_assets_to_existing_person": "மீண்டும் ஒதுக்கப்பட்ட {எண்ணிக்கை, பன்மை, ஒன்று {# சொத்து} பிற {# சொத்துக்கள்}} பெறுநர் {பெயருக்கு, தேர்ந்தெடுக்கவும், சுழிய {an existing person} பிற {{name}}}",
|
||||
"reassigned_assets_to_new_person": "மீண்டும் ஒதுக்கப்பட்ட {எண்ணிக்கை, பன்மை, ஒன்று {# சொத்து} பிற {# சொத்துக்கள்}} ஒரு புதிய நபருக்கு",
|
||||
"reassing_hint": "தேர்ந்தெடுக்கப்பட்ட சொத்துக்களை ஏற்கனவே இருக்கும் நபருக்கு ஒதுக்குங்கள்",
|
||||
|
||||
24
i18n/tr.json
24
i18n/tr.json
@@ -11,14 +11,14 @@
|
||||
"activity_changed": "Etkinlik {enabled, select, true {etkin} other {devre dışı}}",
|
||||
"add": "Ekle",
|
||||
"add_a_description": "Açıklama ekle",
|
||||
"add_a_location": "Konum ekle",
|
||||
"add_a_location": "Bir konum ekle",
|
||||
"add_a_name": "İsim ekle",
|
||||
"add_a_title": "Başlık ekle",
|
||||
"add_birthday": "Doğum günü ekle",
|
||||
"add_endpoint": "Uç nokta ekle",
|
||||
"add_exclusion_pattern": "Hariç tutma deseni ekle",
|
||||
"add_import_path": "İçe aktarma yolu ekle",
|
||||
"add_location": "Lokasyon ekle",
|
||||
"add_location": "Konum ekle",
|
||||
"add_more_users": "Daha fazla kullanıcı ekle",
|
||||
"add_partner": "Partner ekle",
|
||||
"add_path": "Yol ekle",
|
||||
@@ -91,7 +91,7 @@
|
||||
"image_prefer_wide_gamut_setting_description": "Önizleme görseli için P3 renk paletini tercih et. Bu, geniş renk paletli fotoğraflarda renk canlılığını daha iyi korur, fakat fotoğraflar eski tarayıcılarda ve eski cihazlarda daha farklı görünebilir. sRGB fotoğraflar renk paletini korumak için sRGB olarak tutulur.",
|
||||
"image_preview_description": "Orta boyutlu görüntü, meta verisi çıkarılmış, tekil bir öğe görüntülenirken ve makine öğrenimi için kullanılır",
|
||||
"image_preview_quality_description": "Ön izleme kalitesi 1-100 arasıdır. Yüksek değerler daha iyi kalite sağlar, ancak daha büyük dosyalar üretir ve uygulama yanıt verme hızını düşürebilir. Düşük bir değer belirlemek, makine öğrenimi kalitesini etkileyebilir.",
|
||||
"image_preview_title": "Ön izleme Ayarları",
|
||||
"image_preview_title": "Ön İzleme Ayarları",
|
||||
"image_quality": "Kalite",
|
||||
"image_resolution": "Çözünürlük",
|
||||
"image_resolution_description": "Daha yüksek çözünürlükle, daha fazla detayı koruyabilir ancak kodlanması daha uzun sürer, daha büyük dosya boyutlarına sahip olur ve uygulamanın yanıt verme hızını azaltabilir.",
|
||||
@@ -105,10 +105,10 @@
|
||||
"job_not_concurrency_safe": "Bu işlem eşzamanlama için uygun değil.",
|
||||
"job_settings": "Görev Ayarları",
|
||||
"job_settings_description": "Aynı anda çalışacak görevleri yönet",
|
||||
"job_status": "Görev Statüleri",
|
||||
"job_status": "Görev Durumu",
|
||||
"jobs_delayed": "{jobCount, plural, other {# gecikmeli}}",
|
||||
"jobs_failed": "{jobCount, plural, other {# Başarısız}}",
|
||||
"library_created": "{library} kütüphanesi oluşturuldu",
|
||||
"library_created": "Oluşturulan kütüphane : {library}",
|
||||
"library_deleted": "Kütüphane silindi",
|
||||
"library_import_path_description": "Belirtilecek klasörü içe aktarın. Bu klasör, alt klasörler dahil olmak üzere, görüntüler ve videolar için taranacaktır.",
|
||||
"library_scanning": "Periyodik Tarama",
|
||||
@@ -120,7 +120,7 @@
|
||||
"library_watching_enable_description": "Harici kütüphanelerdeki dosya değişikliklerini izle",
|
||||
"library_watching_settings": "Kütüphane izleme (DENEYSEL)",
|
||||
"library_watching_settings_description": "Değişen dosyalar için otomatik olarak izle",
|
||||
"logging_enable_description": "Günlüğü aktifleştir",
|
||||
"logging_enable_description": "Günlüğü etkinleştir",
|
||||
"logging_level_description": "Etkinleştirildiğinde hangi günlük seviyesi kullanılır.",
|
||||
"logging_settings": "Günlük Tutma",
|
||||
"machine_learning_availability_checks": "Kullanılabilirlik kontrolleri",
|
||||
@@ -390,7 +390,7 @@
|
||||
"video_conversion_job": "Videoları dönüştür",
|
||||
"video_conversion_job_description": "Tarayıcılar ve cihazlarla daha geniş uyumluluk için videoları dönüştür"
|
||||
},
|
||||
"admin_email": "Yönetici Emaili",
|
||||
"admin_email": "Yönetici E-postası",
|
||||
"admin_password": "Yönetici Şifresi",
|
||||
"administration": "Yönetim",
|
||||
"advanced": "Gelişmiş",
|
||||
@@ -1521,12 +1521,13 @@
|
||||
"places_count": "{count, plural, one {{count, number} yer} other {{count, number} yer}}",
|
||||
"play": "Oynat",
|
||||
"play_memories": "Anıları oynat",
|
||||
"play_motion_photo": "Hareketli fotoğrafı oynat",
|
||||
"play_motion_photo": "Hareketli Fotoğrafı Oynat",
|
||||
"play_or_pause_video": "Videoyu oynat ya da durdur",
|
||||
"please_auth_to_access": "Erişim için lütfen kimliğinizi doğrulayın",
|
||||
"port": "Port",
|
||||
"preferences_settings_subtitle": "Uygulama tercihlerini düzenle",
|
||||
"preferences_settings_title": "Tercihler",
|
||||
"preparing": "Hazırlanıyor",
|
||||
"preset": "Ön ayar",
|
||||
"preview": "Önizleme",
|
||||
"previous": "Önceki",
|
||||
@@ -1592,6 +1593,7 @@
|
||||
"read_changelog": "Değişiklik günlüğünü oku",
|
||||
"readonly_mode_disabled": "Salt okunur mod devre dışı",
|
||||
"readonly_mode_enabled": "Salt okunur mod etkin",
|
||||
"ready_for_upload": "Yüklemeye hazır",
|
||||
"reassign": "Yeniden ata",
|
||||
"reassigned_assets_to_existing_person": "{count, plural, one {# öğe} other {# öğeler}} {name, select, null {mevcut bir kişiye} other {{name}}} atandı",
|
||||
"reassigned_assets_to_new_person": "{count, plural, one {# öğe} other {# öğeler}} yeni bir kişiye atandı",
|
||||
@@ -2077,11 +2079,11 @@
|
||||
"user_role_set": "{user}, {role} olarak ayarlandı",
|
||||
"user_usage_detail": "Kullanıcı kullanım detayı",
|
||||
"user_usage_stats": "Hesap kullanım istatistikleri",
|
||||
"user_usage_stats_description": "hesap kullanım istatistiklerini göster",
|
||||
"user_usage_stats_description": "Hesap kullanım istatistiklerini göster",
|
||||
"username": "Kullanıcı adı",
|
||||
"users": "Kullanıcılar",
|
||||
"users_added_to_album_count": "Albüme {count, plural, one {# user} other {# users}} eklendi",
|
||||
"utilities": "Yardımcılar",
|
||||
"utilities": "Yardımcı Uygulamalar",
|
||||
"validate": "Doğrula",
|
||||
"validate_endpoint_error": "Lütfen geçerli bir URL girin",
|
||||
"variables": "Değişkenler",
|
||||
@@ -2091,7 +2093,7 @@
|
||||
"version_history": "Sürüm Geçmişi",
|
||||
"version_history_item": "{version}, {date} tarihinde kuruldu",
|
||||
"video": "Video",
|
||||
"video_hover_setting": "Üzerinde durulduğunda video önizlemesi oynat",
|
||||
"video_hover_setting": "Üzerinde durulduğunda video ön izlemesi oynat",
|
||||
"video_hover_setting_description": "Öğe üzerinde fareyle durulduğunda video küçük resmini oynatır. Bu özellik devre dışıyken, oynatma simgesine fareyle gidilerek oynatma başlatılabilir.",
|
||||
"videos": "Videolar",
|
||||
"videos_count": "{count, plural, one {# video} other {# video}}",
|
||||
|
||||
20
i18n/uk.json
20
i18n/uk.json
@@ -265,7 +265,7 @@
|
||||
"server_welcome_message": "Вітальне повідомлення",
|
||||
"server_welcome_message_description": "Повідомлення, яке відображається на сторінці входу.",
|
||||
"sidecar_job": "Метадані з sidecar-файлів",
|
||||
"sidecar_job_description": "Виявлення або синхронізація метаданих додатків з файлової системи",
|
||||
"sidecar_job_description": "Пошук або синхронізація сайдкар-метаданих з файлової системи",
|
||||
"slideshow_duration_description": "Кількість секунд для відображення кожного зображення",
|
||||
"smart_search_job_description": "Запуск машинного навчання для ресурсів для підтримки розумного пошуку",
|
||||
"storage_template_date_time_description": "Позначка часу створення ресурсу використовується для інформації про дату й час",
|
||||
@@ -347,7 +347,7 @@
|
||||
"transcoding_settings": "Налаштування транскодування відео",
|
||||
"transcoding_settings_description": "Керування які відео транскодувати і як їх обробляти",
|
||||
"transcoding_target_resolution": "Роздільна здатність",
|
||||
"transcoding_target_resolution_description": "Вищі роздільні здатності можуть зберігати більше деталей, але займають більше часу на кодування, мають більші розміри файлів і можуть зменшити швидкість роботи додатку.",
|
||||
"transcoding_target_resolution_description": "Вищі роздільні здатності можуть зберігати більше деталей, але займають більше часу на кодування, мають більші розміри файлів і можуть зменшити швидкість роботи застосунку.",
|
||||
"transcoding_temporal_aq": "Тимчасове AQ",
|
||||
"transcoding_temporal_aq_description": "Це застосовується лише до NVENC. Підвищує якість сцен з великою деталізацією та низьким рухом. Може бути несумісним зі старими пристроями.",
|
||||
"transcoding_threads": "Потоки",
|
||||
@@ -1071,7 +1071,7 @@
|
||||
"feature_photo_updated": "Вибране фото оновлено",
|
||||
"features": "Додаткові можливості",
|
||||
"features_in_development": "Функції в розробці",
|
||||
"features_setting_description": "Керування додатковими можливостями додатка",
|
||||
"features_setting_description": "Керування додатковими можливостями застосунку",
|
||||
"file_name": "Ім'я файлу",
|
||||
"file_name_or_extension": "Ім'я файлу або розширення",
|
||||
"filename": "Ім'я файлу",
|
||||
@@ -1137,7 +1137,7 @@
|
||||
"home_page_delete_remote_err_local": "Локальні елемент(и) вже в процесі видалення з сервера, пропущено",
|
||||
"home_page_favorite_err_local": "Поки що не можна додати до улюблених локальні елементи, пропущено",
|
||||
"home_page_favorite_err_partner": "Поки що не можна додати до улюблених елементи партнера, пропущено",
|
||||
"home_page_first_time_notice": "Якщо ви користуєтеся додатком вперше, будь ласка, оберіть альбом для резервного копіювання, щоб на шкалі часу з’явилися фото та відео",
|
||||
"home_page_first_time_notice": "Якщо ви користуєтеся застосунком вперше, будь ласка, оберіть альбом для резервного копіювання, щоб на шкалі часу з’явилися фото та відео",
|
||||
"home_page_locked_error_local": "Не вдається перемістити локальні файли до особистої папки, пропускається",
|
||||
"home_page_locked_error_partner": "Не вдається перемістити партнерські файли до особистої папки, пропускається",
|
||||
"home_page_share_err_local": "Неможливо поділитися локальними елементами через посилання, пропущено",
|
||||
@@ -1499,7 +1499,7 @@
|
||||
"permission_onboarding_permission_denied": "Доступ заборонено. Для використання Immich надайте дозволи до \"Фото та відео\" в налаштуваннях.",
|
||||
"permission_onboarding_permission_granted": "Доступ надано! Все готово.",
|
||||
"permission_onboarding_permission_limited": "Доступ обмежено. Щоби дозволити Immich створювати резервні копії та керувати всією галереєю, надайте дозволи на фото й відео в налаштуваннях.",
|
||||
"permission_onboarding_request": "Додатку Immich потрібен дозвіл для перегляду ваших фото та відео.",
|
||||
"permission_onboarding_request": "Застосунку Immich потрібен дозвіл для перегляду ваших фото та відео.",
|
||||
"person": "Людина",
|
||||
"person_age_months": "{months, plural, one {# місяць} other {# місяці}}",
|
||||
"person_age_year_months": "1 year , {months, plural, one {# місяць} other {# місяці}}",
|
||||
@@ -1525,8 +1525,9 @@
|
||||
"play_or_pause_video": "Відтворення або призупинення відео",
|
||||
"please_auth_to_access": "Будь ласка, пройдіть автентифікацію",
|
||||
"port": "Порт",
|
||||
"preferences_settings_subtitle": "Керування налаштуваннями додатку",
|
||||
"preferences_settings_subtitle": "Керування налаштуваннями застосунку",
|
||||
"preferences_settings_title": "Параметри",
|
||||
"preparing": "Підготовка",
|
||||
"preset": "Передвстановлення",
|
||||
"preview": "Прев'ю",
|
||||
"previous": "Попереднє",
|
||||
@@ -1592,6 +1593,7 @@
|
||||
"read_changelog": "Прочитати зміни в оновленні",
|
||||
"readonly_mode_disabled": "Режим лише для читання вимкнено",
|
||||
"readonly_mode_enabled": "Режим лише для читання ввімкнено",
|
||||
"ready_for_upload": "Готово до завантаження",
|
||||
"reassign": "Перепризначити",
|
||||
"reassigned_assets_to_existing_person": "Перепризначено {count, plural, one {# ресурс} few {# ресурси} many {# ресурсів} other {# ресурсів}} {name, select, null {існуючій особі} other {{name}}}",
|
||||
"reassigned_assets_to_new_person": "Перепризначено {count, plural, one {# ресурс} other {# ресурси}} новій особі",
|
||||
@@ -1767,7 +1769,7 @@
|
||||
"send_message": "Надіслати повідомлення",
|
||||
"send_welcome_email": "Надішліть вітальний лист",
|
||||
"server_endpoint": "Кінцева точка сервера",
|
||||
"server_info_box_app_version": "Версія додатка",
|
||||
"server_info_box_app_version": "Версія застосунку",
|
||||
"server_info_box_server_url": "URL сервера",
|
||||
"server_offline": "Сервер офлайн",
|
||||
"server_online": "Сервер онлайн",
|
||||
@@ -1789,7 +1791,7 @@
|
||||
"setting_image_viewer_preview_title": "Завантажувати зображення попереднього перегляду",
|
||||
"setting_image_viewer_title": "Зображення",
|
||||
"setting_languages_apply": "Застосувати",
|
||||
"setting_languages_subtitle": "Змінити мову додатку",
|
||||
"setting_languages_subtitle": "Змінити мову застосунку",
|
||||
"setting_notifications_notify_failures_grace_period": "Повідомити про помилки фонового резервного копіювання: {duration}",
|
||||
"setting_notifications_notify_hours": "{count} годин",
|
||||
"setting_notifications_notify_immediately": "негайно",
|
||||
@@ -1975,7 +1977,7 @@
|
||||
"theme_setting_primary_color_title": "Основний колір",
|
||||
"theme_setting_system_primary_color_title": "Використовувати колір системи",
|
||||
"theme_setting_system_theme_switch": "Автоматично (як у системі)",
|
||||
"theme_setting_theme_subtitle": "Налаштування теми додатка",
|
||||
"theme_setting_theme_subtitle": "Налаштування теми застосунку",
|
||||
"theme_setting_three_stage_loading_subtitle": "Триетапне завантаження може підвищити продуктивність завантаження, але спричинить значно більше навантаження на мережу",
|
||||
"theme_setting_three_stage_loading_title": "Увімкнути триетапне завантаження",
|
||||
"they_will_be_merged_together": "Вони будуть об'єднані разом",
|
||||
|
||||
@@ -1527,6 +1527,7 @@
|
||||
"port": "端口",
|
||||
"preferences_settings_subtitle": "管理应用的偏好设置",
|
||||
"preferences_settings_title": "偏好设置",
|
||||
"preparing": "准备中",
|
||||
"preset": "预设",
|
||||
"preview": "预览",
|
||||
"previous": "上一个",
|
||||
@@ -1592,6 +1593,7 @@
|
||||
"read_changelog": "阅读更新日志",
|
||||
"readonly_mode_disabled": "只读模式已禁用",
|
||||
"readonly_mode_enabled": "只读模式已启用",
|
||||
"ready_for_upload": "准备上传",
|
||||
"reassign": "重新指派",
|
||||
"reassigned_assets_to_existing_person": "重新指派{count, plural, one {#个项目} other {#个项目}}到{name, select, null {已存在的人物} other {{name}}}",
|
||||
"reassigned_assets_to_new_person": "重新指派{count, plural, one {#个项目} other {#个项目}}到新的人物",
|
||||
|
||||
@@ -47,7 +47,7 @@ class BackgroundWorkerApiImpl(context: Context) : BackgroundWorkerFgHostApi {
|
||||
addContentUriTrigger(MediaStore.Video.Media.INTERNAL_CONTENT_URI, true)
|
||||
addContentUriTrigger(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, true)
|
||||
setTriggerContentUpdateDelay(settings.minimumDelaySeconds, TimeUnit.SECONDS)
|
||||
setTriggerContentMaxDelay(settings.minimumDelaySeconds * 10, TimeUnit.MINUTES)
|
||||
setTriggerContentMaxDelay(settings.minimumDelaySeconds * 10, TimeUnit.SECONDS)
|
||||
setRequiresCharging(settings.requiresCharging)
|
||||
}.build()
|
||||
|
||||
|
||||
@@ -5,45 +5,47 @@ import android.content.SharedPreferences
|
||||
import androidx.core.content.edit
|
||||
|
||||
class BackgroundWorkerPreferences(private val ctx: Context) {
|
||||
companion object {
|
||||
const val SHARED_PREF_NAME = "Immich::BackgroundWorker"
|
||||
private const val SHARED_PREF_MIN_DELAY_KEY = "BackgroundWorker::minDelaySeconds"
|
||||
private const val SHARED_PREF_REQUIRE_CHARGING_KEY = "BackgroundWorker::requireCharging"
|
||||
private const val SHARED_PREF_LOCK_KEY = "BackgroundWorker::isLocked"
|
||||
companion object {
|
||||
const val SHARED_PREF_NAME = "Immich::BackgroundWorker"
|
||||
private const val SHARED_PREF_MIN_DELAY_KEY = "BackgroundWorker::minDelaySeconds"
|
||||
private const val SHARED_PREF_REQUIRE_CHARGING_KEY = "BackgroundWorker::requireCharging"
|
||||
private const val SHARED_PREF_LOCK_KEY = "BackgroundWorker::isLocked"
|
||||
|
||||
private const val DEFAULT_MIN_DELAY_SECONDS = 30L
|
||||
private const val DEFAULT_REQUIRE_CHARGING = false
|
||||
}
|
||||
private const val DEFAULT_MIN_DELAY_SECONDS = 30L
|
||||
private const val DEFAULT_REQUIRE_CHARGING = false
|
||||
}
|
||||
|
||||
private val sp: SharedPreferences by lazy {
|
||||
ctx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE)
|
||||
}
|
||||
private val sp: SharedPreferences by lazy {
|
||||
ctx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE)
|
||||
}
|
||||
|
||||
fun updateSettings(settings: BackgroundWorkerSettings) {
|
||||
sp.edit {
|
||||
putLong(SHARED_PREF_MIN_DELAY_KEY, settings.minimumDelaySeconds)
|
||||
putBoolean(SHARED_PREF_REQUIRE_CHARGING_KEY, settings.requiresCharging)
|
||||
}
|
||||
fun updateSettings(settings: BackgroundWorkerSettings) {
|
||||
sp.edit {
|
||||
putLong(SHARED_PREF_MIN_DELAY_KEY, settings.minimumDelaySeconds)
|
||||
putBoolean(SHARED_PREF_REQUIRE_CHARGING_KEY, settings.requiresCharging)
|
||||
}
|
||||
}
|
||||
|
||||
fun getSettings(): BackgroundWorkerSettings {
|
||||
return BackgroundWorkerSettings(
|
||||
minimumDelaySeconds = sp.getLong(SHARED_PREF_MIN_DELAY_KEY, DEFAULT_MIN_DELAY_SECONDS),
|
||||
requiresCharging = sp.getBoolean(
|
||||
SHARED_PREF_REQUIRE_CHARGING_KEY,
|
||||
DEFAULT_REQUIRE_CHARGING
|
||||
),
|
||||
)
|
||||
}
|
||||
fun getSettings(): BackgroundWorkerSettings {
|
||||
val delaySeconds = sp.getLong(SHARED_PREF_MIN_DELAY_KEY, DEFAULT_MIN_DELAY_SECONDS)
|
||||
|
||||
fun setLocked(paused: Boolean) {
|
||||
sp.edit {
|
||||
putBoolean(SHARED_PREF_LOCK_KEY, paused)
|
||||
}
|
||||
}
|
||||
return BackgroundWorkerSettings(
|
||||
minimumDelaySeconds = if (delaySeconds >= 1000) delaySeconds / 1000 else delaySeconds,
|
||||
requiresCharging = sp.getBoolean(
|
||||
SHARED_PREF_REQUIRE_CHARGING_KEY,
|
||||
DEFAULT_REQUIRE_CHARGING
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
fun isLocked(): Boolean {
|
||||
return sp.getBoolean(SHARED_PREF_LOCK_KEY, true)
|
||||
fun setLocked(paused: Boolean) {
|
||||
sp.edit {
|
||||
putBoolean(SHARED_PREF_LOCK_KEY, paused)
|
||||
}
|
||||
}
|
||||
|
||||
fun isLocked(): Boolean {
|
||||
return sp.getBoolean(SHARED_PREF_LOCK_KEY, true)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
allprojects {
|
||||
ext.kotlin_version = '2.0.20'
|
||||
ext.kotlin_version = '2.2.20'
|
||||
|
||||
repositories {
|
||||
google()
|
||||
@@ -16,8 +16,8 @@ subprojects {
|
||||
if (project.plugins.hasPlugin("com.android.application") ||
|
||||
project.plugins.hasPlugin("com.android.library")) {
|
||||
project.android {
|
||||
compileSdkVersion 35
|
||||
buildToolsVersion "35.0.0"
|
||||
compileSdkVersion 36
|
||||
buildToolsVersion "36.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,8 +35,8 @@ platform :android do
|
||||
task: 'bundle',
|
||||
build_type: 'Release',
|
||||
properties: {
|
||||
"android.injected.version.code" => 3016,
|
||||
"android.injected.version.name" => "1.143.0",
|
||||
"android.injected.version.code" => 3017,
|
||||
"android.injected.version.name" => "1.143.1",
|
||||
}
|
||||
)
|
||||
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,6 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
||||
@@ -18,10 +18,10 @@ pluginManagement {
|
||||
|
||||
plugins {
|
||||
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
|
||||
id "com.android.application" version '8.7.2' apply false
|
||||
id "org.jetbrains.kotlin.android" version "2.0.20" apply false
|
||||
id "com.android.application" version '8.11.2' apply false
|
||||
id "org.jetbrains.kotlin.android" version "2.2.20" apply false
|
||||
id 'org.jetbrains.kotlin.plugin.serialization' version '1.9.22' apply false
|
||||
id 'com.google.devtools.ksp' version '2.0.20-1.0.24' apply false
|
||||
id 'com.google.devtools.ksp' version '2.2.20-2.0.3' apply false
|
||||
}
|
||||
|
||||
include ":app"
|
||||
|
||||
@@ -22,7 +22,7 @@ platform :ios do
|
||||
path: "./Runner.xcodeproj",
|
||||
)
|
||||
increment_version_number(
|
||||
version_number: "1.143.0"
|
||||
version_number: "1.143.1"
|
||||
)
|
||||
increment_build_number(
|
||||
build_number: latest_testflight_build_number + 1,
|
||||
|
||||
@@ -18,6 +18,7 @@ import 'package:immich_mobile/providers/infrastructure/db.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/platform.provider.dart';
|
||||
import 'package:immich_mobile/providers/infrastructure/readonly_mode.provider.dart';
|
||||
import 'package:immich_mobile/providers/websocket.provider.dart';
|
||||
import 'package:immich_mobile/services/app_settings.service.dart';
|
||||
import 'package:immich_mobile/services/background.service.dart';
|
||||
import 'package:immich_mobile/utils/migration.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
@@ -93,6 +94,10 @@ class _ChangeExperiencePageState extends ConsumerState<ChangeExperiencePage> {
|
||||
|
||||
await ref.read(driftProvider).reset();
|
||||
await Store.put(StoreKey.shouldResetSync, true);
|
||||
final delay = Store.get(StoreKey.backupTriggerDelay, AppSettingsEnum.backupTriggerDelay.defaultValue);
|
||||
if (delay >= 1000) {
|
||||
await Store.put(StoreKey.backupTriggerDelay, (delay / 1000).toInt());
|
||||
}
|
||||
final permission = await ref.read(galleryPermissionNotifier.notifier).requestGalleryPermission();
|
||||
|
||||
if (permission.isGranted) {
|
||||
|
||||
@@ -22,13 +22,14 @@ import 'package:immich_mobile/infrastructure/entities/store.entity.drift.dart';
|
||||
import 'package:immich_mobile/infrastructure/entities/user.entity.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/db.repository.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart';
|
||||
import 'package:immich_mobile/services/app_settings.service.dart';
|
||||
import 'package:immich_mobile/utils/debug_print.dart';
|
||||
import 'package:immich_mobile/utils/diff.dart';
|
||||
import 'package:isar/isar.dart';
|
||||
// ignore: import_rule_photo_manager
|
||||
import 'package:photo_manager/photo_manager.dart';
|
||||
|
||||
const int targetVersion = 16;
|
||||
const int targetVersion = 17;
|
||||
|
||||
Future<void> migrateDatabaseIfNeeded(Isar db, Drift drift) async {
|
||||
final hasVersion = Store.tryGet(StoreKey.version) != null;
|
||||
@@ -64,6 +65,13 @@ Future<void> migrateDatabaseIfNeeded(Isar db, Drift drift) async {
|
||||
|
||||
await handleBetaMigration(version, await _isNewInstallation(db, drift), SyncStreamRepository(drift));
|
||||
|
||||
if (version < 17 && Store.isBetaTimelineEnabled) {
|
||||
final delay = Store.get(StoreKey.backupTriggerDelay, AppSettingsEnum.backupTriggerDelay.defaultValue);
|
||||
if (delay >= 1000) {
|
||||
await Store.put(StoreKey.backupTriggerDelay, (delay / 1000).toInt());
|
||||
}
|
||||
}
|
||||
|
||||
if (targetVersion >= 12) {
|
||||
await Store.put(StoreKey.version, targetVersion);
|
||||
return;
|
||||
|
||||
2
mobile/openapi/README.md
generated
2
mobile/openapi/README.md
generated
@@ -3,7 +3,7 @@ Immich API
|
||||
|
||||
This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
|
||||
|
||||
- API version: 1.143.0
|
||||
- API version: 1.143.1
|
||||
- Generator version: 7.8.0
|
||||
- Build package: org.openapitools.codegen.languages.DartClientCodegen
|
||||
|
||||
|
||||
@@ -1208,8 +1208,8 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
path: "."
|
||||
ref: "5459d54"
|
||||
resolved-ref: "5459d54cdc1cf4d99e2193b310052f1ebb5dcf43"
|
||||
ref: "893894b"
|
||||
resolved-ref: "893894b98b832be8a995a8d5d4c2289d0ad2d246"
|
||||
url: "https://github.com/immich-app/native_video_player"
|
||||
source: git
|
||||
version: "1.3.1"
|
||||
|
||||
@@ -2,7 +2,7 @@ name: immich_mobile
|
||||
description: Immich - selfhosted backup media file on mobile phone
|
||||
|
||||
publish_to: 'none'
|
||||
version: 1.143.0+3016
|
||||
version: 1.143.1+3017
|
||||
|
||||
environment:
|
||||
sdk: '>=3.8.0 <4.0.0'
|
||||
@@ -77,7 +77,7 @@ dependencies:
|
||||
native_video_player:
|
||||
git:
|
||||
url: https://github.com/immich-app/native_video_player
|
||||
ref: '5459d54'
|
||||
ref: '893894b'
|
||||
openapi:
|
||||
path: openapi
|
||||
isar:
|
||||
|
||||
@@ -9858,7 +9858,7 @@
|
||||
"info": {
|
||||
"title": "Immich",
|
||||
"description": "Immich API",
|
||||
"version": "1.143.0",
|
||||
"version": "1.143.1",
|
||||
"contact": {}
|
||||
},
|
||||
"tags": [],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@immich/sdk",
|
||||
"version": "1.143.0",
|
||||
"version": "1.143.1",
|
||||
"description": "Auto-generated TypeScript SDK for the Immich API",
|
||||
"type": "module",
|
||||
"main": "./build/index.js",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/**
|
||||
* Immich
|
||||
* 1.143.0
|
||||
* 1.143.1
|
||||
* DO NOT MODIFY - This file has been generated using oazapfts.
|
||||
* See https://www.npmjs.com/package/oazapfts
|
||||
*/
|
||||
|
||||
869
pnpm-lock.yaml
generated
869
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
echo "Initializing Immich $IMMICH_SOURCE_REF"
|
||||
|
||||
lib_path="/usr/lib/$(arch)-linux-gnu/libmimalloc.so.2"
|
||||
lib_path="/usr/lib/$(arch)-linux-gnu/libmimalloc.so.3"
|
||||
if [ -f "$lib_path" ]; then
|
||||
export LD_PRELOAD="$lib_path"
|
||||
else
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "immich",
|
||||
"version": "1.143.0",
|
||||
"version": "1.143.1",
|
||||
"description": "",
|
||||
"author": "",
|
||||
"private": true,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "immich-web",
|
||||
"version": "1.143.0",
|
||||
"version": "1.143.1",
|
||||
"license": "GNU Affero General Public License version 3",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
|
||||
Reference in New Issue
Block a user