Compare commits
161 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7d6d51f4a5 | |||
| 5777693fad | |||
| b53cc4f9db | |||
| 9d57039274 | |||
| 12217bde8a | |||
| 37f802d1fe | |||
| df1710f4cc | |||
| 0fec34d316 | |||
| a0b8312ce4 | |||
| 8abe6909ca | |||
| 25cff6a748 | |||
| 243c98a02e | |||
| c9a6820de7 | |||
| 7d586492f3 | |||
| 807bdfeda9 | |||
| 1f25df308a | |||
| 2efa8b6960 | |||
| 7c9d2018d8 | |||
| ab90b01122 | |||
| d04ef319b8 | |||
| 368142e79b | |||
| 7d45ae68a6 | |||
| 98bedcf1e5 | |||
| 3377fa4640 | |||
| 641c05c6fe | |||
| e157a69d86 | |||
| 3d468c369c | |||
| 6c7679714b | |||
| 71d8567f18 | |||
| cc6253ba38 | |||
| 3ea107be5a | |||
| 4ed96cf1bd | |||
| 9323cc76d9 | |||
| da9b9c8c69 | |||
| 3c5c0ea68f | |||
| 2b988e1d5d | |||
| 8bcb2558b6 | |||
| b8785a5b93 | |||
| b00631d186 | |||
| de5a6b2c35 | |||
| 3beb8193ae | |||
| a2549c5bbd | |||
| 98a8be82e2 | |||
| 5c86e13239 | |||
| 10cb612fb1 | |||
| a9a769d902 | |||
| 846e35f57e | |||
| a3b9a0be3a | |||
| 2a3235f606 | |||
| 08b221c270 | |||
| 3102c3128f | |||
| 9ebed3c1b4 | |||
| 24d672a0ff | |||
| e9f99302c1 | |||
| 5cdf7671ed | |||
| 4dab50c10a | |||
| c416dd30e2 | |||
| 4ebc8870c2 | |||
| bf3f4e560d | |||
| 4be55428d2 | |||
| e9c9b7a3e2 | |||
| 2d2cfb0349 | |||
| 98998cccbc | |||
| 03d484aba2 | |||
| 88a2966666 | |||
| e408e8ca4a | |||
| 9bfb4dfd06 | |||
| 7dc7281e69 | |||
| 87fea29e32 | |||
| 2cf42e867c | |||
| 83a2669ff5 | |||
| 824409351e | |||
| d1ea6a897e | |||
| 5d3e8f17d1 | |||
| 78a5fe2d37 | |||
| 5ad4e5b614 | |||
| 000d0a08f4 | |||
| 917f1dea9f | |||
| e309647f1b | |||
| 57136e48fb | |||
| 8c315dfeb1 | |||
| 6e9749d6c4 | |||
| bf6f94f69f | |||
| 575154fdea | |||
| 857bbe3c3b | |||
| 0a0b255505 | |||
| 73b4b032b1 | |||
| 8234e44921 | |||
| 36197cca98 | |||
| 7a25d359b7 | |||
| 7cfb257c00 | |||
| b660240059 | |||
| 125ec1e85f | |||
| d31b35873f | |||
| e1c520b9e7 | |||
| 1361f18964 | |||
| 0f00f22212 | |||
| 0d543bbb0a | |||
| 86b3bdb90b | |||
| d47cdfb647 | |||
| ac5c17e8be | |||
| db67093391 | |||
| 318fba6c97 | |||
| 2d63fa80b4 | |||
| 1dc211a046 | |||
| f71f379529 | |||
| bee95b4977 | |||
| 9f8aaa57b6 | |||
| 2c1aab154a | |||
| 37cfac27b8 | |||
| 11b2e2a6e2 | |||
| d555ee737b | |||
| 12a6a7d95a | |||
| caac3bfc95 | |||
| 05630776a0 | |||
| 72c947cbaf | |||
| 53fb3a36f7 | |||
| 6b3892987a | |||
| 390919c439 | |||
| 09ab06ae6c | |||
| ad9373312b | |||
| bd71e087d4 | |||
| c90dcde7cc | |||
| d91cc3616b | |||
| 74cd3d66c6 | |||
| e6f9d9a31a | |||
| b71a86142b | |||
| 6e4ba6184b | |||
| b37162099e | |||
| dab74662e9 | |||
| 3d103046bc | |||
| 3ca62d9c55 | |||
| 2cd45ed1de | |||
| 263598f2cf | |||
| 1d1d71c779 | |||
| fd13265131 | |||
| 911c35a7f1 | |||
| adb265794c | |||
| 8c20d8cb3d | |||
| 43359f1d26 | |||
| dc9da7480c | |||
| 18647203cc | |||
| be8f2c01a2 | |||
| c8fffe4ade | |||
| 43fd7737f1 | |||
| fb4969d5d1 | |||
| 3cc4af5947 | |||
| ac39ebddc0 | |||
| 29bb1f7ef2 | |||
| b8d2f5b373 | |||
| 2139853dd9 | |||
| 527aa61a87 | |||
| 4261fc8a04 | |||
| 7dbddba757 | |||
| 16183791f3 | |||
| f38c7a4b7e | |||
| bb0b2a1f53 | |||
| 0048662182 | |||
| 7bd2455175 | |||
| 43e49f36b7 | |||
| e4b3479779 |
@@ -0,0 +1,24 @@
|
|||||||
|
title: "[Feature] <feature-name-goes-here>"
|
||||||
|
labels: ["feature"]
|
||||||
|
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Please use this form to request new feature for Immich
|
||||||
|
- type: textarea
|
||||||
|
id: feature
|
||||||
|
attributes:
|
||||||
|
label: The feature
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: checkboxes
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
attributes:
|
||||||
|
label: Platform
|
||||||
|
options:
|
||||||
|
- label: Server
|
||||||
|
- label: Web
|
||||||
|
- label: Mobile
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
---
|
|
||||||
name: Bug report
|
|
||||||
about: Create a report to help us improve
|
|
||||||
title: '[BUG] <title>'
|
|
||||||
labels: bug, need triage
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Note: Please search to see if an issue already exists for the bug you encountered.
|
|
||||||
-->
|
|
||||||
|
|
||||||
|
|
||||||
**Describe the bug**
|
|
||||||
A clear and concise description of what the bug is.
|
|
||||||
|
|
||||||
**Task List**
|
|
||||||
|
|
||||||
*Please complete the task list below. We need this information to help us reproduce the bug or point out problems in your setup. You are not providing enough info may delay our effort to help you.*
|
|
||||||
|
|
||||||
- [ ] I have read thoroughly the README setup and installation instructions.
|
|
||||||
- [ ] I have included my `docker-compose` file.
|
|
||||||
- [ ] I have included my redacted `.env` file.
|
|
||||||
- [ ] I have included information on my machine, and environment.
|
|
||||||
|
|
||||||
**To Reproduce**
|
|
||||||
Steps to reproduce the behavior:
|
|
||||||
1. Go to '...'
|
|
||||||
2. Click on '....'
|
|
||||||
3. Scroll down to '....'
|
|
||||||
4. See error
|
|
||||||
|
|
||||||
**Expected behavior**
|
|
||||||
A clear and concise description of what you expected to happen.
|
|
||||||
|
|
||||||
**Screenshots**
|
|
||||||
If applicable, add screenshots to help explain your problem.
|
|
||||||
|
|
||||||
**System**
|
|
||||||
- Phone OS [iOS, Android]: `<version>`
|
|
||||||
- Server Version: `<version>`
|
|
||||||
- Mobile App Version: `<version>`
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context about the problem here.
|
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
name: Report an issue with Immich
|
||||||
|
description: Report an issue with Immich
|
||||||
|
labels: ["bug", "need triage"]
|
||||||
|
title: "[BUG] <title>"
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
This issue form is for reporting bugs only!
|
||||||
|
|
||||||
|
If you have a feature or enhancement request, please use the [feature request][fr] section of our [GitHub Discussions][fr].
|
||||||
|
|
||||||
|
[fr]: https://github.com/immich-app/immich/discussions/new?category=feature-request
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
attributes:
|
||||||
|
label: The bug
|
||||||
|
description: >-
|
||||||
|
Describe the issue you are experiencing here, to communicate to the
|
||||||
|
maintainers. Tell us what you were trying to do and what happened.
|
||||||
|
|
||||||
|
Provide a clear and concise description of what the problem is.
|
||||||
|
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
## Environment
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
attributes:
|
||||||
|
label: The OS that Immich Server is running on
|
||||||
|
placeholder: Ubuntu 22.10, Debian, Arch...etc
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
id: version
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
attributes:
|
||||||
|
label: Version of Immich Server
|
||||||
|
placeholder: v1.0.0
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
attributes:
|
||||||
|
label: Version of Immich Mobile App
|
||||||
|
placeholder: v1.0.0
|
||||||
|
|
||||||
|
- type: checkboxes
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
attributes:
|
||||||
|
label: Platform with the issue
|
||||||
|
options:
|
||||||
|
- label: Server
|
||||||
|
- label: Web
|
||||||
|
- label: Mobile
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
attributes:
|
||||||
|
label: Your docker-compose.yml content
|
||||||
|
render: YAML
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
attributes:
|
||||||
|
label: Your .env content
|
||||||
|
description: Please provide the redacted .env content of your setup
|
||||||
|
render: Shell
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: repro
|
||||||
|
attributes:
|
||||||
|
label: Reproduction steps
|
||||||
|
description: "How do you trigger this bug? Please walk us through it step by step."
|
||||||
|
value: |
|
||||||
|
1.
|
||||||
|
2.
|
||||||
|
3.
|
||||||
|
...
|
||||||
|
render: bash
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Additional information
|
||||||
|
description: >
|
||||||
|
If you have any additional information for us, use the field below.
|
||||||
|
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: Thank you for submitting the form
|
||||||
@@ -1 +1,11 @@
|
|||||||
blank_issues_enabled: false
|
blank_issues_enabled: false
|
||||||
|
contact_links:
|
||||||
|
- name: I have a question or need support
|
||||||
|
url: https://discord.gg/D8JsnBEuKb
|
||||||
|
about: We use GitHub for tracking bugs, please check out our Discord channel for freaky fast support.
|
||||||
|
- name: Feature Request
|
||||||
|
url: https://github.com/immich-app/immich/discussions/new?category=feature-request
|
||||||
|
about: Please use our GitHub Discussion for making feature requests.
|
||||||
|
- name: I'm unsure where to go
|
||||||
|
url: https://discord.gg/D8JsnBEuKb
|
||||||
|
about: If you are unsure where to go, then joining our Discord is recommended; Just ask!
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
name: Feature Request
|
|
||||||
description: Request a feature that you would like for the app
|
|
||||||
title: "[Feature]: "
|
|
||||||
labels: ["feature", "need triage"]
|
|
||||||
assignees:
|
|
||||||
- ""
|
|
||||||
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Thanks for taking the time to fill out this feature request!
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: feature-detail
|
|
||||||
attributes:
|
|
||||||
label: Feature detail
|
|
||||||
placeholder: Describe the feature you would like to see for the app
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: dropdown
|
|
||||||
id: platform
|
|
||||||
attributes:
|
|
||||||
label: Platform
|
|
||||||
description: Choose the platform for the feature
|
|
||||||
options:
|
|
||||||
- Web
|
|
||||||
- Mobile App
|
|
||||||
- Server
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
@@ -3,17 +3,37 @@ name: Build Mobile
|
|||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
workflow_call:
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
ref:
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
pull_request:
|
pull_request:
|
||||||
push:
|
push:
|
||||||
branches: [main]
|
branches: [main]
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-sign-android:
|
build-sign-android:
|
||||||
name: Build and sign Android
|
name: Build and sign Android
|
||||||
|
# Skip when PR from a fork
|
||||||
|
if: ${{ !github.event.pull_request.head.repo.fork }}
|
||||||
runs-on: macos-12
|
runs-on: macos-12
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- name: Determine ref
|
||||||
|
id: get-ref
|
||||||
|
run: |
|
||||||
|
input_ref="${{ inputs.ref }}"
|
||||||
|
github_ref="${{ github.sha }}"
|
||||||
|
ref="${input_ref:-$github_ref}"
|
||||||
|
echo "ref=$ref" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
ref: ${{ steps.get-ref.outputs.ref }}
|
||||||
|
|
||||||
- uses: actions/setup-java@v3
|
- uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
@@ -25,7 +45,7 @@ jobs:
|
|||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
channel: "stable"
|
channel: "stable"
|
||||||
flutter-version: "3.3.10"
|
flutter-version: "3.7.3"
|
||||||
cache: true
|
cache: true
|
||||||
|
|
||||||
- name: Create the Keystore
|
- name: Create the Keystore
|
||||||
|
|||||||
@@ -4,24 +4,28 @@ on:
|
|||||||
types:
|
types:
|
||||||
- closed
|
- closed
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
cleanup:
|
cleanup:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code
|
- name: Check out code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Cleanup
|
- name: Cleanup
|
||||||
run: |
|
run: |
|
||||||
gh extension install actions/gh-actions-cache
|
gh extension install actions/gh-actions-cache
|
||||||
|
|
||||||
REPO=${{ github.repository }}
|
REPO=${{ github.repository }}
|
||||||
BRANCH=${{ github.ref }}
|
BRANCH=${{ github.ref }}
|
||||||
|
|
||||||
echo "Fetching list of cache keys"
|
echo "Fetching list of cache keys"
|
||||||
cacheKeysForPR=$(gh actions-cache list -R $REPO -B $BRANCH -L 100 | cut -f 1 )
|
cacheKeysForPR=$(gh actions-cache list -R $REPO -B $BRANCH -L 100 | cut -f 1 )
|
||||||
|
|
||||||
## Setting this to not fail the workflow while deleting cache keys.
|
## Setting this to not fail the workflow while deleting cache keys.
|
||||||
set +e
|
set +e
|
||||||
echo "Deleting caches..."
|
echo "Deleting caches..."
|
||||||
for cacheKey in $cacheKeysForPR
|
for cacheKey in $cacheKeysForPR
|
||||||
|
|||||||
@@ -20,6 +20,10 @@ on:
|
|||||||
schedule:
|
schedule:
|
||||||
- cron: '20 13 * * 1'
|
- cron: '20 13 * * 1'
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
analyze:
|
analyze:
|
||||||
name: Analyze
|
name: Analyze
|
||||||
@@ -48,11 +52,11 @@ jobs:
|
|||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
# By default, queries listed here will override any specified in a config file.
|
# By default, queries listed here will override any specified in a config file.
|
||||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||||
|
|
||||||
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
||||||
# queries: security-extended,security-and-quality
|
# queries: security-extended,security-and-quality
|
||||||
|
|
||||||
|
|
||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
@@ -61,7 +65,7 @@ jobs:
|
|||||||
# ℹ️ Command-line programs to run using the OS shell.
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||||
|
|
||||||
# If the Autobuild fails above, remove it and uncomment the following three lines.
|
# If the Autobuild fails above, remove it and uncomment the following three lines.
|
||||||
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
|
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
|
||||||
|
|
||||||
# - run: |
|
# - run: |
|
||||||
|
|||||||
@@ -5,6 +5,10 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches: ["main"]
|
branches: ["main"]
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
update-sdk-repos:
|
update-sdk-repos:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|||||||
@@ -9,6 +9,10 @@ on:
|
|||||||
release:
|
release:
|
||||||
types: [published]
|
types: [published]
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build_and_push:
|
build_and_push:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -19,13 +23,17 @@ jobs:
|
|||||||
include:
|
include:
|
||||||
- context: "server"
|
- context: "server"
|
||||||
image: "immich-server"
|
image: "immich-server"
|
||||||
|
platforms: "linux/arm/v7,linux/amd64,linux/arm64"
|
||||||
- context: "web"
|
- context: "web"
|
||||||
image: "immich-web"
|
image: "immich-web"
|
||||||
|
platforms: "linux/arm/v7,linux/amd64,linux/arm64"
|
||||||
- context: "machine-learning"
|
- context: "machine-learning"
|
||||||
image: "immich-machine-learning"
|
image: "immich-machine-learning"
|
||||||
|
platforms: "linux/amd64,linux/arm64"
|
||||||
- context: "nginx"
|
- context: "nginx"
|
||||||
image: "immich-proxy"
|
image: "immich-proxy"
|
||||||
|
platforms: "linux/arm/v7,linux/amd64,linux/arm64"
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
@@ -34,7 +42,7 @@ jobs:
|
|||||||
uses: docker/setup-qemu-action@v2.1.0
|
uses: docker/setup-qemu-action@v2.1.0
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v2.4.0
|
uses: docker/setup-buildx-action@v2.4.1
|
||||||
# Workaround to fix error:
|
# Workaround to fix error:
|
||||||
# failed to push: failed to copy: io: read/write on closed pipe
|
# failed to push: failed to copy: io: read/write on closed pipe
|
||||||
# See https://github.com/docker/build-push-action/issues/761
|
# See https://github.com/docker/build-push-action/issues/761
|
||||||
@@ -49,7 +57,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Login to GitHub Container Registry
|
- name: Login to GitHub Container Registry
|
||||||
uses: docker/login-action@v2
|
uses: docker/login-action@v2
|
||||||
# Skip when PR from a fork
|
# Skip when PR from a fork
|
||||||
@@ -92,9 +100,10 @@ jobs:
|
|||||||
uses: docker/build-push-action@v4.0.0
|
uses: docker/build-push-action@v4.0.0
|
||||||
with:
|
with:
|
||||||
context: ${{ matrix.context }}
|
context: ${{ matrix.context }}
|
||||||
platforms: linux/arm/v7,linux/amd64,linux/arm64
|
platforms: ${{ matrix.platforms }}
|
||||||
# Skip pushing when PR from a fork
|
# Skip pushing when PR from a fork
|
||||||
push: ${{ !github.event.pull_request.head.repo.fork }}
|
push: ${{ !github.event.pull_request.head.repo.fork }}
|
||||||
cache-from: type=registry,ref=ghcr.io/${{ github.repository_owner }}/immich-build-cache:${{matrix.image}}
|
cache-from: type=registry,ref=ghcr.io/${{ github.repository_owner }}/immich-build-cache:${{matrix.image}}
|
||||||
cache-to: ${{ steps.cache-target.outputs.cache-to }}
|
cache-to: ${{ steps.cache-target.outputs.cache-to }}
|
||||||
tags: ${{ steps.metadata.outputs.tags }}
|
tags: ${{ steps.metadata.outputs.tags }}
|
||||||
|
labels: ${{ steps.metadata.outputs.labels }}
|
||||||
|
|||||||
@@ -7,6 +7,10 @@ on:
|
|||||||
- cron: "0 23 * * *"
|
- cron: "0 23 * * *"
|
||||||
workflow_dispatch: # Allow for running this manually.
|
workflow_dispatch: # Allow for running this manually.
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
j1:
|
j1:
|
||||||
name: github-repo-stats
|
name: github-repo-stats
|
||||||
|
|||||||
@@ -17,14 +17,16 @@ on:
|
|||||||
required: false
|
required: false
|
||||||
type: boolean
|
type: boolean
|
||||||
|
|
||||||
jobs:
|
concurrency:
|
||||||
build_mobile:
|
group: ${{ github.workflow }}-${{ github.ref }}-root
|
||||||
uses: ./.github/workflows/build-mobile.yml
|
cancel-in-progress: true
|
||||||
secrets: inherit
|
|
||||||
|
|
||||||
tag_release:
|
jobs:
|
||||||
|
bump_version:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: build_mobile
|
|
||||||
|
outputs:
|
||||||
|
ref: ${{ steps.push-tag.outputs.commit_long_sha }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
@@ -36,6 +38,7 @@ jobs:
|
|||||||
run: misc/release/pump-version.sh -s "${{ inputs.serverBump }}" -m "${{ inputs.mobileBump }}"
|
run: misc/release/pump-version.sh -s "${{ inputs.serverBump }}" -m "${{ inputs.mobileBump }}"
|
||||||
|
|
||||||
- name: Commit and tag
|
- name: Commit and tag
|
||||||
|
id: push-tag
|
||||||
uses: EndBug/add-and-commit@v9
|
uses: EndBug/add-and-commit@v9
|
||||||
with:
|
with:
|
||||||
author_name: Immich Release Bot
|
author_name: Immich Release Bot
|
||||||
@@ -44,6 +47,23 @@ jobs:
|
|||||||
tag: ${{ env.IMMICH_VERSION }}
|
tag: ${{ env.IMMICH_VERSION }}
|
||||||
push: true
|
push: true
|
||||||
|
|
||||||
|
build_mobile:
|
||||||
|
uses: ./.github/workflows/build-mobile.yml
|
||||||
|
needs: bump_version
|
||||||
|
secrets: inherit
|
||||||
|
with:
|
||||||
|
ref: ${{ needs.bump_version.outputs.ref }}
|
||||||
|
|
||||||
|
prepare_release:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: build_mobile
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.ORG_RELEASE_TOKEN }}
|
||||||
|
|
||||||
- name: Download APK
|
- name: Download APK
|
||||||
uses: actions/download-artifact@v3
|
uses: actions/download-artifact@v3
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -5,6 +5,10 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches: [main]
|
branches: [main]
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
mobile-dart-analyze:
|
mobile-dart-analyze:
|
||||||
name: Run Dart Code Analysis
|
name: Run Dart Code Analysis
|
||||||
@@ -19,7 +23,7 @@ jobs:
|
|||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
channel: 'stable'
|
channel: 'stable'
|
||||||
flutter-version: '3.3.10'
|
flutter-version: '3.7.3'
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: dart pub get
|
run: dart pub get
|
||||||
|
|||||||
@@ -5,6 +5,10 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches: [main]
|
branches: [main]
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
e2e-tests:
|
e2e-tests:
|
||||||
name: Run end-to-end test suites
|
name: Run end-to-end test suites
|
||||||
@@ -49,11 +53,77 @@ jobs:
|
|||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
channel: 'stable'
|
channel: 'stable'
|
||||||
flutter-version: '3.3.10'
|
flutter-version: '3.7.3'
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
working-directory: ./mobile
|
working-directory: ./mobile
|
||||||
run: flutter test
|
run: flutter test
|
||||||
|
|
||||||
|
generated-api-up-to-date:
|
||||||
|
name: Check generated files are up-to-date
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Run API generation
|
||||||
|
run: cd server && npm ci && npm run api:generate
|
||||||
|
- name: Find file changes
|
||||||
|
uses: tj-actions/verify-changed-files@v13.1
|
||||||
|
id: verify-changed-files
|
||||||
|
with:
|
||||||
|
files: |
|
||||||
|
mobile/openapi
|
||||||
|
web/src/api/open-api
|
||||||
|
- name: Verify files have not changed
|
||||||
|
if: steps.verify-changed-files.outputs.files_changed == 'true'
|
||||||
|
run: |
|
||||||
|
echo "ERROR: Generated files not up to date!"
|
||||||
|
echo "Changed files: ${{ steps.verify-changed-files.outputs.changed_files }}"
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
generated-typeorm-migrations-up-to-date:
|
||||||
|
name: Check generated TypeORM migrations are up-to-date
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
image: postgres
|
||||||
|
env:
|
||||||
|
POSTGRES_PASSWORD: postgres
|
||||||
|
POSTGRES_USER: postgres
|
||||||
|
POSTGRES_DB: immich
|
||||||
|
options: >-
|
||||||
|
--health-cmd pg_isready
|
||||||
|
--health-interval 10s
|
||||||
|
--health-timeout 5s
|
||||||
|
--health-retries 5
|
||||||
|
ports:
|
||||||
|
- 5432:5432
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Install server dependencies
|
||||||
|
run: |
|
||||||
|
cd server
|
||||||
|
npm ci
|
||||||
|
- name: Run existing migrations
|
||||||
|
run: |
|
||||||
|
cd server
|
||||||
|
npm run typeorm:migrations:run
|
||||||
|
- name: Generate new migrations
|
||||||
|
continue-on-error: true
|
||||||
|
run: |
|
||||||
|
cd server
|
||||||
|
npm run typeorm:migrations:generate ./libs/infra/src/db/migrations/TestMigration
|
||||||
|
- name: Find file changes
|
||||||
|
uses: tj-actions/verify-changed-files@v13.1
|
||||||
|
id: verify-changed-files
|
||||||
|
with:
|
||||||
|
files: |
|
||||||
|
server/libs/infra/src/db/migrations/
|
||||||
|
- name: Verify files have not changed
|
||||||
|
if: steps.verify-changed-files.outputs.files_changed == 'true'
|
||||||
|
run: |
|
||||||
|
echo "ERROR: Generated files not up to date!"
|
||||||
|
echo "Changed files: ${{ steps.verify-changed-files.outputs.changed_files }}"
|
||||||
|
exit 1
|
||||||
|
|
||||||
mobile-integration-tests:
|
mobile-integration-tests:
|
||||||
name: Run mobile end-to-end integration tests
|
name: Run mobile end-to-end integration tests
|
||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
@@ -61,8 +131,9 @@ jobs:
|
|||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- uses: actions/setup-java@v3
|
- uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
distribution: 'adopt'
|
distribution: 'zulu'
|
||||||
java-version: '11'
|
java-version: '12.x'
|
||||||
|
cache: 'gradle'
|
||||||
- name: Cache android SDK
|
- name: Cache android SDK
|
||||||
uses: actions/cache@v3
|
uses: actions/cache@v3
|
||||||
id: android-sdk
|
id: android-sdk
|
||||||
@@ -71,24 +142,59 @@ jobs:
|
|||||||
path: |
|
path: |
|
||||||
/usr/local/lib/android/
|
/usr/local/lib/android/
|
||||||
~/.android
|
~/.android
|
||||||
|
- name: Cache Gradle
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
./mobile/build/
|
||||||
|
./mobile/android/.gradle/
|
||||||
|
key: ${{ runner.os }}-flutter-${{ hashFiles('**/*.gradle*', 'pubspec.lock') }}
|
||||||
- name: Setup Android SDK
|
- name: Setup Android SDK
|
||||||
if: steps.android-sdk.outputs.cache-hit != 'true'
|
if: steps.android-sdk.outputs.cache-hit != 'true'
|
||||||
uses: android-actions/setup-android@v2
|
uses: android-actions/setup-android@v2
|
||||||
- name: Setup Flutter SDK
|
- name: AVD cache
|
||||||
uses: subosito/flutter-action@v2
|
uses: actions/cache@v3
|
||||||
|
id: avd-cache
|
||||||
with:
|
with:
|
||||||
channel: 'stable'
|
path: |
|
||||||
flutter-version: '3.3.10'
|
~/.android/avd/*
|
||||||
- name: Run integration tests
|
~/.android/adb*
|
||||||
|
key: avd-29
|
||||||
|
- name: create AVD and generate snapshot for caching
|
||||||
|
if: steps.avd-cache.outputs.cache-hit != 'true'
|
||||||
uses: reactivecircus/android-emulator-runner@v2.27.0
|
uses: reactivecircus/android-emulator-runner@v2.27.0
|
||||||
with:
|
with:
|
||||||
working-directory: ./mobile
|
working-directory: ./mobile
|
||||||
|
cores: 2
|
||||||
api-level: 29
|
api-level: 29
|
||||||
arch: x86_64
|
arch: x86_64
|
||||||
profile: pixel
|
profile: pixel
|
||||||
target: default
|
target: default
|
||||||
emulator-options: -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim
|
force-avd-creation: false
|
||||||
disable-linux-hw-accel: false
|
emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
|
||||||
script: |
|
disable-animations: false
|
||||||
flutter pub get
|
script: echo "Generated AVD snapshot for caching."
|
||||||
flutter test integration_test
|
- name: Setup Flutter SDK
|
||||||
|
uses: subosito/flutter-action@v2
|
||||||
|
with:
|
||||||
|
channel: 'stable'
|
||||||
|
flutter-version: '3.7.3'
|
||||||
|
cache: true
|
||||||
|
- name: Run integration tests
|
||||||
|
uses: Wandalen/wretry.action@master
|
||||||
|
with:
|
||||||
|
action: reactivecircus/android-emulator-runner@v2.27.0
|
||||||
|
with: |
|
||||||
|
working-directory: ./mobile
|
||||||
|
cores: 2
|
||||||
|
api-level: 29
|
||||||
|
arch: x86_64
|
||||||
|
profile: pixel
|
||||||
|
target: default
|
||||||
|
force-avd-creation: false
|
||||||
|
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
|
||||||
|
disable-animations: true
|
||||||
|
script: |
|
||||||
|
flutter pub get
|
||||||
|
flutter test integration_test
|
||||||
|
attempt_limit: 3
|
||||||
|
|||||||
@@ -61,25 +61,25 @@ Spec: Free-tier Oracle VM - Amsterdam - 2.4Ghz quad-core ARM64 CPU, 24GB RAM
|
|||||||
|
|
||||||
# Features
|
# Features
|
||||||
|
|
||||||
| Features | Mobile | Web |
|
| Features | Mobile | Web |
|
||||||
| ------------------------------------------- | ------- | --- |
|
| ------------------------------------------- | ------ | --- |
|
||||||
| Upload and view videos and photos | Yes | Yes |
|
| Upload and view videos and photos | Yes | Yes |
|
||||||
| Auto backup when the app is opened | Yes | N/A |
|
| Auto backup when the app is opened | Yes | N/A |
|
||||||
| Selective album(s) for backup | Yes | N/A |
|
| Selective album(s) for backup | Yes | N/A |
|
||||||
| Download photos and videos to local device | Yes | Yes |
|
| Download photos and videos to local device | Yes | Yes |
|
||||||
| Multi-user support | Yes | Yes |
|
| Multi-user support | Yes | Yes |
|
||||||
| Album and Shared albums | Yes | Yes |
|
| Album and Shared albums | Yes | Yes |
|
||||||
| Scrubbable/draggable scrollbar | Yes | Yes |
|
| Scrubbable/draggable scrollbar | Yes | Yes |
|
||||||
| Support RAW (HEIC, HEIF, DNG, Apple ProRaw) | Yes | Yes |
|
| Support RAW (HEIC, HEIF, DNG, Apple ProRaw) | Yes | Yes |
|
||||||
| Metadata view (EXIF, map) | Yes | Yes |
|
| Metadata view (EXIF, map) | Yes | Yes |
|
||||||
| Search by metadata, objects and image tags | Yes | No |
|
| Search by metadata, objects and image tags | Yes | No |
|
||||||
| Administrative functions (user management) | N/A | Yes |
|
| Administrative functions (user management) | N/A | Yes |
|
||||||
| Background backup | Android | N/A |
|
| Background backup | Yes | N/A |
|
||||||
| Virtual scroll | Yes | Yes |
|
| Virtual scroll | Yes | Yes |
|
||||||
| OAuth support | Yes | Yes |
|
| OAuth support | Yes | Yes |
|
||||||
| LivePhoto backup and playback | iOS | Yes |
|
| LivePhoto backup and playback | iOS | Yes |
|
||||||
| User-defined storage structure | Yes | Yes |
|
| User-defined storage structure | Yes | Yes |
|
||||||
| Public Sharing | N/A | Yes |
|
| Public Sharing | N/A | Yes |
|
||||||
|
|
||||||
# Support the project
|
# Support the project
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ If you feel like this is the right cause and the app is something you are seeing
|
|||||||
## Donation
|
## Donation
|
||||||
|
|
||||||
- [Monthly donation](https://github.com/sponsors/alextran1502) via GitHub Sponsors
|
- [Monthly donation](https://github.com/sponsors/alextran1502) via GitHub Sponsors
|
||||||
- [One-time donation](https://github.com/sponsors/alextran1502?frequency=one-time&sponsor=alextran1502) via Github Sponsors
|
- [One-time donation](https://github.com/sponsors/alextran1502?frequency=one-time&sponsor=alextran1502) via GitHub Sponsors
|
||||||
- [Librepay](https://liberapay.com/alex.tran1502/)
|
- [Librepay](https://liberapay.com/alex.tran1502/)
|
||||||
- [buymeacoffee](https://www.buymeacoffee.com/altran1502)
|
- [buymeacoffee](https://www.buymeacoffee.com/altran1502)
|
||||||
- Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX
|
- Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX
|
||||||
|
|||||||
@@ -30,18 +30,20 @@ services:
|
|||||||
build:
|
build:
|
||||||
context: ../machine-learning
|
context: ../machine-learning
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
target: builder
|
command: python main.py
|
||||||
command: npm run start:dev
|
ports:
|
||||||
|
- 3003:3003
|
||||||
volumes:
|
volumes:
|
||||||
- ../machine-learning:/usr/src/app
|
- ../machine-learning/src:/usr/src/app
|
||||||
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
||||||
- /usr/src/app/node_modules
|
- model-cache:/cache
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
environment:
|
environment:
|
||||||
- NODE_ENV=development
|
- NODE_ENV=development
|
||||||
depends_on:
|
depends_on:
|
||||||
- database
|
- database
|
||||||
|
restart: always
|
||||||
|
|
||||||
immich-microservices:
|
immich-microservices:
|
||||||
container_name: immich_microservices
|
container_name: immich_microservices
|
||||||
@@ -126,3 +128,4 @@ services:
|
|||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
pgdata:
|
pgdata:
|
||||||
|
model-cache:
|
||||||
|
|||||||
@@ -1,95 +0,0 @@
|
|||||||
version: "3.8"
|
|
||||||
|
|
||||||
services:
|
|
||||||
immich-server:
|
|
||||||
container_name: immich_server
|
|
||||||
image: altran1502/immich-server:staging
|
|
||||||
entrypoint: ["/bin/sh", "./start-server.sh"]
|
|
||||||
volumes:
|
|
||||||
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
|
||||||
env_file:
|
|
||||||
- .env
|
|
||||||
environment:
|
|
||||||
- NODE_ENV=production
|
|
||||||
depends_on:
|
|
||||||
- redis
|
|
||||||
- database
|
|
||||||
restart: always
|
|
||||||
|
|
||||||
immich-microservices:
|
|
||||||
container_name: immich_microservices
|
|
||||||
image: altran1502/immich-server:staging
|
|
||||||
entrypoint: ["/bin/sh", "./start-microservices.sh"]
|
|
||||||
volumes:
|
|
||||||
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
|
||||||
env_file:
|
|
||||||
- .env
|
|
||||||
environment:
|
|
||||||
- NODE_ENV=production
|
|
||||||
depends_on:
|
|
||||||
- redis
|
|
||||||
- database
|
|
||||||
restart: always
|
|
||||||
|
|
||||||
immich-machine-learning:
|
|
||||||
container_name: immich_machine_learning
|
|
||||||
image: altran1502/immich-machine-learning:staging
|
|
||||||
entrypoint: ["/bin/sh", "./entrypoint.sh"]
|
|
||||||
volumes:
|
|
||||||
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
|
||||||
env_file:
|
|
||||||
- .env
|
|
||||||
environment:
|
|
||||||
- NODE_ENV=production
|
|
||||||
depends_on:
|
|
||||||
- database
|
|
||||||
restart: always
|
|
||||||
|
|
||||||
immich-web:
|
|
||||||
container_name: immich_web
|
|
||||||
image: altran1502/immich-web:staging
|
|
||||||
entrypoint: ["/bin/sh", "./entrypoint.sh"]
|
|
||||||
env_file:
|
|
||||||
- .env
|
|
||||||
environment:
|
|
||||||
# Rename these values for svelte public interface
|
|
||||||
- PUBLIC_IMMICH_SERVER_URL=${IMMICH_SERVER_URL}
|
|
||||||
- PUBLIC_IMMICH_API_URL_EXTERNAL=${IMMICH_API_URL_EXTERNAL}
|
|
||||||
restart: always
|
|
||||||
|
|
||||||
redis:
|
|
||||||
container_name: immich_redis
|
|
||||||
image: redis:6.2
|
|
||||||
restart: always
|
|
||||||
|
|
||||||
database:
|
|
||||||
container_name: immich_postgres
|
|
||||||
image: postgres:14
|
|
||||||
env_file:
|
|
||||||
- .env
|
|
||||||
environment:
|
|
||||||
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
|
||||||
POSTGRES_USER: ${DB_USERNAME}
|
|
||||||
POSTGRES_DB: ${DB_DATABASE_NAME}
|
|
||||||
PG_DATA: /var/lib/postgresql/data
|
|
||||||
volumes:
|
|
||||||
- pgdata:/var/lib/postgresql/data
|
|
||||||
restart: always
|
|
||||||
|
|
||||||
immich-proxy:
|
|
||||||
container_name: immich_proxy
|
|
||||||
image: altran1502/immich-proxy:staging
|
|
||||||
environment:
|
|
||||||
# Make sure these values get passed through from the env file
|
|
||||||
- IMMICH_SERVER_URL
|
|
||||||
- IMMICH_WEB_URL
|
|
||||||
ports:
|
|
||||||
- 2283:8080
|
|
||||||
logging:
|
|
||||||
driver: none
|
|
||||||
depends_on:
|
|
||||||
- immich-server
|
|
||||||
restart: always
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
pgdata:
|
|
||||||
@@ -4,7 +4,7 @@ services:
|
|||||||
immich-server:
|
immich-server:
|
||||||
container_name: immich_server
|
container_name: immich_server
|
||||||
image: altran1502/immich-server:release
|
image: altran1502/immich-server:release
|
||||||
entrypoint: ["/bin/sh", "./start-server.sh"]
|
entrypoint: [ "/bin/sh", "./start-server.sh" ]
|
||||||
volumes:
|
volumes:
|
||||||
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
||||||
env_file:
|
env_file:
|
||||||
@@ -19,7 +19,7 @@ services:
|
|||||||
immich-microservices:
|
immich-microservices:
|
||||||
container_name: immich_microservices
|
container_name: immich_microservices
|
||||||
image: altran1502/immich-server:release
|
image: altran1502/immich-server:release
|
||||||
entrypoint: ["/bin/sh", "./start-microservices.sh"]
|
entrypoint: [ "/bin/sh", "./start-microservices.sh" ]
|
||||||
volumes:
|
volumes:
|
||||||
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
||||||
env_file:
|
env_file:
|
||||||
@@ -34,21 +34,19 @@ services:
|
|||||||
immich-machine-learning:
|
immich-machine-learning:
|
||||||
container_name: immich_machine_learning
|
container_name: immich_machine_learning
|
||||||
image: altran1502/immich-machine-learning:release
|
image: altran1502/immich-machine-learning:release
|
||||||
entrypoint: ["/bin/sh", "./entrypoint.sh"]
|
|
||||||
volumes:
|
volumes:
|
||||||
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
||||||
|
- model-cache:/cache
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
environment:
|
environment:
|
||||||
- NODE_ENV=production
|
- NODE_ENV=production
|
||||||
depends_on:
|
|
||||||
- database
|
|
||||||
restart: always
|
restart: always
|
||||||
|
|
||||||
immich-web:
|
immich-web:
|
||||||
container_name: immich_web
|
container_name: immich_web
|
||||||
image: altran1502/immich-web:release
|
image: altran1502/immich-web:release
|
||||||
entrypoint: ["/bin/sh", "./entrypoint.sh"]
|
entrypoint: [ "/bin/sh", "./entrypoint.sh" ]
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
restart: always
|
restart: always
|
||||||
@@ -89,3 +87,4 @@ services:
|
|||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
pgdata:
|
pgdata:
|
||||||
|
model-cache:
|
||||||
|
|||||||
|
After Width: | Height: | Size: 111 KiB |
@@ -2,22 +2,8 @@
|
|||||||
|
|
||||||
Several Immich functionalities are implemented as jobs, which run in the background. To view the status of a job navigate to the Administration Screen, and then the `Jobs` page.
|
Several Immich functionalities are implemented as jobs, which run in the background. To view the status of a job navigate to the Administration Screen, and then the `Jobs` page.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## Generate Thumbnails
|
:::info
|
||||||
|
Storage Migration job can be run after changing the [Storage Template](/docs/administration/storage-template.mdx), in order to apply the change to the existing library.
|
||||||

|
:::
|
||||||
|
|
||||||
|
|
||||||
## Extract Exif
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Detect Objects
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Storage Migration
|
|
||||||
|
|
||||||
This job can be run after changing the [Storage Template](/docs/administration/storage-template.mdx), in order to apply the change to the existing library.
|
|
||||||
|
|
||||||

|
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ Immich is a full-stack [TypeScript](https://www.typescriptlang.org/) application
|
|||||||
- [Nest.js](https://nestjs.com/)
|
- [Nest.js](https://nestjs.com/)
|
||||||
- [TypeORM](https://typeorm.io/) for database management.
|
- [TypeORM](https://typeorm.io/) for database management.
|
||||||
- [Jest](https://jestjs.io/) for testing.
|
- [Jest](https://jestjs.io/) for testing.
|
||||||
|
- [Python](https://www.python.org/) for Machine Learning.
|
||||||
|
|
||||||
### Database
|
### Database
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 691 KiB After Width: | Height: | Size: 242 KiB |
@@ -4,33 +4,31 @@ A guide on how the foreground and background automatic backup works.
|
|||||||
|
|
||||||
<img src={require('./img/background-foreground-backup.png').default} width="50%" title="Foreground&Background Backup" />
|
<img src={require('./img/background-foreground-backup.png').default} width="50%" title="Foreground&Background Backup" />
|
||||||
|
|
||||||
On iOS, there is only one option for automatic backup
|
|
||||||
|
|
||||||
- [Automatic Backup](#automatic-backup)
|
|
||||||
- [Foreground backup](#foreground-backup)
|
|
||||||
|
|
||||||
On Android, there are two options for automatic backup
|
|
||||||
|
|
||||||
- [Automatic Backup](#automatic-backup)
|
|
||||||
- [Foreground backup](#foreground-backup)
|
|
||||||
- [Background backup](#background-backup)
|
|
||||||
|
|
||||||
## Foreground backup
|
## Foreground backup
|
||||||
|
|
||||||
If foreground backup is enabled: whenever the app is opened or resumed, it will check if any photos or videos in the selected album(s) have yet to be uploaded to the cloud (the remainder count). If there are any, they will be uploaded.
|
If foreground backup is enabled: whenever the app is opened or resumed, it will check if any photos or videos in the selected album(s) have yet to be uploaded to the cloud (the remainder count). If there are any, they will be uploaded.
|
||||||
|
|
||||||
## Background backup
|
## Background backup
|
||||||
|
|
||||||
Background backup is only available on Android thanks to the contribution effort of [@zoodyy](https://github.com/zoodyy).
|
Background backup is available thanks to the contribution effort of [@zoodyy](https://github.com/zoodyy) and [@martyfuhry](https://github.com/martyfuhry).
|
||||||
|
|
||||||
If background backup is enabled. The app will periodically check if there are any new photos or videos in the selected album(s) to be uploaded to the cloud. If there are, it will upload them to the cloud in the background.
|
If background backup is enabled. The app will periodically check if there are any new photos or videos in the selected album(s) to be uploaded to the cloud. If there are, it will upload them to the cloud in the background.
|
||||||
|
|
||||||
A native Android notification shows up when the background upload is in progress. You can further customize the notification by going to the app's settings.
|
|
||||||
|
|
||||||
:::info Note
|
:::info Note
|
||||||
|
|
||||||
|
#### General
|
||||||
- The app must be in the background for the backup worker to start running.
|
- The app must be in the background for the backup worker to start running.
|
||||||
- It is a well-known problem that some Android models are very strict with battery optimization settings, which can cause a problem with the background worker. Please visit [Don't kill my app](https://dontkillmyapp.com/) for a guide on disabling this setting on your phone.
|
|
||||||
- If you reopen the app and the first page you see is the backup page, the counts will not reflect the background uploaded result. You have to navigate out of the page and come back to see the updated counts.
|
- If you reopen the app and the first page you see is the backup page, the counts will not reflect the background uploaded result. You have to navigate out of the page and come back to see the updated counts.
|
||||||
|
|
||||||
|
#### Android
|
||||||
|
- It is a well-known problem that some Android models are very strict with battery optimization settings, which can cause a problem with the background worker. Please visit [Don't kill my app](https://dontkillmyapp.com/) for a guide on disabling this setting on your phone.
|
||||||
|
|
||||||
|
#### iOS
|
||||||
|
- You must enable **Background App Refresh** for the app to work in the background. You can enable it in the Settings app under General > Background App Refresh.
|
||||||
|
|
||||||
|
<div style={{textAlign: 'center'}}>
|
||||||
|
<img src={require('./img/background-app-refresh.png').default} width="30%" title="background-app-refresh" />
|
||||||
|
</div>
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|||||||
|
After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 16 KiB |
@@ -20,28 +20,3 @@ You can also use Podman to run the application. However, additional configuratio
|
|||||||
- **OS**: Preferred unix-based operating system (Ubuntu, Debian, MacOS, etc). Windows works too, with [Docker Desktop on Windows](https://docs.docker.com/desktop/install/windows-install/)
|
- **OS**: Preferred unix-based operating system (Ubuntu, Debian, MacOS, etc). Windows works too, with [Docker Desktop on Windows](https://docs.docker.com/desktop/install/windows-install/)
|
||||||
- **RAM**: At least 2GB, preferred 4GB.
|
- **RAM**: At least 2GB, preferred 4GB.
|
||||||
- **CPU**: At least 2 cores, preferred 4 cores.
|
- **CPU**: At least 2 cores, preferred 4 cores.
|
||||||
|
|
||||||
:::info Machine Learning on older CPU
|
|
||||||
|
|
||||||
The TensorFlow version used by Immich doesn't run on older CPU architectures. It requires a CPU with AVX and AVX2 instruction sets. If you encounter the error `illegal instruction core dump` check your CPU flags with the command below and make sure you see `avx` and `avx2`:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
grep -E 'avx2?' /proc/cpuinfo
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Promox
|
|
||||||
|
|
||||||
If you are running virtualization in Proxmox, the CPU type of the VM is probably configured incorrectly.
|
|
||||||
|
|
||||||
You need to change the CPU type from `kvm64` to `host` under VMs hardware tab.
|
|
||||||
|
|
||||||
`Hardware > Processors > Edit > Advanced > Type (dropdown menu) > host`
|
|
||||||
|
|
||||||
#### Other platforms
|
|
||||||
|
|
||||||
You can use the machine learning image that is built for Non-AVX CPU. The image is community maintained and can be found in the repository below
|
|
||||||
|
|
||||||
https://github.com/bertmelis/immich-machine-learning-no-avx
|
|
||||||
|
|
||||||
Otherwise, you can safely remove the `immich-machine-learning` service if you do not intend to use Immich's object detection features. Simply remove or comment out the declaration of the service in your compose file.
|
|
||||||
:::
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ Immich can easily be installed and updated on Unraid via:
|
|||||||
|
|
||||||
In order to install Immich from the Unraid CA, you will need an existing Redis and PostgreSQL 14 container, If you do not already have Redis or PostgreSQL you can install them from the Unraid CA, just make sure you choose PostgreSQL **14**.
|
In order to install Immich from the Unraid CA, you will need an existing Redis and PostgreSQL 14 container, If you do not already have Redis or PostgreSQL you can install them from the Unraid CA, just make sure you choose PostgreSQL **14**.
|
||||||
|
|
||||||
Once you have Redis and PostgreSQL running, search for Immich on the Unraid CA, Choose either of the templates listed and fill out the example variables.
|
Once you have Redis and PostgreSQL running, search for Immich on the Unraid CA, choose either of the templates listed and fill out the example variables.
|
||||||
|
|
||||||
For more information about setting up the community image see [here](https://github.com/imagegenius/docker-immich#application-setup)
|
For more information about setting up the community image see [here](https://github.com/imagegenius/docker-immich#application-setup)
|
||||||
|
|
||||||
@@ -71,7 +71,7 @@ alt="Select Plugins > Compose.Manager > Add New Stack > Label it Immich"
|
|||||||
</details>
|
</details>
|
||||||
5. Click "**Save Changes**", you will be promoted to edit stack UI labels, just leave this blank and click "**Ok**"
|
5. Click "**Save Changes**", you will be promoted to edit stack UI labels, just leave this blank and click "**Ok**"
|
||||||
6. Select the cog ⚙️ next to Immich, click "**Edit Stack**", then click "**Env File**"
|
6. Select the cog ⚙️ next to Immich, click "**Edit Stack**", then click "**Env File**"
|
||||||
7. Past the entire contents of the [Immich example.env](https://github.com/immich-app/immich/releases/latest/download/example.env) file into the Unraid editor, then **before saving** edit the following:
|
7. Paste the entire contents of the [Immich example.env](https://github.com/immich-app/immich/releases/latest/download/example.env) file into the Unraid editor, then **before saving** edit the following:
|
||||||
|
|
||||||
- `UPLOAD_LOCATION`: Create a folder in your Images Unraid share and place the **absolute** location here > For example my _"images"_ share has a folder within it called _"immich"_. If I browse to this directory in the terminal and type `pwd` the output is `/mnt/user/images/immich`. This is the exact value I need to enter as my `UPLOAD_LOCATION`
|
- `UPLOAD_LOCATION`: Create a folder in your Images Unraid share and place the **absolute** location here > For example my _"images"_ share has a folder within it called _"immich"_. If I browse to this directory in the terminal and type `pwd` the output is `/mnt/user/images/immich`. This is the exact value I need to enter as my `UPLOAD_LOCATION`
|
||||||
|
|
||||||
@@ -143,8 +143,8 @@ alt="Immich update notification"
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
1. Go to the "**Docker**" tab and scroll to the Compose section
|
1. Go to the "**Docker**" tab and scroll to the Compose section
|
||||||
2. Next to Immich click the "**Update Stack**" button and Unraid will begin to update all Immmich related containers
|
2. Next to Immich click the "**Update Stack**" button and Unraid will begin to update all Immich related containers
|
||||||
> Note: **Do not** select Compose Down first, it is unecessary.
|
> Note: **Do not** select Compose Down first, it is unnecessary.
|
||||||
3. Once complete you will see a "_Connection Closed_" message, select "**Done**".
|
3. Once complete you will see a "_Connection Closed_" message, select "**Done**".
|
||||||
<img
|
<img
|
||||||
src={require('./img/unraid11.png').default}
|
src={require('./img/unraid11.png').default}
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 52 KiB |
@@ -34,3 +34,15 @@ download:
|
|||||||
locale_code: pt-BR
|
locale_code: pt-BR
|
||||||
- file: mobile/assets/i18n/pl-PL.json
|
- file: mobile/assets/i18n/pl-PL.json
|
||||||
locale_code: pl-PL
|
locale_code: pl-PL
|
||||||
|
- file: mobile/assets/i18n/sv-SE.json
|
||||||
|
locale_code: sv-SE
|
||||||
|
- file: mobile/assets/i18n/sk-SK.json
|
||||||
|
locale_code: sk-SK
|
||||||
|
- file: mobile/assets/i18n/zh-CN.json
|
||||||
|
locale_code: zh-CN
|
||||||
|
- file: mobile/assets/i18n/ru-RU.json
|
||||||
|
locale_code: ru-RU
|
||||||
|
- file: mobile/assets/i18n/cs-CZ.json
|
||||||
|
locale_code: cs-CZ
|
||||||
|
- file: mobile/assets/i18n/no-NO.json
|
||||||
|
locale_code: no-NO
|
||||||
|
|||||||
@@ -1,4 +1 @@
|
|||||||
node_modules/
|
venv/
|
||||||
upload/
|
|
||||||
dist/
|
|
||||||
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
parser: '@typescript-eslint/parser',
|
|
||||||
parserOptions: {
|
|
||||||
project: 'tsconfig.json',
|
|
||||||
sourceType: 'module',
|
|
||||||
},
|
|
||||||
plugins: ['@typescript-eslint/eslint-plugin'],
|
|
||||||
extends: [
|
|
||||||
'plugin:@typescript-eslint/recommended',
|
|
||||||
'plugin:prettier/recommended',
|
|
||||||
],
|
|
||||||
root: true,
|
|
||||||
env: {
|
|
||||||
node: true,
|
|
||||||
jest: true,
|
|
||||||
},
|
|
||||||
ignorePatterns: ['.eslintrc.js'],
|
|
||||||
rules: {
|
|
||||||
'@typescript-eslint/interface-name-prefix': 'off',
|
|
||||||
'@typescript-eslint/explicit-function-return-type': 'off',
|
|
||||||
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
|
||||||
'@typescript-eslint/no-explicit-any': 'off',
|
|
||||||
},
|
|
||||||
};
|
|
||||||
@@ -1,37 +1,4 @@
|
|||||||
# compiled output
|
upload/
|
||||||
/dist
|
venv/
|
||||||
/node_modules
|
__pycache__/
|
||||||
|
model-cache/
|
||||||
# Logs
|
|
||||||
logs
|
|
||||||
*.log
|
|
||||||
npm-debug.log*
|
|
||||||
pnpm-debug.log*
|
|
||||||
yarn-debug.log*
|
|
||||||
yarn-error.log*
|
|
||||||
lerna-debug.log*
|
|
||||||
|
|
||||||
# OS
|
|
||||||
.DS_Store
|
|
||||||
|
|
||||||
# Tests
|
|
||||||
/coverage
|
|
||||||
/.nyc_output
|
|
||||||
|
|
||||||
# IDEs and editors
|
|
||||||
/.idea
|
|
||||||
.project
|
|
||||||
.classpath
|
|
||||||
.c9/
|
|
||||||
*.launch
|
|
||||||
.settings/
|
|
||||||
*.sublime-workspace
|
|
||||||
|
|
||||||
# IDE - VSCode
|
|
||||||
.vscode/*
|
|
||||||
!.vscode/settings.json
|
|
||||||
!.vscode/tasks.json
|
|
||||||
!.vscode/launch.json
|
|
||||||
!.vscode/extensions.json
|
|
||||||
|
|
||||||
upload/
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"singleQuote": true,
|
|
||||||
"trailingComma": "all"
|
|
||||||
}
|
|
||||||
@@ -1,34 +1,19 @@
|
|||||||
FROM node:16-bullseye-slim as builder
|
FROM python:3.10
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ENV TRANSFORMERS_CACHE=/cache \
|
||||||
|
PYTHONDONTWRITEBYTECODE=1 \
|
||||||
|
PYTHONUNBUFFERED=1 \
|
||||||
|
PIP_NO_CACHE_DIR=true
|
||||||
|
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
|
|
||||||
RUN apt-get update
|
RUN python -m venv /opt/venv
|
||||||
RUN apt-get install gcc g++ make cmake python3 python3-pip -y
|
ENV PATH="/opt/venv/bin:$PATH"
|
||||||
|
|
||||||
COPY package.json package-lock.json ./
|
RUN pip install --pre torch -f https://download.pytorch.org/whl/nightly/cpu/torch_nightly.html
|
||||||
|
RUN pip install transformers tqdm numpy scikit-learn scipy nltk sentencepiece flask Pillow
|
||||||
RUN npm ci
|
RUN pip install --no-deps sentence-transformers
|
||||||
RUN npm rebuild @tensorflow/tfjs-node --build-from-source
|
|
||||||
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
FROM builder as prod
|
CMD ["python", "src/main.py"]
|
||||||
|
|
||||||
RUN npm run build
|
|
||||||
RUN npm prune --omit=dev
|
|
||||||
|
|
||||||
FROM node:16-bullseye-slim
|
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
|
||||||
|
|
||||||
WORKDIR /usr/src/app
|
|
||||||
|
|
||||||
COPY --from=prod /usr/src/app/node_modules ./node_modules
|
|
||||||
COPY --from=prod /usr/src/app/dist ./dist
|
|
||||||
|
|
||||||
COPY package.json package-lock.json ./
|
|
||||||
COPY entrypoint.sh ./
|
|
||||||
|
|
||||||
# CMD [ "node", "dist/main" ]
|
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2022 Hau Tran
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
|
|
||||||
# Microservices for Immich
|
# Immich Machine Learning
|
||||||
|
|
||||||
## Image Classifier
|
- Object Detection
|
||||||
|
- Image Classification
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#! /bin/sh
|
|
||||||
# npm run typeorm migration:run
|
|
||||||
# npm run start:prod
|
|
||||||
exec node dist/main.js
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"collection": "@nestjs/schematics",
|
|
||||||
"sourceRoot": "src"
|
|
||||||
}
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "nest_microservices",
|
|
||||||
"version": "0.0.1",
|
|
||||||
"description": "",
|
|
||||||
"author": "",
|
|
||||||
"private": true,
|
|
||||||
"license": "UNLICENSED",
|
|
||||||
"scripts": {
|
|
||||||
"prebuild": "rimraf dist",
|
|
||||||
"build": "nest build",
|
|
||||||
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
|
||||||
"start": "nest start",
|
|
||||||
"start:dev": "nest start --watch",
|
|
||||||
"start:debug": "nest start --debug --watch",
|
|
||||||
"start:prod": "node dist/main",
|
|
||||||
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
|
|
||||||
"test": "jest",
|
|
||||||
"test:watch": "jest --watch",
|
|
||||||
"test:cov": "jest --coverage",
|
|
||||||
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
|
|
||||||
"test:e2e": "jest --config ./test/jest-e2e.json"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@nestjs/common": "^8.0.0",
|
|
||||||
"@nestjs/core": "^8.0.0",
|
|
||||||
"@tensorflow-models/coco-ssd": "^2.2.2",
|
|
||||||
"@tensorflow-models/mobilenet": "^2.1.0",
|
|
||||||
"@tensorflow/tfjs-node": "^3.19.0"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@nestjs/cli": "^8.2.4",
|
|
||||||
"@nestjs/schematics": "^8.0.0",
|
|
||||||
"@nestjs/testing": "^8.0.0",
|
|
||||||
"@types/express": "^4.17.13",
|
|
||||||
"@types/jest": "27.4.1",
|
|
||||||
"@types/node": "^16.0.0",
|
|
||||||
"@types/supertest": "^2.0.11",
|
|
||||||
"@typescript-eslint/eslint-plugin": "^5.0.0",
|
|
||||||
"@typescript-eslint/parser": "^5.0.0",
|
|
||||||
"eslint": "^8.0.1",
|
|
||||||
"eslint-config-prettier": "^8.3.0",
|
|
||||||
"eslint-plugin-prettier": "^4.0.0",
|
|
||||||
"jest": "^27.2.5",
|
|
||||||
"prettier": "^2.3.2",
|
|
||||||
"rimraf": "^3.0.2",
|
|
||||||
"source-map-support": "^0.5.20",
|
|
||||||
"supertest": "^6.1.3",
|
|
||||||
"ts-jest": "^27.0.3",
|
|
||||||
"ts-loader": "^9.2.3",
|
|
||||||
"ts-node": "^10.0.0",
|
|
||||||
"tsconfig-paths": "^3.10.1",
|
|
||||||
"typescript": "^4.3.5"
|
|
||||||
},
|
|
||||||
"jest": {
|
|
||||||
"moduleFileExtensions": [
|
|
||||||
"js",
|
|
||||||
"json",
|
|
||||||
"ts"
|
|
||||||
],
|
|
||||||
"rootDir": "src",
|
|
||||||
"testRegex": ".*\\.spec\\.ts$",
|
|
||||||
"transform": {
|
|
||||||
"^.+\\.(t|j)s$": "ts-jest"
|
|
||||||
},
|
|
||||||
"collectCoverageFrom": [
|
|
||||||
"**/*.(t|j)s"
|
|
||||||
],
|
|
||||||
"coverageDirectory": "../coverage",
|
|
||||||
"testEnvironment": "node"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
import { Module } from '@nestjs/common';
|
|
||||||
import { ImageClassifierModule } from './image-classifier/image-classifier.module';
|
|
||||||
import { ObjectDetectionModule } from './object-detection/object-detection.module';
|
|
||||||
|
|
||||||
@Module({
|
|
||||||
imports: [ImageClassifierModule, ObjectDetectionModule],
|
|
||||||
controllers: [],
|
|
||||||
providers: [],
|
|
||||||
})
|
|
||||||
export class AppModule {}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
import { Body, Controller, Post } from '@nestjs/common';
|
|
||||||
import { ImageClassifierService } from './image-classifier.service';
|
|
||||||
|
|
||||||
@Controller('image-classifier')
|
|
||||||
export class ImageClassifierController {
|
|
||||||
constructor(
|
|
||||||
private readonly imageClassifierService: ImageClassifierService,
|
|
||||||
) { }
|
|
||||||
|
|
||||||
@Post('/tag-image')
|
|
||||||
async tagImage(@Body('thumbnailPath') thumbnailPath: string) {
|
|
||||||
return await this.imageClassifierService.tagImage(thumbnailPath);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
import { Module } from '@nestjs/common';
|
|
||||||
import { ImageClassifierService } from './image-classifier.service';
|
|
||||||
import { ImageClassifierController } from './image-classifier.controller';
|
|
||||||
|
|
||||||
@Module({
|
|
||||||
controllers: [ImageClassifierController],
|
|
||||||
providers: [ImageClassifierService],
|
|
||||||
})
|
|
||||||
export class ImageClassifierModule {}
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
import { Injectable, Logger } from '@nestjs/common';
|
|
||||||
import * as mobilenet from '@tensorflow-models/mobilenet';
|
|
||||||
import * as cocoSsd from '@tensorflow-models/coco-ssd';
|
|
||||||
import * as tf from '@tensorflow/tfjs-node';
|
|
||||||
import * as fs from 'fs';
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
export class ImageClassifierService {
|
|
||||||
private readonly MOBILENET_VERSION = 2;
|
|
||||||
private readonly MOBILENET_ALPHA = 1.0;
|
|
||||||
|
|
||||||
private mobileNetModel: mobilenet.MobileNet;
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
Logger.log(
|
|
||||||
`Running Node TensorFlow Version : ${tf.version['tfjs']}`,
|
|
||||||
'ImageClassifier',
|
|
||||||
);
|
|
||||||
mobilenet
|
|
||||||
.load({
|
|
||||||
version: this.MOBILENET_VERSION,
|
|
||||||
alpha: this.MOBILENET_ALPHA,
|
|
||||||
})
|
|
||||||
.then((mobilenetModel) => (this.mobileNetModel = mobilenetModel));
|
|
||||||
}
|
|
||||||
|
|
||||||
async tagImage(thumbnailPath: string) {
|
|
||||||
try {
|
|
||||||
const isExist = fs.existsSync(thumbnailPath);
|
|
||||||
if (isExist) {
|
|
||||||
const tags = [];
|
|
||||||
const image = fs.readFileSync(thumbnailPath);
|
|
||||||
const decodedImage = tf.node.decodeImage(image, 3) as tf.Tensor3D;
|
|
||||||
const predictions = await this.mobileNetModel.classify(decodedImage);
|
|
||||||
|
|
||||||
for (const prediction of predictions) {
|
|
||||||
if (prediction.probability >= 0.1) {
|
|
||||||
tags.push(...prediction.className.split(',').map((e) => e.trim()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tf.dispose(decodedImage);
|
|
||||||
return tags;
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
console.log('Error reading file ', e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
import os
|
||||||
|
from flask import Flask, request
|
||||||
|
from transformers import pipeline
|
||||||
|
|
||||||
|
|
||||||
|
server = Flask(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
classifier = pipeline(
|
||||||
|
task="image-classification",
|
||||||
|
model="microsoft/resnet-50"
|
||||||
|
)
|
||||||
|
|
||||||
|
detector = pipeline(
|
||||||
|
task="object-detection",
|
||||||
|
model="hustvl/yolos-tiny"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# Environment resolver
|
||||||
|
is_dev = os.getenv('NODE_ENV') == 'development'
|
||||||
|
server_port = os.getenv('MACHINE_LEARNING_PORT') or 3003
|
||||||
|
|
||||||
|
|
||||||
|
@server.route("/ping")
|
||||||
|
def ping():
|
||||||
|
return "pong"
|
||||||
|
|
||||||
|
|
||||||
|
@server.route("/object-detection/detect-object", methods=['POST'])
|
||||||
|
def object_detection():
|
||||||
|
assetPath = request.json['thumbnailPath']
|
||||||
|
return run_engine(detector, assetPath), 201
|
||||||
|
|
||||||
|
|
||||||
|
@server.route("/image-classifier/tag-image", methods=['POST'])
|
||||||
|
def image_classification():
|
||||||
|
assetPath = request.json['thumbnailPath']
|
||||||
|
return run_engine(classifier, assetPath), 201
|
||||||
|
|
||||||
|
|
||||||
|
def run_engine(engine, path):
|
||||||
|
result = []
|
||||||
|
predictions = engine(path)
|
||||||
|
|
||||||
|
for index, pred in enumerate(predictions):
|
||||||
|
tags = pred['label'].split(', ')
|
||||||
|
if (pred['score'] > 0.9):
|
||||||
|
result = [*result, *tags]
|
||||||
|
|
||||||
|
if (len(result) > 1):
|
||||||
|
result = list(set(result))
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
server.run(debug=is_dev, host='0.0.0.0', port=server_port)
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
import { NestFactory } from '@nestjs/core';
|
|
||||||
import { AppModule } from './app.module';
|
|
||||||
import { Logger } from '@nestjs/common';
|
|
||||||
|
|
||||||
async function bootstrap() {
|
|
||||||
const app = await NestFactory.create(AppModule);
|
|
||||||
|
|
||||||
const port = Number(process.env.MACHINE_LEARNING_PORT) || 3003;
|
|
||||||
|
|
||||||
await app.listen(port, () => {
|
|
||||||
if (process.env.NODE_ENV == 'development') {
|
|
||||||
Logger.log(
|
|
||||||
'Running Immich Machine Learning in DEVELOPMENT environment',
|
|
||||||
'IMMICH MICROSERVICES',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (process.env.NODE_ENV == 'production') {
|
|
||||||
Logger.log(
|
|
||||||
'Running Immich Machine Learning in PRODUCTION environment',
|
|
||||||
'IMMICH MICROSERVICES',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
bootstrap();
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
import { Body, Controller, Post } from '@nestjs/common';
|
|
||||||
import { ObjectDetectionService } from './object-detection.service';
|
|
||||||
import { Logger } from '@nestjs/common';
|
|
||||||
|
|
||||||
@Controller('object-detection')
|
|
||||||
export class ObjectDetectionController {
|
|
||||||
constructor(
|
|
||||||
private readonly objectDetectionService: ObjectDetectionService,
|
|
||||||
) { }
|
|
||||||
|
|
||||||
@Post('/detect-object')
|
|
||||||
async detectObject(@Body('thumbnailPath') thumbnailPath: string) {
|
|
||||||
return await this.objectDetectionService.detectObject(thumbnailPath);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
import { Module } from '@nestjs/common';
|
|
||||||
import { ObjectDetectionService } from './object-detection.service';
|
|
||||||
import { ObjectDetectionController } from './object-detection.controller';
|
|
||||||
|
|
||||||
@Module({
|
|
||||||
controllers: [ObjectDetectionController],
|
|
||||||
providers: [ObjectDetectionService],
|
|
||||||
})
|
|
||||||
export class ObjectDetectionModule {}
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
import { Injectable, Logger } from '@nestjs/common';
|
|
||||||
import * as cocoSsd from '@tensorflow-models/coco-ssd';
|
|
||||||
import * as tf from '@tensorflow/tfjs-node';
|
|
||||||
import * as fs from 'fs';
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
export class ObjectDetectionService {
|
|
||||||
private cocoSsdModel: cocoSsd.ObjectDetection;
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
Logger.log(
|
|
||||||
`Running Node TensorFlow Version : ${tf.version['tfjs']}`,
|
|
||||||
'ObjectDetection',
|
|
||||||
);
|
|
||||||
cocoSsd.load().then((model) => (this.cocoSsdModel = model));
|
|
||||||
}
|
|
||||||
async detectObject(thumbnailPath: string) {
|
|
||||||
try {
|
|
||||||
const isExist = fs.existsSync(thumbnailPath);
|
|
||||||
if (isExist) {
|
|
||||||
const tags = new Set();
|
|
||||||
const image = fs.readFileSync(thumbnailPath);
|
|
||||||
const decodedImage = tf.node.decodeImage(image, 3) as tf.Tensor3D;
|
|
||||||
const predictions = await this.cocoSsdModel.detect(decodedImage);
|
|
||||||
|
|
||||||
for (const result of predictions) {
|
|
||||||
if (result.score > 0.5) {
|
|
||||||
tags.add(result.class);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tf.dispose(decodedImage);
|
|
||||||
return [...tags];
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
console.log('Error reading file ', e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"extends": "./tsconfig.json",
|
|
||||||
"exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
{
|
|
||||||
"compilerOptions": {
|
|
||||||
"module": "commonjs",
|
|
||||||
"declaration": true,
|
|
||||||
"removeComments": true,
|
|
||||||
"emitDecoratorMetadata": true,
|
|
||||||
"experimentalDecorators": true,
|
|
||||||
"allowSyntheticDefaultImports": true,
|
|
||||||
"target": "es2017",
|
|
||||||
"sourceMap": true,
|
|
||||||
"outDir": "./dist",
|
|
||||||
"baseUrl": "./",
|
|
||||||
"incremental": true,
|
|
||||||
"skipLibCheck": true,
|
|
||||||
"strictNullChecks": false,
|
|
||||||
"noImplicitAny": false,
|
|
||||||
"strictBindCallApply": false,
|
|
||||||
"forceConsistentCasingInFileNames": false,
|
|
||||||
"noFallthroughCasesInSwitch": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -60,22 +60,27 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$CURRENT_SERVER" != "$NEXT_SERVER" ]; then
|
if [ "$CURRENT_SERVER" != "$NEXT_SERVER" ]; then
|
||||||
|
|
||||||
echo "Pumping Server: $CURRENT_SERVER => $NEXT_SERVER"
|
echo "Pumping Server: $CURRENT_SERVER => $NEXT_SERVER"
|
||||||
|
|
||||||
sed -i "s/^ \"version\": \"$CURRENT_SERVER\",$/ \"version\": \"$NEXT_SERVER\",/" server/package.json
|
|
||||||
sed -i "s/^ \"version\": \"$CURRENT_SERVER\",$/ \"version\": \"$NEXT_SERVER\",/" server/package-lock.json
|
|
||||||
sed -i "s/\"version\": \"$CURRENT_SERVER\",$/\"version\": \"$NEXT_SERVER\",/" server/immich-openapi-specs.json
|
|
||||||
sed -i "s/\"android\.injected\.version\.name\" => \"$CURRENT_SERVER\",/\"android\.injected\.version\.name\" => \"$NEXT_SERVER\",/" mobile/android/fastlane/Fastfile
|
|
||||||
sed -i "s/version_number: \"$CURRENT_SERVER\"$/version_number: \"$NEXT_SERVER\"/" mobile/ios/fastlane/Fastfile
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$CURRENT_MOBILE" != "$NEXT_MOBILE" ]; then
|
if [ "$CURRENT_MOBILE" != "$NEXT_MOBILE" ]; then
|
||||||
|
|
||||||
echo "Pumping Mobile: $CURRENT_MOBILE => $NEXT_MOBILE"
|
echo "Pumping Mobile: $CURRENT_MOBILE => $NEXT_MOBILE"
|
||||||
|
|
||||||
sed -i "s/\"android\.injected\.version\.code\" => $CURRENT_MOBILE,/\"android\.injected\.version\.code\" => $NEXT_MOBILE,/" mobile/android/fastlane/Fastfile
|
|
||||||
sed -i "s/^version: $CURRENT_SERVER+$CURRENT_MOBILE$/version: $NEXT_SERVER+$NEXT_MOBILE/" mobile/pubspec.yaml
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
sed -i "s/^ \"version\": \"$CURRENT_SERVER\",$/ \"version\": \"$NEXT_SERVER\",/" server/package.json
|
||||||
|
sed -i "s/^ \"version\": \"$CURRENT_SERVER\",$/ \"version\": \"$NEXT_SERVER\",/" server/package-lock.json
|
||||||
|
sed -i "s/\"version\": \"$CURRENT_SERVER\",$/\"version\": \"$NEXT_SERVER\",/" server/immich-openapi-specs.json
|
||||||
|
sed -i "s/\"android\.injected\.version\.name\" => \"$CURRENT_SERVER\",/\"android\.injected\.version\.name\" => \"$NEXT_SERVER\",/" mobile/android/fastlane/Fastfile
|
||||||
|
sed -i "s/version_number: \"$CURRENT_SERVER\"$/version_number: \"$NEXT_SERVER\"/" mobile/ios/fastlane/Fastfile
|
||||||
|
sed -i "s/\"android\.injected\.version\.code\" => $CURRENT_MOBILE,/\"android\.injected\.version\.code\" => $NEXT_MOBILE,/" mobile/android/fastlane/Fastfile
|
||||||
|
sed -i "s/^version: $CURRENT_SERVER+$CURRENT_MOBILE$/version: $NEXT_SERVER+$NEXT_MOBILE/" mobile/pubspec.yaml
|
||||||
|
|
||||||
|
# OpenApi Generated Files
|
||||||
|
sed -i "s/API version: $CURRENT_SERVER,$/API version: $NEXT_SERVER/" mobile/openapi/README.md
|
||||||
|
sed -i "s/OpenAPI document: $CURRENT_SERVER,$/OpenAPI document: $NEXT_SERVER/" web/src/api/open-api/api.ts
|
||||||
|
sed -i "s/OpenAPI document: $CURRENT_SERVER,$/OpenAPI document: $NEXT_SERVER/" web/src/api/open-api/base.ts
|
||||||
|
sed -i "s/OpenAPI document: $CURRENT_SERVER,$/OpenAPI document: $NEXT_SERVER/" web/src/api/open-api/common.ts
|
||||||
|
sed -i "s/OpenAPI document: $CURRENT_SERVER,$/OpenAPI document: $NEXT_SERVER/" web/src/api/open-api/configuration.ts
|
||||||
|
sed -i "s/OpenAPI document: $CURRENT_SERVER,$/OpenAPI document: $NEXT_SERVER/" web/src/api/open-api/index.ts
|
||||||
|
|
||||||
echo "IMMICH_VERSION=v$NEXT_SERVER" >>$GITHUB_ENV
|
echo "IMMICH_VERSION=v$NEXT_SERVER" >>$GITHUB_ENV
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"flutterSdkVersion": "3.7.0",
|
||||||
|
"flavors": {}
|
||||||
|
}
|
||||||
@@ -24,7 +24,6 @@
|
|||||||
|
|
||||||
# Flutter/Dart/Pub related
|
# Flutter/Dart/Pub related
|
||||||
**/doc/api/
|
**/doc/api/
|
||||||
**/ios/
|
|
||||||
.dart_tool/
|
.dart_tool/
|
||||||
.flutter-plugins
|
.flutter-plugins
|
||||||
.flutter-plugins-dependencies
|
.flutter-plugins-dependencies
|
||||||
@@ -32,6 +31,7 @@
|
|||||||
.pub-cache/
|
.pub-cache/
|
||||||
.pub/
|
.pub/
|
||||||
/build/
|
/build/
|
||||||
|
.fvm/flutter_sdk
|
||||||
|
|
||||||
# Web related
|
# Web related
|
||||||
lib/generated_plugin_registrant.dart
|
lib/generated_plugin_registrant.dart
|
||||||
@@ -48,4 +48,4 @@ app.*.map.json
|
|||||||
/android/app/release
|
/android/app/release
|
||||||
|
|
||||||
# Fastlane
|
# Fastlane
|
||||||
ios/fastlane/report.xml
|
ios/fastlane/report.xml
|
||||||
|
|||||||
@@ -2,6 +2,11 @@
|
|||||||
xmlns:tools="http://schemas.android.com/tools">
|
xmlns:tools="http://schemas.android.com/tools">
|
||||||
<application android:label="Immich" android:name=".ImmichApp" android:usesCleartextTraffic="true"
|
<application android:label="Immich" android:name=".ImmichApp" android:usesCleartextTraffic="true"
|
||||||
android:icon="@mipmap/ic_launcher" android:requestLegacyExternalStorage="true">
|
android:icon="@mipmap/ic_launcher" android:requestLegacyExternalStorage="true">
|
||||||
|
|
||||||
|
<meta-data
|
||||||
|
android:name="io.flutter.embedding.android.EnableImpeller"
|
||||||
|
android:value="false" />
|
||||||
|
|
||||||
<activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop"
|
<activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop"
|
||||||
android:theme="@style/LaunchTheme"
|
android:theme="@style/LaunchTheme"
|
||||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||||
|
|||||||
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 70 B |
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item>
|
||||||
|
<bitmap android:gravity="fill" android:src="@drawable/background"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<bitmap android:gravity="center" android:src="@drawable/splash"/>
|
||||||
|
</item>
|
||||||
|
</layer-list>
|
||||||
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 70 B |
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item>
|
||||||
|
<bitmap android:gravity="fill" android:src="@drawable/background"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<bitmap android:gravity="center" android:src="@drawable/splash"/>
|
||||||
|
</item>
|
||||||
|
</layer-list>
|
||||||
|
After Width: | Height: | Size: 70 B |
@@ -1,12 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Modify this file to customize your launch splash screen -->
|
|
||||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:drawable="?android:colorBackground" />
|
<item>
|
||||||
|
<bitmap android:gravity="fill" android:src="@drawable/background"/>
|
||||||
<!-- You can insert your own image assets here -->
|
</item>
|
||||||
<!-- <item>
|
<item>
|
||||||
<bitmap
|
<bitmap android:gravity="center" android:src="@drawable/splash"/>
|
||||||
android:gravity="center"
|
</item>
|
||||||
android:src="@mipmap/launch_image" />
|
|
||||||
</item> -->
|
|
||||||
</layer-list>
|
</layer-list>
|
||||||
|
|||||||
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 70 B |
@@ -1,12 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Modify this file to customize your launch splash screen -->
|
|
||||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:drawable="@android:color/white" />
|
<item>
|
||||||
|
<bitmap android:gravity="fill" android:src="@drawable/background"/>
|
||||||
<!-- You can insert your own image assets here -->
|
</item>
|
||||||
<!-- <item>
|
<item>
|
||||||
<bitmap
|
<bitmap android:gravity="center" android:src="@drawable/splash"/>
|
||||||
android:gravity="center"
|
</item>
|
||||||
android:src="@mipmap/launch_image" />
|
|
||||||
</item> -->
|
|
||||||
</layer-list>
|
</layer-list>
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
|
||||||
|
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||||
|
<item name="android:forceDarkAllowed">false</item>
|
||||||
|
<item name="android:windowFullscreen">false</item>
|
||||||
|
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||||
|
<item name="android:windowSplashScreenBackground">#000000</item>
|
||||||
|
<item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
|
||||||
|
</style>
|
||||||
|
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||||
|
This theme determines the color of the Android Window while your
|
||||||
|
Flutter UI initializes, as well as behind your Flutter UI while its
|
||||||
|
running.
|
||||||
|
|
||||||
|
This Theme is only used starting with V2 of Flutter's Android embedding. -->
|
||||||
|
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||||
|
<item name="android:windowBackground">?android:colorBackground</item>
|
||||||
|
</style>
|
||||||
|
</resources>
|
||||||
@@ -5,6 +5,9 @@
|
|||||||
<!-- Show a splash screen on the activity. Automatically removed when
|
<!-- Show a splash screen on the activity. Automatically removed when
|
||||||
Flutter draws its first frame -->
|
Flutter draws its first frame -->
|
||||||
<item name="android:windowBackground">@drawable/launch_background</item>
|
<item name="android:windowBackground">@drawable/launch_background</item>
|
||||||
|
<item name="android:forceDarkAllowed">false</item>
|
||||||
|
<item name="android:windowFullscreen">false</item>
|
||||||
|
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||||
</style>
|
</style>
|
||||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||||
This theme determines the color of the Android Window while your
|
This theme determines the color of the Android Window while your
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
|
||||||
|
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
|
||||||
|
<item name="android:forceDarkAllowed">false</item>
|
||||||
|
<item name="android:windowFullscreen">false</item>
|
||||||
|
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||||
|
<item name="android:windowSplashScreenBackground">#f6f8fe</item>
|
||||||
|
<item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
|
||||||
|
</style>
|
||||||
|
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||||
|
This theme determines the color of the Android Window while your
|
||||||
|
Flutter UI initializes, as well as behind your Flutter UI while its
|
||||||
|
running.
|
||||||
|
|
||||||
|
This Theme is only used starting with V2 of Flutter's Android embedding. -->
|
||||||
|
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
|
||||||
|
<item name="android:windowBackground">?android:colorBackground</item>
|
||||||
|
</style>
|
||||||
|
</resources>
|
||||||
@@ -5,6 +5,9 @@
|
|||||||
<!-- Show a splash screen on the activity. Automatically removed when
|
<!-- Show a splash screen on the activity. Automatically removed when
|
||||||
Flutter draws its first frame -->
|
Flutter draws its first frame -->
|
||||||
<item name="android:windowBackground">@drawable/launch_background</item>
|
<item name="android:windowBackground">@drawable/launch_background</item>
|
||||||
|
<item name="android:forceDarkAllowed">false</item>
|
||||||
|
<item name="android:windowFullscreen">false</item>
|
||||||
|
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
|
||||||
</style>
|
</style>
|
||||||
<!-- Theme applied to the Android Window as soon as the process has started.
|
<!-- Theme applied to the Android Window as soon as the process has started.
|
||||||
This theme determines the color of the Android Window while your
|
This theme determines the color of the Android Window while your
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ platform :android do
|
|||||||
task: 'bundle',
|
task: 'bundle',
|
||||||
build_type: 'Release',
|
build_type: 'Release',
|
||||||
properties: {
|
properties: {
|
||||||
"android.injected.version.code" => 67,
|
"android.injected.version.code" => 73,
|
||||||
"android.injected.version.name" => "1.45.0",
|
"android.injected.version.name" => "1.50.0",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab')
|
upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab')
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
fixes back button while multiselecting showing the last selected image
|
||||||
|
fixes dark mode color for invite to album app bar
|
||||||
|
fixed local asset thumbnail size and eliminated fade in
|
||||||
|
Fullscreen image effects
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
* Library page rework (album sorting, favorites).
|
||||||
|
* Tap to enter immersive mode on the gallery viewer.
|
||||||
|
* Removed stay logged in the checkbox and made it enabled by default.
|
||||||
|
* Multiselect add to favorites from the timeline.
|
||||||
|
* Responsive layout improvements with a navigation rail and album grid.
|
||||||
|
* Home screen customization options.
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
* Adds over scroll at end of timeline to select images on the bottom
|
||||||
|
* Fixes back navigation with tab controller
|
||||||
|
* Shows a toast after adding to favorites
|
||||||
|
* Fixed download button style
|
||||||
|
* Cleaned up action bar, changed horizontal icon more to info icon
|
||||||
|
* Responsive display of exif data in bottom sheet
|
||||||
|
* Upgrade to Flutter 3.7
|
||||||
|
* Fix freeze bug on app start
|
||||||
|
* Uses profile photo for user avatar drawer
|
||||||
|
* Spinning flower
|
||||||
|
* Remove unsplash placeholder image and style empty places
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
* Scroll to top when tapping photos while already on photo page.
|
||||||
|
* Delete goes to next page instead of popping back to the main timeline.
|
||||||
|
* Improve date formatting.
|
||||||
|
* Styling and linter.
|
||||||
|
* User get logged out upon clicking on any thing after logging in.
|
||||||
|
* Improve reliability of asset loading and indexing.
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
* Fix no album thumbnail lead to no album selection shown and add global logs
|
||||||
|
* Fix remove asset from gallery view
|
||||||
@@ -5,17 +5,17 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000299">
|
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000219">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="1: bundleRelease" time="25.91737">
|
<testcase classname="fastlane.lanes" name="1: bundleRelease" time="66.030339">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="2: upload_to_play_store" time="38.549017">
|
<testcase classname="fastlane.lanes" name="2: upload_to_play_store" time="24.488297">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
{
|
{
|
||||||
|
"add_to_album_bottom_sheet_added": "Přidáno do {album}",
|
||||||
|
"add_to_album_bottom_sheet_already_exists": "Již v {album}",
|
||||||
"album_info_card_backup_album_excluded": "VYLOUČENO",
|
"album_info_card_backup_album_excluded": "VYLOUČENO",
|
||||||
"album_info_card_backup_album_included": "ZAHRNUTO",
|
"album_info_card_backup_album_included": "ZAHRNUTO",
|
||||||
"album_thumbnail_card_item": "1 položka",
|
"album_thumbnail_card_item": "1 položka",
|
||||||
"album_thumbnail_card_items": "{} položky",
|
"album_thumbnail_card_items": "{} položky",
|
||||||
"album_thumbnail_card_shared": "Sdíleno",
|
"album_thumbnail_card_shared": "Sdíleno",
|
||||||
"album_viewer_appbar_share_delete": "odstranit album",
|
"album_viewer_appbar_share_delete": "Odstranit album",
|
||||||
"album_viewer_appbar_share_err_delete": "Nepodařilo se odstranit album",
|
"album_viewer_appbar_share_err_delete": "Nepodařilo se odstranit album",
|
||||||
"album_viewer_appbar_share_err_leave": "Nepodařilo se ukončit album",
|
"album_viewer_appbar_share_err_leave": "Nepodařilo se ukončit album",
|
||||||
"album_viewer_appbar_share_err_remove": "Při odstraňování souborů z alba se vyskytly problémy.",
|
"album_viewer_appbar_share_err_remove": "Při odstraňování souborů z alba se vyskytly problémy.",
|
||||||
@@ -12,6 +14,10 @@
|
|||||||
"album_viewer_appbar_share_leave": "Opustit album",
|
"album_viewer_appbar_share_leave": "Opustit album",
|
||||||
"album_viewer_appbar_share_remove": "Odstranit z alba",
|
"album_viewer_appbar_share_remove": "Odstranit z alba",
|
||||||
"album_viewer_page_share_add_users": "Přidat uživatele",
|
"album_viewer_page_share_add_users": "Přidat uživatele",
|
||||||
|
"asset_list_layout_settings_dynamic_layout_title": "Dynamické rozložení",
|
||||||
|
"asset_list_layout_settings_group_by": "Seskupit položky podle",
|
||||||
|
"asset_list_layout_settings_group_by_month": "Měsíc",
|
||||||
|
"asset_list_layout_settings_group_by_month_day": "Měsíc + den",
|
||||||
"asset_list_settings_subtitle": "Nastavení rozložení mřížky fotografií",
|
"asset_list_settings_subtitle": "Nastavení rozložení mřížky fotografií",
|
||||||
"asset_list_settings_title": "Fotografická mřížka",
|
"asset_list_settings_title": "Fotografická mřížka",
|
||||||
"backup_album_selection_page_albums_device": "Alba v zařízení ({})",
|
"backup_album_selection_page_albums_device": "Alba v zařízení ({})",
|
||||||
@@ -21,30 +27,33 @@
|
|||||||
"backup_album_selection_page_selection_info": "Informace o výběru",
|
"backup_album_selection_page_selection_info": "Informace o výběru",
|
||||||
"backup_album_selection_page_total_assets": "Celkový počet jedinečných souborů",
|
"backup_album_selection_page_total_assets": "Celkový počet jedinečných souborů",
|
||||||
"backup_all": "Vše",
|
"backup_all": "Vše",
|
||||||
"backup_background_service_backup_failed_message": "Zálohování zdrojů selhalo. Zkouším to znovu...",
|
"backup_background_service_backup_failed_message": "Zálohování médií selhalo. Zkouším to znovu...",
|
||||||
"backup_background_service_connection_failed_message": "Nepodařilo se připojit k serveru. Zkouším to znovu...",
|
"backup_background_service_connection_failed_message": "Nepodařilo se připojit k serveru. Zkouším to znovu...",
|
||||||
"backup_background_service_current_upload_notification": "Nahrávání {}",
|
"backup_background_service_current_upload_notification": "Nahrávání {}",
|
||||||
"backup_background_service_default_notification": "Kontrola nových zdrojů {}",
|
"backup_background_service_default_notification": "Kontrola nových médií {}",
|
||||||
"backup_background_service_error_title": "Chyba zálohování",
|
"backup_background_service_error_title": "Chyba zálohování",
|
||||||
"backup_background_service_in_progress_notification": "Vytvářím kopii vašich zdrojů...",
|
"backup_background_service_in_progress_notification": "Vytvářím kopii vašich médií...",
|
||||||
"backup_background_service_upload_failure_notification": "Nepodařilo se nahrát {}",
|
"backup_background_service_upload_failure_notification": "Nepodařilo se nahrát {}",
|
||||||
"backup_controller_page_albums": "Zálohovaná alba",
|
"backup_controller_page_albums": "Zálohovaná alba",
|
||||||
|
"backup_controller_page_background_app_refresh_disabled_content": "Enable background app refresh in Settings > General > Background App Refresh in order to use background backup.",
|
||||||
|
"backup_controller_page_background_app_refresh_disabled_title": "Background app refresh disabled",
|
||||||
|
"backup_controller_page_background_app_refresh_enable_button_text": "Go to settings",
|
||||||
"backup_controller_page_background_battery_info_link": "Ukaž mi jak",
|
"backup_controller_page_background_battery_info_link": "Ukaž mi jak",
|
||||||
"backup_controller_page_background_battery_info_message": "Chcete-li dosáhnout nejlepších výsledků při zálohování na pozadí, vypněte všechny optimalizace baterie, které omezují aktivitu na pozadí pro Immich ve vašem zařízení. Jelikož to závisí na zařízení, zkontrolujte požadované informace pro výrobce vašeho zařízení.",
|
"backup_controller_page_background_battery_info_message": "Chcete-li dosáhnout nejlepších výsledků při zálohování na pozadí, vypněte všechny optimalizace baterie, které omezují aktivitu na pozadí pro Immich ve vašem zařízení. Jelikož to závisí na zařízení, zkontrolujte požadované informace pro výrobce vašeho zařízení.",
|
||||||
"backup_controller_page_background_battery_info_ok": "OK",
|
"backup_controller_page_background_battery_info_ok": "OK",
|
||||||
"backup_controller_page_background_battery_info_title": "Optimalizace baterie",
|
"backup_controller_page_background_battery_info_title": "Optimalizace baterie",
|
||||||
"backup_controller_page_background_charging": "Pouze během nabíjení",
|
"backup_controller_page_background_charging": "Pouze během nabíjení",
|
||||||
"backup_controller_page_background_configure_error": "Nepodařilo se nakonfigurovat službu na pozadí",
|
"backup_controller_page_background_configure_error": "Nepodařilo se nakonfigurovat službu na pozadí",
|
||||||
"backup_controller_page_background_delay": "Zpoždění zálohování nových zdrojů: {}",
|
"backup_controller_page_background_delay": "Zpoždění zálohování nových médií: {}",
|
||||||
"backup_controller_page_background_description": "Povolte službu na pozadí pro automatické zálohování všech nových aktiv bez nutnosti otevření aplikace",
|
"backup_controller_page_background_description": "Povolte službu na pozadí pro automatické zálohování všech nových aktiv bez nutnosti otevření aplikace",
|
||||||
"backup_controller_page_background_is_off": "Automatické zálohování na pozadí je vypnuto",
|
"backup_controller_page_background_is_off": "Automatické zálohování na pozadí je vypnuto",
|
||||||
"backup_controller_page_background_is_on": "Automatické zálohování na pozadí je zapnuto",
|
"backup_controller_page_background_is_on": "Automatické zálohování na pozadí je zapnuto",
|
||||||
"backup_controller_page_background_turn_off": "Zakázat službu na pozadí",
|
"backup_controller_page_background_turn_off": "Zakázat službu na pozadí",
|
||||||
"backup_controller_page_background_turn_on": "Povolit službu na pozadí",
|
"backup_controller_page_background_turn_on": "Povolit službu na pozadí",
|
||||||
"backup_controller_page_background_wifi": "Jen na WiFi",
|
"backup_controller_page_background_wifi": "Jen na WiFi",
|
||||||
"backup_controller_page_backup": "Zálohování",
|
"backup_controller_page_backup": "Zálohováno",
|
||||||
"backup_controller_page_backup_selected": "Vybrané: ",
|
"backup_controller_page_backup_selected": "Vybrané: ",
|
||||||
"backup_controller_page_backup_sub": "Zálohování fotografií a videí",
|
"backup_controller_page_backup_sub": "Zálohované fotografie a videa",
|
||||||
"backup_controller_page_cancel": "Zrušit",
|
"backup_controller_page_cancel": "Zrušit",
|
||||||
"backup_controller_page_created": "Vytvořeno: {}",
|
"backup_controller_page_created": "Vytvořeno: {}",
|
||||||
"backup_controller_page_desc_backup": "Zapněte zálohování na popředí, aby se nové položky automaticky nahrávaly na server při otevření aplikace.",
|
"backup_controller_page_desc_backup": "Zapněte zálohování na popředí, aby se nové položky automaticky nahrávaly na server při otevření aplikace.",
|
||||||
@@ -54,7 +63,7 @@
|
|||||||
"backup_controller_page_id": "ID: {}",
|
"backup_controller_page_id": "ID: {}",
|
||||||
"backup_controller_page_info": "Informace o zálohování",
|
"backup_controller_page_info": "Informace o zálohování",
|
||||||
"backup_controller_page_none_selected": "Žádné vybrané",
|
"backup_controller_page_none_selected": "Žádné vybrané",
|
||||||
"backup_controller_page_remainder": "Zbytek",
|
"backup_controller_page_remainder": "Zůstává",
|
||||||
"backup_controller_page_remainder_sub": "Zbývající fotografie a alba, která se mají zálohovat z výběru",
|
"backup_controller_page_remainder_sub": "Zbývající fotografie a alba, která se mají zálohovat z výběru",
|
||||||
"backup_controller_page_select": "Vybrat",
|
"backup_controller_page_select": "Vybrat",
|
||||||
"backup_controller_page_server_storage": "Serverové úložiště",
|
"backup_controller_page_server_storage": "Serverové úložiště",
|
||||||
@@ -67,9 +76,9 @@
|
|||||||
"backup_controller_page_total_sub": "Všechny jedinečné fotografie a videa z vybraných alb",
|
"backup_controller_page_total_sub": "Všechny jedinečné fotografie a videa z vybraných alb",
|
||||||
"backup_controller_page_turn_off": "Zakázat zálohování na popředí",
|
"backup_controller_page_turn_off": "Zakázat zálohování na popředí",
|
||||||
"backup_controller_page_turn_on": "Povolit zálohování na popředí",
|
"backup_controller_page_turn_on": "Povolit zálohování na popředí",
|
||||||
"backup_controller_page_uploading_file_info": "Nahrávání informací o souborech",
|
"backup_controller_page_uploading_file_info": "Informace o nahrávaném souboru",
|
||||||
"backup_err_only_album": "Nelze odstranit pouze album",
|
"backup_err_only_album": "Nelze odstranit jediné vybrané album",
|
||||||
"backup_info_card_assets": "položky",
|
"backup_info_card_assets": "položek",
|
||||||
"cache_settings_album_thumbnails": "Náhledy stránek knihovny (položek {})",
|
"cache_settings_album_thumbnails": "Náhledy stránek knihovny (položek {})",
|
||||||
"cache_settings_clear_cache_button": "Vymazat vyrovnávací paměť",
|
"cache_settings_clear_cache_button": "Vymazat vyrovnávací paměť",
|
||||||
"cache_settings_clear_cache_button_title": "Vymaže vyrovnávací paměť aplikace. To výrazně ovlivní výkon aplikace, dokud se vyrovnávací paměť neobnoví.",
|
"cache_settings_clear_cache_button_title": "Vymaže vyrovnávací paměť aplikace. To výrazně ovlivní výkon aplikace, dokud se vyrovnávací paměť neobnoví.",
|
||||||
@@ -83,20 +92,30 @@
|
|||||||
"cache_settings_subtitle": "Ovládání chování mobilní aplikace Immich v mezipaměti",
|
"cache_settings_subtitle": "Ovládání chování mobilní aplikace Immich v mezipaměti",
|
||||||
"cache_settings_thumbnail_size": "Velikost vyrovnávací paměti náhledů (položek {})",
|
"cache_settings_thumbnail_size": "Velikost vyrovnávací paměti náhledů (položek {})",
|
||||||
"cache_settings_title": "Nastavení vyrovnávací paměti",
|
"cache_settings_title": "Nastavení vyrovnávací paměti",
|
||||||
|
"change_password_form_confirm_password": "Potvrďte heslo",
|
||||||
|
"change_password_form_description": "Dobrý den, {firstName} {lastName},\n\nJe to buď poprvé, co se přihlašujete do systému, nebo byl podán požadavek na změnu hesla. Níže prosím zadejte nové heslo.",
|
||||||
|
"change_password_form_new_password": "Nové heslo",
|
||||||
|
"change_password_form_password_mismatch": "Hesla se neshodují",
|
||||||
|
"change_password_form_reenter_new_password": "Znovu zadejte nové heslo",
|
||||||
|
"common_add_to_album": "Přidat do alba",
|
||||||
|
"common_change_password": "Změnit heslo",
|
||||||
|
"common_create_new_album": "Vytvořit nové album",
|
||||||
|
"common_shared": "Sdílené",
|
||||||
"control_bottom_app_bar_add_to_album": "Přidat do alba",
|
"control_bottom_app_bar_add_to_album": "Přidat do alba",
|
||||||
"control_bottom_app_bar_album_info": "{} položky",
|
"control_bottom_app_bar_album_info": "{} položky",
|
||||||
"control_bottom_app_bar_album_info_shared": "{} položky - sdílené",
|
"control_bottom_app_bar_album_info_shared": "{} položky - sdílené",
|
||||||
"control_bottom_app_bar_create_new_album": "Vytvořit nové album",
|
"control_bottom_app_bar_create_new_album": "Vytvořit nové album",
|
||||||
"control_bottom_app_bar_delete": "Vymazat",
|
"control_bottom_app_bar_delete": "Vymazat",
|
||||||
|
"control_bottom_app_bar_favorite": "Oblíbené",
|
||||||
"control_bottom_app_bar_share": "Sdílet",
|
"control_bottom_app_bar_share": "Sdílet",
|
||||||
"create_album_page_untitled": "Bez názvu",
|
"create_album_page_untitled": "Bez názvu",
|
||||||
"create_shared_album_page_create": "Vytvořit",
|
"create_shared_album_page_create": "Vytvořit",
|
||||||
"create_shared_album_page_share": "Sdílet",
|
"create_shared_album_page_share": "Sdílet",
|
||||||
"create_shared_album_page_share_add_assets": "PŘIDAT",
|
"create_shared_album_page_share_add_assets": "PŘIDAT",
|
||||||
"create_shared_album_page_share_select_photos": "Vybrat fotografie",
|
"create_shared_album_page_share_select_photos": "Vybrat fotografie",
|
||||||
"daily_title_text_date": "EEEE, d MMMM",
|
"daily_title_text_date": "EEEE, d. MMMM",
|
||||||
"daily_title_text_date_year": "EEEE, d MMMM y",
|
"daily_title_text_date_year": "EEEE, d. MMMM y",
|
||||||
"date_format": "EEEE, d MMMM y • H:mm",
|
"date_format": "EEEE, d. MMMM y • H:mm",
|
||||||
"delete_dialog_alert": "Tyto položky budou trvale odstraněny z Immich a z vašeho zařízení.",
|
"delete_dialog_alert": "Tyto položky budou trvale odstraněny z Immich a z vašeho zařízení.",
|
||||||
"delete_dialog_cancel": "Zrušit",
|
"delete_dialog_cancel": "Zrušit",
|
||||||
"delete_dialog_ok": "Vymazat",
|
"delete_dialog_ok": "Vymazat",
|
||||||
@@ -108,16 +127,28 @@
|
|||||||
"experimental_settings_new_asset_list_title": "Povolení experimentální mřížky fotografií",
|
"experimental_settings_new_asset_list_title": "Povolení experimentální mřížky fotografií",
|
||||||
"experimental_settings_subtitle": "Používejte na vlastní riziko!",
|
"experimental_settings_subtitle": "Používejte na vlastní riziko!",
|
||||||
"experimental_settings_title": "Experimentální",
|
"experimental_settings_title": "Experimentální",
|
||||||
|
"favorites_page_title": "Oblíbené",
|
||||||
"home_page_add_to_album_conflicts": "Přidány {added} položky do alba {album}. {failed} položky jsou již v albu.",
|
"home_page_add_to_album_conflicts": "Přidány {added} položky do alba {album}. {failed} položky jsou již v albu.",
|
||||||
|
"home_page_add_to_album_err_local": "Zatím není možné přidat lokální média do alb, přeskakuje se",
|
||||||
"home_page_add_to_album_success": "Přidány položky {added} do alba {album}.",
|
"home_page_add_to_album_success": "Přidány položky {added} do alba {album}.",
|
||||||
|
"home_page_building_timeline": "Vytváraní časové osy",
|
||||||
|
"home_page_favorite_err_local": "Zatím není možné zařadit lokální média mezi oblíbená, přeskakuje se",
|
||||||
|
"home_page_first_time_notice": "Pokud aplikaci používáte poprvé, nezapomeňte si vybrat zálohovaná alba, aby se na časové ose mohly nacházet fotografie a videa z vybraných albech.",
|
||||||
|
"image_viewer_page_state_provider_download_error": "Chyba stahování",
|
||||||
|
"image_viewer_page_state_provider_download_success": "Stahování bylo úspěšné",
|
||||||
"library_page_albums": "Alba",
|
"library_page_albums": "Alba",
|
||||||
|
"library_page_favorites": "Oblíbené",
|
||||||
"library_page_new_album": "Nové album",
|
"library_page_new_album": "Nové album",
|
||||||
"login_form_button_text": "Přihlášení",
|
"library_page_sharing": "Sdílení",
|
||||||
|
"library_page_sort_created": "Naposledy vytvořené",
|
||||||
|
"library_page_sort_title": "Podle názvu alba",
|
||||||
|
"login_form_button_text": "Přihlásit se",
|
||||||
"login_form_email_hint": "tvůjmail@email.com",
|
"login_form_email_hint": "tvůjmail@email.com",
|
||||||
"login_form_endpoint_hint": "http://ip-tvého-serveru:port/api",
|
"login_form_endpoint_hint": "http://ip-tvého-serveru:port/api",
|
||||||
"login_form_endpoint_url": "URL adresa serveru",
|
"login_form_endpoint_url": "URL adresa serveru",
|
||||||
"login_form_err_http": "Prosím, uveďte http:// nebo https://",
|
"login_form_err_http": "Prosím, uveďte http:// nebo https://",
|
||||||
"login_form_err_invalid_email": "Neplatný e-mail",
|
"login_form_err_invalid_email": "Neplatný e-mail",
|
||||||
|
"login_form_err_invalid_url": "Neplatná URL",
|
||||||
"login_form_err_leading_whitespace": "Úvodní mezera",
|
"login_form_err_leading_whitespace": "Úvodní mezera",
|
||||||
"login_form_err_trailing_whitespace": "Koncová mezera",
|
"login_form_err_trailing_whitespace": "Koncová mezera",
|
||||||
"login_form_failed_get_oauth_server_config": "Chyba přihlášení pomocí OAuth, zkontrolujte adresu URL serveru",
|
"login_form_failed_get_oauth_server_config": "Chyba přihlášení pomocí OAuth, zkontrolujte adresu URL serveru",
|
||||||
@@ -128,6 +159,12 @@
|
|||||||
"login_form_password_hint": "heslo",
|
"login_form_password_hint": "heslo",
|
||||||
"login_form_save_login": "Zůstat přihlášen",
|
"login_form_save_login": "Zůstat přihlášen",
|
||||||
"monthly_title_text_date_format": "LLLL y",
|
"monthly_title_text_date_format": "LLLL y",
|
||||||
|
"notification_permission_dialog_cancel": "Zrušit",
|
||||||
|
"notification_permission_dialog_content": "Chcete-li povolit oznámení, přejděte do Nastavení a vyberte možnost Povolit.",
|
||||||
|
"notification_permission_dialog_settings": "Nastavení",
|
||||||
|
"notification_permission_list_tile_content": "Udělte oprávnění k aktivaci oznámení.",
|
||||||
|
"notification_permission_list_tile_enable_button": "Povolit oznámení",
|
||||||
|
"notification_permission_list_tile_title": "Povolení oznámení",
|
||||||
"profile_drawer_app_logs": "Logy",
|
"profile_drawer_app_logs": "Logy",
|
||||||
"profile_drawer_client_server_up_to_date": "Klient a server jsou aktuální",
|
"profile_drawer_client_server_up_to_date": "Klient a server jsou aktuální",
|
||||||
"profile_drawer_settings": "Nastavení",
|
"profile_drawer_settings": "Nastavení",
|
||||||
@@ -141,6 +178,8 @@
|
|||||||
"select_additional_user_for_sharing_page_suggestions": "Návrhy",
|
"select_additional_user_for_sharing_page_suggestions": "Návrhy",
|
||||||
"select_user_for_sharing_page_err_album": "Nepodařilo se vytvořit album",
|
"select_user_for_sharing_page_err_album": "Nepodařilo se vytvořit album",
|
||||||
"select_user_for_sharing_page_share_suggestions": "Návrhy",
|
"select_user_for_sharing_page_share_suggestions": "Návrhy",
|
||||||
|
"server_info_box_app_version": "Verze aplikace",
|
||||||
|
"server_info_box_server_version": "Verze serveru",
|
||||||
"setting_image_viewer_help": "V prohlížeči detailů se nejprve načte malá miniatura, poté se načte náhled střední velikosti (je-li povolen) a nakonec se načte originál (je-li povolen).",
|
"setting_image_viewer_help": "V prohlížeči detailů se nejprve načte malá miniatura, poté se načte náhled střední velikosti (je-li povolen) a nakonec se načte originál (je-li povolen).",
|
||||||
"setting_image_viewer_original_subtitle": "Umožňuje načíst původní obrázek v plném rozlišení (velký!). Zakázat pro snížení používání dat (v síti iv mezipaměti zařízení).",
|
"setting_image_viewer_original_subtitle": "Umožňuje načíst původní obrázek v plném rozlišení (velký!). Zakázat pro snížení používání dat (v síti iv mezipaměti zařízení).",
|
||||||
"setting_image_viewer_original_title": "Načíst původní obrázek",
|
"setting_image_viewer_original_title": "Načíst původní obrázek",
|
||||||
@@ -158,7 +197,7 @@
|
|||||||
"setting_notifications_title": "Oznámení",
|
"setting_notifications_title": "Oznámení",
|
||||||
"setting_notifications_total_progress_subtitle": "Celkový průběh nahrávání (hotové/celkové položky)",
|
"setting_notifications_total_progress_subtitle": "Celkový průběh nahrávání (hotové/celkové položky)",
|
||||||
"setting_notifications_total_progress_title": "Zobrazit celkový průběh zálohování na pozadí",
|
"setting_notifications_total_progress_title": "Zobrazit celkový průběh zálohování na pozadí",
|
||||||
"setting_pages_app_bar_settings": "nastavení",
|
"setting_pages_app_bar_settings": "Nastavení",
|
||||||
"settings_require_restart": "Pro použití tohoto nastavení restartujte Immich",
|
"settings_require_restart": "Pro použití tohoto nastavení restartujte Immich",
|
||||||
"share_add": "Přidat",
|
"share_add": "Přidat",
|
||||||
"share_add_photos": "Přidat fotografie",
|
"share_add_photos": "Přidat fotografie",
|
||||||
@@ -168,15 +207,15 @@
|
|||||||
"share_invite": "Pozvat do alba",
|
"share_invite": "Pozvat do alba",
|
||||||
"sharing_page_album": "Shared albums",
|
"sharing_page_album": "Shared albums",
|
||||||
"sharing_page_description": "Vytvářejte sdílená alba a sdílejte fotografie a videa s lidmi ve vaší síti.",
|
"sharing_page_description": "Vytvářejte sdílená alba a sdílejte fotografie a videa s lidmi ve vaší síti.",
|
||||||
"sharing_page_empty_list": "Prázný dopis",
|
"sharing_page_empty_list": "Prázdný dopis",
|
||||||
"sharing_silver_appbar_create_shared_album": "Vytvořit sdílené album",
|
"sharing_silver_appbar_create_shared_album": "Vytvořit sdílené album",
|
||||||
"sharing_silver_appbar_share_partner": "Sdílet s partnerem",
|
"sharing_silver_appbar_share_partner": "Sdílet s partnerem",
|
||||||
"tab_controller_nav_library": "Knihovna",
|
"tab_controller_nav_library": "Knihovna",
|
||||||
"tab_controller_nav_photos": "Fotografie",
|
"tab_controller_nav_photos": "Fotografie",
|
||||||
"tab_controller_nav_search": "Vyhledávání",
|
"tab_controller_nav_search": "Vyhledávání",
|
||||||
"tab_controller_nav_sharing": "Sdílení",
|
"tab_controller_nav_sharing": "Sdílení",
|
||||||
"theme_setting_asset_list_storage_indicator_title": "Zobrazit indikátor úložiště na dlaždicích zdrojů",
|
"theme_setting_asset_list_storage_indicator_title": "Zobrazit indikátor úložiště na dlaždicích položek",
|
||||||
"theme_setting_asset_list_tiles_per_row_title": "Počet aktiv na řádek ({})",
|
"theme_setting_asset_list_tiles_per_row_title": "Počet položek na řádek ({})",
|
||||||
"theme_setting_dark_mode_switch": "Tmavé téma",
|
"theme_setting_dark_mode_switch": "Tmavé téma",
|
||||||
"theme_setting_image_viewer_quality_subtitle": "Přizpůsobení kvality prohlížeče detailů",
|
"theme_setting_image_viewer_quality_subtitle": "Přizpůsobení kvality prohlížeče detailů",
|
||||||
"theme_setting_image_viewer_quality_title": "Kvalita prohlížeče obrázků",
|
"theme_setting_image_viewer_quality_title": "Kvalita prohlížeče obrázků",
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
{
|
{
|
||||||
|
"add_to_album_bottom_sheet_added": "Added to {album}",
|
||||||
|
"add_to_album_bottom_sheet_already_exists": "Already in {album}",
|
||||||
"album_info_card_backup_album_excluded": "EKSKLUDERET",
|
"album_info_card_backup_album_excluded": "EKSKLUDERET",
|
||||||
"album_info_card_backup_album_included": "INKLUDERET",
|
"album_info_card_backup_album_included": "INKLUDERET",
|
||||||
"album_thumbnail_card_item": "1 genstand",
|
"album_thumbnail_card_item": "1 genstand",
|
||||||
@@ -12,6 +14,10 @@
|
|||||||
"album_viewer_appbar_share_leave": "Forlad album",
|
"album_viewer_appbar_share_leave": "Forlad album",
|
||||||
"album_viewer_appbar_share_remove": "Fjern fra album",
|
"album_viewer_appbar_share_remove": "Fjern fra album",
|
||||||
"album_viewer_page_share_add_users": "Tilføj brugere",
|
"album_viewer_page_share_add_users": "Tilføj brugere",
|
||||||
|
"asset_list_layout_settings_dynamic_layout_title": "Dynamisk layout",
|
||||||
|
"asset_list_layout_settings_group_by": "Gruppér elementer pr. ",
|
||||||
|
"asset_list_layout_settings_group_by_month": "Måned",
|
||||||
|
"asset_list_layout_settings_group_by_month_day": "Måned + dag",
|
||||||
"asset_list_settings_subtitle": "Indstillinger for billedgitterlayout",
|
"asset_list_settings_subtitle": "Indstillinger for billedgitterlayout",
|
||||||
"asset_list_settings_title": "Billedgitter",
|
"asset_list_settings_title": "Billedgitter",
|
||||||
"backup_album_selection_page_albums_device": "Albummer på enhed ({})",
|
"backup_album_selection_page_albums_device": "Albummer på enhed ({})",
|
||||||
@@ -21,22 +27,25 @@
|
|||||||
"backup_album_selection_page_selection_info": "Oplysninger om valgte",
|
"backup_album_selection_page_selection_info": "Oplysninger om valgte",
|
||||||
"backup_album_selection_page_total_assets": "Samlede unikke elementer",
|
"backup_album_selection_page_total_assets": "Samlede unikke elementer",
|
||||||
"backup_all": "Alt",
|
"backup_all": "Alt",
|
||||||
"backup_background_service_backup_failed_message": "Backup af billeder og videoer fejlede. Forsøger igen...",
|
"backup_background_service_backup_failed_message": "Backup af elementer fejlede. Forsøger igen...",
|
||||||
"backup_background_service_connection_failed_message": "Forbindelsen til serveren blev tabt. Forsøger igen...",
|
"backup_background_service_connection_failed_message": "Forbindelsen til serveren blev tabt. Forsøger igen...",
|
||||||
"backup_background_service_current_upload_notification": "Uploader {}",
|
"backup_background_service_current_upload_notification": "Uploader {}",
|
||||||
"backup_background_service_default_notification": "Checking for new assets…",
|
"backup_background_service_default_notification": "Søger efter nye elementer...",
|
||||||
"backup_background_service_error_title": "Fejl med backup",
|
"backup_background_service_error_title": "Fejl med backup",
|
||||||
"backup_background_service_in_progress_notification": "Tager backup af dine billeder og videoer...",
|
"backup_background_service_in_progress_notification": "Tager backup af dine elementer...",
|
||||||
"backup_background_service_upload_failure_notification": "Failed to upload {}",
|
"backup_background_service_upload_failure_notification": "Failed to upload {}",
|
||||||
"backup_controller_page_albums": "Sikkerhedskopiér albummer",
|
"backup_controller_page_albums": "Sikkerhedskopiér albummer",
|
||||||
|
"backup_controller_page_background_app_refresh_disabled_content": "Enable background app refresh in Settings > General > Background App Refresh in order to use background backup.",
|
||||||
|
"backup_controller_page_background_app_refresh_disabled_title": "Background app refresh disabled",
|
||||||
|
"backup_controller_page_background_app_refresh_enable_button_text": "Go to settings",
|
||||||
"backup_controller_page_background_battery_info_link": "Vis mig hvordan",
|
"backup_controller_page_background_battery_info_link": "Vis mig hvordan",
|
||||||
"backup_controller_page_background_battery_info_message": "For den bedste oplevelse med baggrundsbackup, bør du slå batterioptimering, der begrænder baggrundsaktivitet, fra.\n\nSiden dette er afhængigt af enheden, bør du undersøge denne information leveret af din enheds producent.",
|
"backup_controller_page_background_battery_info_message": "For den bedste oplevelse med baggrundsbackup, bør du slå batterioptimering, der begrænder baggrundsaktivitet, fra.\n\nSiden dette er afhængigt af enheden, bør du undersøge denne information leveret af din enheds producent.",
|
||||||
"backup_controller_page_background_battery_info_ok": "OK",
|
"backup_controller_page_background_battery_info_ok": "OK",
|
||||||
"backup_controller_page_background_battery_info_title": "Batterioptimering",
|
"backup_controller_page_background_battery_info_title": "Batterioptimering",
|
||||||
"backup_controller_page_background_charging": "Kun under opladning",
|
"backup_controller_page_background_charging": "Kun under opladning",
|
||||||
"backup_controller_page_background_configure_error": "Fejlede konfigureringen af baggrundsbackup",
|
"backup_controller_page_background_configure_error": "Fejlede konfigureringen af baggrundsbackup",
|
||||||
"backup_controller_page_background_delay": "Udskyd backup af nye billeder og videoer: {}",
|
"backup_controller_page_background_delay": "Udskyd backup af nye elementer: {}",
|
||||||
"backup_controller_page_background_description": "Slå baggrundsbackup til, for automatisk at tage backup af nye billeder og videoer, uden at skulle åbne appen",
|
"backup_controller_page_background_description": "Slå baggrundsbackup til, for automatisk at tage backup af nye elementer, uden at skulle åbne appen",
|
||||||
"backup_controller_page_background_is_off": "Automatisk baggrundsbackup er slået fra",
|
"backup_controller_page_background_is_off": "Automatisk baggrundsbackup er slået fra",
|
||||||
"backup_controller_page_background_is_on": "Automatisk baggrundsbackup er slået til",
|
"backup_controller_page_background_is_on": "Automatisk baggrundsbackup er slået til",
|
||||||
"backup_controller_page_background_turn_off": "Slå baggrundsbackup fra",
|
"backup_controller_page_background_turn_off": "Slå baggrundsbackup fra",
|
||||||
@@ -70,24 +79,34 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Uploader filinformation",
|
"backup_controller_page_uploading_file_info": "Uploader filinformation",
|
||||||
"backup_err_only_album": "Kan ikke slette det eneste album",
|
"backup_err_only_album": "Kan ikke slette det eneste album",
|
||||||
"backup_info_card_assets": "elementer",
|
"backup_info_card_assets": "elementer",
|
||||||
"cache_settings_album_thumbnails": "Biblioteksminiaturebilleder ({} billeder og videoer)",
|
"cache_settings_album_thumbnails": "Biblioteksminiaturebilleder ({} elementer)",
|
||||||
"cache_settings_clear_cache_button": "Fjern cache",
|
"cache_settings_clear_cache_button": "Fjern cache",
|
||||||
"cache_settings_clear_cache_button_title": "Fjern appens cache. Dette vil i stor grad påvirke appens ydeevne indtil cachen er genopbygget.",
|
"cache_settings_clear_cache_button_title": "Fjern appens cache. Dette vil i stor grad påvirke appens ydeevne indtil cachen er genopbygget.",
|
||||||
"cache_settings_image_cache_size": "Størrelse af billedecache ({} billeder og videoer)",
|
"cache_settings_image_cache_size": "Størrelse af billedecache ({} elementer)",
|
||||||
"cache_settings_statistics_album": "Biblioteksminiaturer",
|
"cache_settings_statistics_album": "Biblioteksminiaturer",
|
||||||
"cache_settings_statistics_assets": "{} billeder og videoer ({})",
|
"cache_settings_statistics_assets": "{} elementer ({})",
|
||||||
"cache_settings_statistics_full": "Fulde billeder",
|
"cache_settings_statistics_full": "Fulde billeder",
|
||||||
"cache_settings_statistics_shared": "Miniaturebilleder til delte albummer",
|
"cache_settings_statistics_shared": "Miniaturebilleder til delte albummer",
|
||||||
"cache_settings_statistics_thumbnail": "Miniaturebilleder",
|
"cache_settings_statistics_thumbnail": "Miniaturebilleder",
|
||||||
"cache_settings_statistics_title": "Cacheforbrug",
|
"cache_settings_statistics_title": "Cacheforbrug",
|
||||||
"cache_settings_subtitle": "Håndter cache-adfærden for Immich-appen.",
|
"cache_settings_subtitle": "Håndter cache-adfærden for Immich-appen.",
|
||||||
"cache_settings_thumbnail_size": "Størrelse af miniaturebillede cache ({} billeder og videoer)",
|
"cache_settings_thumbnail_size": "Størrelse af miniaturebillede cache ({} elementer)",
|
||||||
"cache_settings_title": "Cache-indstillinger",
|
"cache_settings_title": "Cache-indstillinger",
|
||||||
|
"change_password_form_confirm_password": "Confirm Password",
|
||||||
|
"change_password_form_description": "Hi {firstName} {lastName},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.",
|
||||||
|
"change_password_form_new_password": "New Password",
|
||||||
|
"change_password_form_password_mismatch": "Passwords do not match",
|
||||||
|
"change_password_form_reenter_new_password": "Re-enter New Password",
|
||||||
|
"common_add_to_album": "Add to album",
|
||||||
|
"common_change_password": "Change Password",
|
||||||
|
"common_create_new_album": "Create new album",
|
||||||
|
"common_shared": "Shared",
|
||||||
"control_bottom_app_bar_add_to_album": "Tilføj til album",
|
"control_bottom_app_bar_add_to_album": "Tilføj til album",
|
||||||
"control_bottom_app_bar_album_info": "{} genstande",
|
"control_bottom_app_bar_album_info": "{} genstande",
|
||||||
"control_bottom_app_bar_album_info_shared": "{} genstande • Delt",
|
"control_bottom_app_bar_album_info_shared": "{} genstande • Delt",
|
||||||
"control_bottom_app_bar_create_new_album": "Opret nyt album",
|
"control_bottom_app_bar_create_new_album": "Opret nyt album",
|
||||||
"control_bottom_app_bar_delete": "Slet",
|
"control_bottom_app_bar_delete": "Slet",
|
||||||
|
"control_bottom_app_bar_favorite": "Favorite",
|
||||||
"control_bottom_app_bar_share": "Del",
|
"control_bottom_app_bar_share": "Del",
|
||||||
"create_album_page_untitled": "Uden titel",
|
"create_album_page_untitled": "Uden titel",
|
||||||
"create_shared_album_page_create": "Opret",
|
"create_shared_album_page_create": "Opret",
|
||||||
@@ -108,27 +127,44 @@
|
|||||||
"experimental_settings_new_asset_list_title": "Aktiver eksperimentelt fotogitter",
|
"experimental_settings_new_asset_list_title": "Aktiver eksperimentelt fotogitter",
|
||||||
"experimental_settings_subtitle": "Brug på eget ansvar!",
|
"experimental_settings_subtitle": "Brug på eget ansvar!",
|
||||||
"experimental_settings_title": "Eksperimentelle",
|
"experimental_settings_title": "Eksperimentelle",
|
||||||
"home_page_add_to_album_conflicts": "Tilføjede {added} billeder og videoer til album {album}. {failed} billeder og videoer er allerede i albummet.",
|
"favorites_page_title": "Favoritter",
|
||||||
"home_page_add_to_album_success": "Tilføjede {added} billeder og videoer til album {album}.",
|
"home_page_add_to_album_conflicts": "Tilføjede {added} elementer til album {album}. {failed} elementer er allerede i albummet.",
|
||||||
|
"home_page_add_to_album_err_local": "Can not add local assets to albums yet, skipping",
|
||||||
|
"home_page_add_to_album_success": "Tilføjede {added} elementer til album {album}.",
|
||||||
|
"home_page_building_timeline": "Bygger tidslinjen",
|
||||||
|
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
||||||
|
"home_page_first_time_notice": "Hvis dette er din første gang i appen, bedes du vælge en backup af albummer så tidlinjen kan blive fyldt med billeder og videoer fra albummerne.",
|
||||||
|
"image_viewer_page_state_provider_download_error": "Download Error",
|
||||||
|
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||||
"library_page_albums": "Albummer",
|
"library_page_albums": "Albummer",
|
||||||
|
"library_page_favorites": "Favoritter",
|
||||||
"library_page_new_album": "Nyt album",
|
"library_page_new_album": "Nyt album",
|
||||||
|
"library_page_sharing": "Delte",
|
||||||
|
"library_page_sort_created": "Senest oprettet",
|
||||||
|
"library_page_sort_title": "Albumtitel",
|
||||||
"login_form_button_text": "Log ind",
|
"login_form_button_text": "Log ind",
|
||||||
"login_form_email_hint": "din-email@email.com",
|
"login_form_email_hint": "din-e-mail@e-mail.com",
|
||||||
"login_form_endpoint_hint": "http://din-server-ip:port/api",
|
"login_form_endpoint_hint": "http://din-server-ip:port/api",
|
||||||
"login_form_endpoint_url": "Server Endpoint URL",
|
"login_form_endpoint_url": "Server Endpoint URL",
|
||||||
"login_form_err_http": "Angiv venligst http:// eller https://",
|
"login_form_err_http": "Angiv venligst http:// eller https://",
|
||||||
"login_form_err_invalid_email": "Ugyldig email",
|
"login_form_err_invalid_email": "Ugyldig e-mail",
|
||||||
"login_form_err_invalid_url": "Invalid URL",
|
"login_form_err_invalid_url": "Ugyldig webadresse",
|
||||||
"login_form_err_leading_whitespace": "Mellemrum før",
|
"login_form_err_leading_whitespace": "Mellemrum før",
|
||||||
"login_form_err_trailing_whitespace": "Mellemrum efter",
|
"login_form_err_trailing_whitespace": "Mellemrum efter",
|
||||||
"login_form_failed_get_oauth_server_config": "Fejl med at logge på med OAuth. Tjek serveres URL",
|
"login_form_failed_get_oauth_server_config": "Fejl med at logge på med OAuth. Tjek serveres webadresse",
|
||||||
"login_form_failed_get_oauth_server_disable": "OAuth er ikke tilgængelig på denne server",
|
"login_form_failed_get_oauth_server_disable": "OAuth er ikke tilgængelig på denne server",
|
||||||
"login_form_failed_login": "Der opstod en vejl ved at logge ind. Tjek server URL, email og kodeordet",
|
"login_form_failed_login": "Der opstod en vejl ved at logge ind. Tjek server webadressen, e-mailen og kodeordet",
|
||||||
"login_form_label_email": "Email",
|
"login_form_label_email": "E-mail",
|
||||||
"login_form_label_password": "Kodeord",
|
"login_form_label_password": "Kodeord",
|
||||||
"login_form_password_hint": "kodeord",
|
"login_form_password_hint": "kodeord",
|
||||||
"login_form_save_login": "Forbliv logget ind",
|
"login_form_save_login": "Forbliv logget ind",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
|
"notification_permission_dialog_cancel": "Cancel",
|
||||||
|
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
|
||||||
|
"notification_permission_dialog_settings": "Settings",
|
||||||
|
"notification_permission_list_tile_content": "Grant permission to enable notifications.",
|
||||||
|
"notification_permission_list_tile_enable_button": "Enable Notifications",
|
||||||
|
"notification_permission_list_tile_title": "Notification Permission",
|
||||||
"profile_drawer_app_logs": "Log",
|
"profile_drawer_app_logs": "Log",
|
||||||
"profile_drawer_client_server_up_to_date": "Klient og server er ajour",
|
"profile_drawer_client_server_up_to_date": "Klient og server er ajour",
|
||||||
"profile_drawer_settings": "Indstillinger",
|
"profile_drawer_settings": "Indstillinger",
|
||||||
@@ -142,6 +178,8 @@
|
|||||||
"select_additional_user_for_sharing_page_suggestions": "Anbefalinger",
|
"select_additional_user_for_sharing_page_suggestions": "Anbefalinger",
|
||||||
"select_user_for_sharing_page_err_album": "Fejlede i at oprette et nyt album",
|
"select_user_for_sharing_page_err_album": "Fejlede i at oprette et nyt album",
|
||||||
"select_user_for_sharing_page_share_suggestions": "Anbefalinger",
|
"select_user_for_sharing_page_share_suggestions": "Anbefalinger",
|
||||||
|
"server_info_box_app_version": "App Version",
|
||||||
|
"server_info_box_server_version": "Server Version",
|
||||||
"setting_image_viewer_help": "Detaljeret visning indlæser miniaturebilleder først. Herefter indlæses mediumstørrelse forhåndsvisning af billedet (hvis dette er slået til), for til sidst at vise originalen (hvis dette er slået til).",
|
"setting_image_viewer_help": "Detaljeret visning indlæser miniaturebilleder først. Herefter indlæses mediumstørrelse forhåndsvisning af billedet (hvis dette er slået til), for til sidst at vise originalen (hvis dette er slået til).",
|
||||||
"setting_image_viewer_original_subtitle": "Slå indlæsning af originalbillede i fuld størrelse til (stort!). Deaktiver for at reducere dataforbruget (både på netværket og for enhedscache).",
|
"setting_image_viewer_original_subtitle": "Slå indlæsning af originalbillede i fuld størrelse til (stort!). Deaktiver for at reducere dataforbruget (både på netværket og for enhedscache).",
|
||||||
"setting_image_viewer_original_title": "Indlæs originalbillede",
|
"setting_image_viewer_original_title": "Indlæs originalbillede",
|
||||||
@@ -153,11 +191,11 @@
|
|||||||
"setting_notifications_notify_minutes": "{} minutter",
|
"setting_notifications_notify_minutes": "{} minutter",
|
||||||
"setting_notifications_notify_never": "aldrig",
|
"setting_notifications_notify_never": "aldrig",
|
||||||
"setting_notifications_notify_seconds": "{} sekunder",
|
"setting_notifications_notify_seconds": "{} sekunder",
|
||||||
"setting_notifications_single_progress_subtitle": "Detaljeret uploadstatus pr. billed og video",
|
"setting_notifications_single_progress_subtitle": "Detaljeret uploadstatus pr. element",
|
||||||
"setting_notifications_single_progress_title": "Vis detaljeret baggrundsuploadstatus",
|
"setting_notifications_single_progress_title": "Vis detaljeret baggrundsuploadstatus",
|
||||||
"setting_notifications_subtitle": "Tilpas dine notifikationspræferencer",
|
"setting_notifications_subtitle": "Tilpas dine notifikationspræferencer",
|
||||||
"setting_notifications_title": "Notifikationer",
|
"setting_notifications_title": "Notifikationer",
|
||||||
"setting_notifications_total_progress_subtitle": "Samlet uploadstatus (færdige/samlede billeder og videoer)",
|
"setting_notifications_total_progress_subtitle": "Samlet uploadstatus (færdige/samlet antal elementer)",
|
||||||
"setting_notifications_total_progress_title": "Vis samlet baggrundsuploadstatus",
|
"setting_notifications_total_progress_title": "Vis samlet baggrundsuploadstatus",
|
||||||
"setting_pages_app_bar_settings": "Indstillinger",
|
"setting_pages_app_bar_settings": "Indstillinger",
|
||||||
"settings_require_restart": "Genstart venligst Immich for at anvende denne ændring",
|
"settings_require_restart": "Genstart venligst Immich for at anvende denne ændring",
|
||||||
@@ -177,7 +215,7 @@
|
|||||||
"tab_controller_nav_search": "Søg",
|
"tab_controller_nav_search": "Søg",
|
||||||
"tab_controller_nav_sharing": "Deling",
|
"tab_controller_nav_sharing": "Deling",
|
||||||
"theme_setting_asset_list_storage_indicator_title": "Vis opbevaringsindikator på filer",
|
"theme_setting_asset_list_storage_indicator_title": "Vis opbevaringsindikator på filer",
|
||||||
"theme_setting_asset_list_tiles_per_row_title": "Antal billeder og videoer per række ({})",
|
"theme_setting_asset_list_tiles_per_row_title": "Antal elementer per række ({})",
|
||||||
"theme_setting_dark_mode_switch": "Mørk tilstand",
|
"theme_setting_dark_mode_switch": "Mørk tilstand",
|
||||||
"theme_setting_image_viewer_quality_subtitle": "Juster kvaliteten i billedfremviseren",
|
"theme_setting_image_viewer_quality_subtitle": "Juster kvaliteten i billedfremviseren",
|
||||||
"theme_setting_image_viewer_quality_title": "Billedfremviserkvalitet",
|
"theme_setting_image_viewer_quality_title": "Billedfremviserkvalitet",
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
{
|
{
|
||||||
|
"add_to_album_bottom_sheet_added": "Added to {album}",
|
||||||
|
"add_to_album_bottom_sheet_already_exists": "Already in {album}",
|
||||||
"album_info_card_backup_album_excluded": "AUSGESCHLOSSEN",
|
"album_info_card_backup_album_excluded": "AUSGESCHLOSSEN",
|
||||||
"album_info_card_backup_album_included": "EINGESCHLOSSEN",
|
"album_info_card_backup_album_included": "EINGESCHLOSSEN",
|
||||||
"album_thumbnail_card_item": "1 Element",
|
"album_thumbnail_card_item": "1 Element",
|
||||||
@@ -12,6 +14,10 @@
|
|||||||
"album_viewer_appbar_share_leave": "Album verlassen",
|
"album_viewer_appbar_share_leave": "Album verlassen",
|
||||||
"album_viewer_appbar_share_remove": "Entferne vom Album",
|
"album_viewer_appbar_share_remove": "Entferne vom Album",
|
||||||
"album_viewer_page_share_add_users": "Nutzer hinzufügen",
|
"album_viewer_page_share_add_users": "Nutzer hinzufügen",
|
||||||
|
"asset_list_layout_settings_dynamic_layout_title": "Dynamic layout",
|
||||||
|
"asset_list_layout_settings_group_by": "Group assets by",
|
||||||
|
"asset_list_layout_settings_group_by_month": "Month",
|
||||||
|
"asset_list_layout_settings_group_by_month_day": "Month + day",
|
||||||
"asset_list_settings_subtitle": "Photo grid layout settings",
|
"asset_list_settings_subtitle": "Photo grid layout settings",
|
||||||
"asset_list_settings_title": "Photo Grid",
|
"asset_list_settings_title": "Photo Grid",
|
||||||
"backup_album_selection_page_albums_device": "Alben auf dem Gerät ({})",
|
"backup_album_selection_page_albums_device": "Alben auf dem Gerät ({})",
|
||||||
@@ -29,6 +35,9 @@
|
|||||||
"backup_background_service_in_progress_notification": "Backing up your assets…",
|
"backup_background_service_in_progress_notification": "Backing up your assets…",
|
||||||
"backup_background_service_upload_failure_notification": "Failed to upload {}",
|
"backup_background_service_upload_failure_notification": "Failed to upload {}",
|
||||||
"backup_controller_page_albums": "Gesicherte Alben",
|
"backup_controller_page_albums": "Gesicherte Alben",
|
||||||
|
"backup_controller_page_background_app_refresh_disabled_content": "Enable background app refresh in Settings > General > Background App Refresh in order to use background backup.",
|
||||||
|
"backup_controller_page_background_app_refresh_disabled_title": "Background app refresh disabled",
|
||||||
|
"backup_controller_page_background_app_refresh_enable_button_text": "Go to settings",
|
||||||
"backup_controller_page_background_battery_info_link": "Show me how",
|
"backup_controller_page_background_battery_info_link": "Show me how",
|
||||||
"backup_controller_page_background_battery_info_message": "For the best background backup experience, please disable any battery optimizations restricting background activity for Immich.\n\nSince this is device-specific, please lookup the required information for your device manufacturer.",
|
"backup_controller_page_background_battery_info_message": "For the best background backup experience, please disable any battery optimizations restricting background activity for Immich.\n\nSince this is device-specific, please lookup the required information for your device manufacturer.",
|
||||||
"backup_controller_page_background_battery_info_ok": "OK",
|
"backup_controller_page_background_battery_info_ok": "OK",
|
||||||
@@ -83,11 +92,21 @@
|
|||||||
"cache_settings_subtitle": "Control the caching behaviour of the Immich mobile application",
|
"cache_settings_subtitle": "Control the caching behaviour of the Immich mobile application",
|
||||||
"cache_settings_thumbnail_size": "Thumbnail cache size ({} assets)",
|
"cache_settings_thumbnail_size": "Thumbnail cache size ({} assets)",
|
||||||
"cache_settings_title": "Caching Settings",
|
"cache_settings_title": "Caching Settings",
|
||||||
|
"change_password_form_confirm_password": "Confirm Password",
|
||||||
|
"change_password_form_description": "Hi {firstName} {lastName},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.",
|
||||||
|
"change_password_form_new_password": "New Password",
|
||||||
|
"change_password_form_password_mismatch": "Passwords do not match",
|
||||||
|
"change_password_form_reenter_new_password": "Re-enter New Password",
|
||||||
|
"common_add_to_album": "Add to album",
|
||||||
|
"common_change_password": "Change Password",
|
||||||
|
"common_create_new_album": "Create new album",
|
||||||
|
"common_shared": "Shared",
|
||||||
"control_bottom_app_bar_add_to_album": "Add to album",
|
"control_bottom_app_bar_add_to_album": "Add to album",
|
||||||
"control_bottom_app_bar_album_info": "{} items",
|
"control_bottom_app_bar_album_info": "{} items",
|
||||||
"control_bottom_app_bar_album_info_shared": "{} items · Shared",
|
"control_bottom_app_bar_album_info_shared": "{} items · Shared",
|
||||||
"control_bottom_app_bar_create_new_album": "Neues Album erstellen",
|
"control_bottom_app_bar_create_new_album": "Neues Album erstellen",
|
||||||
"control_bottom_app_bar_delete": "Löschen",
|
"control_bottom_app_bar_delete": "Löschen",
|
||||||
|
"control_bottom_app_bar_favorite": "Favorite",
|
||||||
"control_bottom_app_bar_share": "Teilen",
|
"control_bottom_app_bar_share": "Teilen",
|
||||||
"create_album_page_untitled": "Unbenannt",
|
"create_album_page_untitled": "Unbenannt",
|
||||||
"create_shared_album_page_create": "Erstellen",
|
"create_shared_album_page_create": "Erstellen",
|
||||||
@@ -108,10 +127,21 @@
|
|||||||
"experimental_settings_new_asset_list_title": "Enable experimental photo grid",
|
"experimental_settings_new_asset_list_title": "Enable experimental photo grid",
|
||||||
"experimental_settings_subtitle": "Use at your own risk!",
|
"experimental_settings_subtitle": "Use at your own risk!",
|
||||||
"experimental_settings_title": "Experimentell",
|
"experimental_settings_title": "Experimentell",
|
||||||
|
"favorites_page_title": "Favorites",
|
||||||
"home_page_add_to_album_conflicts": "Added {added} assets to album {album}. {failed} assets are already in the album.",
|
"home_page_add_to_album_conflicts": "Added {added} assets to album {album}. {failed} assets are already in the album.",
|
||||||
|
"home_page_add_to_album_err_local": "Can not add local assets to albums yet, skipping",
|
||||||
"home_page_add_to_album_success": "Added {added} assets to album {album}.",
|
"home_page_add_to_album_success": "Added {added} assets to album {album}.",
|
||||||
|
"home_page_building_timeline": "Building the timeline",
|
||||||
|
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
||||||
|
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
||||||
|
"image_viewer_page_state_provider_download_error": "Download Error",
|
||||||
|
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||||
"library_page_albums": "Alben",
|
"library_page_albums": "Alben",
|
||||||
|
"library_page_favorites": "Favorites",
|
||||||
"library_page_new_album": "Neues Album",
|
"library_page_new_album": "Neues Album",
|
||||||
|
"library_page_sharing": "Sharing",
|
||||||
|
"library_page_sort_created": "Most recently created",
|
||||||
|
"library_page_sort_title": "Album title",
|
||||||
"login_form_button_text": "Anmelden",
|
"login_form_button_text": "Anmelden",
|
||||||
"login_form_email_hint": "deine@email.de",
|
"login_form_email_hint": "deine@email.de",
|
||||||
"login_form_endpoint_hint": "http://deine-server-ip:port/api",
|
"login_form_endpoint_hint": "http://deine-server-ip:port/api",
|
||||||
@@ -129,6 +159,12 @@
|
|||||||
"login_form_password_hint": "password",
|
"login_form_password_hint": "password",
|
||||||
"login_form_save_login": "Angemeldet bleiben",
|
"login_form_save_login": "Angemeldet bleiben",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
|
"notification_permission_dialog_cancel": "Cancel",
|
||||||
|
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
|
||||||
|
"notification_permission_dialog_settings": "Settings",
|
||||||
|
"notification_permission_list_tile_content": "Grant permission to enable notifications.",
|
||||||
|
"notification_permission_list_tile_enable_button": "Enable Notifications",
|
||||||
|
"notification_permission_list_tile_title": "Notification Permission",
|
||||||
"profile_drawer_app_logs": "Logs",
|
"profile_drawer_app_logs": "Logs",
|
||||||
"profile_drawer_client_server_up_to_date": "App und Server sind aktuell",
|
"profile_drawer_client_server_up_to_date": "App und Server sind aktuell",
|
||||||
"profile_drawer_settings": "Einstellungen",
|
"profile_drawer_settings": "Einstellungen",
|
||||||
@@ -142,6 +178,8 @@
|
|||||||
"select_additional_user_for_sharing_page_suggestions": "Vorschläge",
|
"select_additional_user_for_sharing_page_suggestions": "Vorschläge",
|
||||||
"select_user_for_sharing_page_err_album": "Album konnte nicht erstellt werden",
|
"select_user_for_sharing_page_err_album": "Album konnte nicht erstellt werden",
|
||||||
"select_user_for_sharing_page_share_suggestions": "Suggestions",
|
"select_user_for_sharing_page_share_suggestions": "Suggestions",
|
||||||
|
"server_info_box_app_version": "App Version",
|
||||||
|
"server_info_box_server_version": "Server Version",
|
||||||
"setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).",
|
"setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).",
|
||||||
"setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).",
|
"setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).",
|
||||||
"setting_image_viewer_original_title": "Load original image",
|
"setting_image_viewer_original_title": "Load original image",
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
{
|
{
|
||||||
|
"add_to_album_bottom_sheet_added": "Added to {album}",
|
||||||
|
"add_to_album_bottom_sheet_already_exists": "Already in {album}",
|
||||||
"album_info_card_backup_album_excluded": "EXCLUDED",
|
"album_info_card_backup_album_excluded": "EXCLUDED",
|
||||||
"album_info_card_backup_album_included": "INCLUDED",
|
"album_info_card_backup_album_included": "INCLUDED",
|
||||||
"album_thumbnail_card_item": "1 item",
|
"album_thumbnail_card_item": "1 item",
|
||||||
@@ -12,6 +14,10 @@
|
|||||||
"album_viewer_appbar_share_leave": "Leave album",
|
"album_viewer_appbar_share_leave": "Leave album",
|
||||||
"album_viewer_appbar_share_remove": "Remove from album",
|
"album_viewer_appbar_share_remove": "Remove from album",
|
||||||
"album_viewer_page_share_add_users": "Add users",
|
"album_viewer_page_share_add_users": "Add users",
|
||||||
|
"asset_list_layout_settings_dynamic_layout_title": "Dynamic layout",
|
||||||
|
"asset_list_layout_settings_group_by": "Group assets by",
|
||||||
|
"asset_list_layout_settings_group_by_month": "Month",
|
||||||
|
"asset_list_layout_settings_group_by_month_day": "Month + day",
|
||||||
"asset_list_settings_subtitle": "Photo grid layout settings",
|
"asset_list_settings_subtitle": "Photo grid layout settings",
|
||||||
"asset_list_settings_title": "Photo Grid",
|
"asset_list_settings_title": "Photo Grid",
|
||||||
"backup_album_selection_page_albums_device": "Albums on device ({})",
|
"backup_album_selection_page_albums_device": "Albums on device ({})",
|
||||||
@@ -29,6 +35,9 @@
|
|||||||
"backup_background_service_in_progress_notification": "Backing up your assets…",
|
"backup_background_service_in_progress_notification": "Backing up your assets…",
|
||||||
"backup_background_service_upload_failure_notification": "Failed to upload {}",
|
"backup_background_service_upload_failure_notification": "Failed to upload {}",
|
||||||
"backup_controller_page_albums": "Backup Albums",
|
"backup_controller_page_albums": "Backup Albums",
|
||||||
|
"backup_controller_page_background_app_refresh_disabled_content": "Enable background app refresh in Settings > General > Background App Refresh in order to use background backup.",
|
||||||
|
"backup_controller_page_background_app_refresh_disabled_title": "Background app refresh disabled",
|
||||||
|
"backup_controller_page_background_app_refresh_enable_button_text": "Go to settings",
|
||||||
"backup_controller_page_background_battery_info_link": "Show me how",
|
"backup_controller_page_background_battery_info_link": "Show me how",
|
||||||
"backup_controller_page_background_battery_info_message": "For the best background backup experience, please disable any battery optimizations restricting background activity for Immich.\n\nSince this is device-specific, please lookup the required information for your device manufacturer.",
|
"backup_controller_page_background_battery_info_message": "For the best background backup experience, please disable any battery optimizations restricting background activity for Immich.\n\nSince this is device-specific, please lookup the required information for your device manufacturer.",
|
||||||
"backup_controller_page_background_battery_info_ok": "OK",
|
"backup_controller_page_background_battery_info_ok": "OK",
|
||||||
@@ -83,11 +92,21 @@
|
|||||||
"cache_settings_subtitle": "Control the caching behaviour of the Immich mobile application",
|
"cache_settings_subtitle": "Control the caching behaviour of the Immich mobile application",
|
||||||
"cache_settings_thumbnail_size": "Thumbnail cache size ({} assets)",
|
"cache_settings_thumbnail_size": "Thumbnail cache size ({} assets)",
|
||||||
"cache_settings_title": "Caching Settings",
|
"cache_settings_title": "Caching Settings",
|
||||||
|
"change_password_form_confirm_password": "Confirm Password",
|
||||||
|
"change_password_form_description": "Hi {firstName} {lastName},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.",
|
||||||
|
"change_password_form_new_password": "New Password",
|
||||||
|
"change_password_form_password_mismatch": "Passwords do not match",
|
||||||
|
"change_password_form_reenter_new_password": "Re-enter New Password",
|
||||||
|
"common_add_to_album": "Add to album",
|
||||||
|
"common_change_password": "Change Password",
|
||||||
|
"common_create_new_album": "Create new album",
|
||||||
|
"common_shared": "Shared",
|
||||||
"control_bottom_app_bar_add_to_album": "Add to album",
|
"control_bottom_app_bar_add_to_album": "Add to album",
|
||||||
"control_bottom_app_bar_album_info": "{} items",
|
"control_bottom_app_bar_album_info": "{} items",
|
||||||
"control_bottom_app_bar_album_info_shared": "{} items · Shared",
|
"control_bottom_app_bar_album_info_shared": "{} items · Shared",
|
||||||
"control_bottom_app_bar_create_new_album": "Create new album",
|
"control_bottom_app_bar_create_new_album": "Create new album",
|
||||||
"control_bottom_app_bar_delete": "Delete",
|
"control_bottom_app_bar_delete": "Delete",
|
||||||
|
"control_bottom_app_bar_favorite": "Favorite",
|
||||||
"control_bottom_app_bar_share": "Share",
|
"control_bottom_app_bar_share": "Share",
|
||||||
"create_album_page_untitled": "Untitled",
|
"create_album_page_untitled": "Untitled",
|
||||||
"create_shared_album_page_create": "Create",
|
"create_shared_album_page_create": "Create",
|
||||||
@@ -108,12 +127,21 @@
|
|||||||
"experimental_settings_new_asset_list_title": "Enable experimental photo grid",
|
"experimental_settings_new_asset_list_title": "Enable experimental photo grid",
|
||||||
"experimental_settings_subtitle": "Use at your own risk!",
|
"experimental_settings_subtitle": "Use at your own risk!",
|
||||||
"experimental_settings_title": "Experimental",
|
"experimental_settings_title": "Experimental",
|
||||||
|
"favorites_page_title": "Favorites",
|
||||||
"home_page_add_to_album_conflicts": "Added {added} assets to album {album}. {failed} assets are already in the album.",
|
"home_page_add_to_album_conflicts": "Added {added} assets to album {album}. {failed} assets are already in the album.",
|
||||||
|
"home_page_add_to_album_err_local": "Can not add local assets to albums yet, skipping",
|
||||||
"home_page_add_to_album_success": "Added {added} assets to album {album}.",
|
"home_page_add_to_album_success": "Added {added} assets to album {album}.",
|
||||||
"home_page_building_timeline": "Building the timeline",
|
"home_page_building_timeline": "Building the timeline",
|
||||||
|
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
||||||
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
||||||
|
"image_viewer_page_state_provider_download_error": "Download Error",
|
||||||
|
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||||
"library_page_albums": "Albums",
|
"library_page_albums": "Albums",
|
||||||
|
"library_page_favorites": "Favorites",
|
||||||
"library_page_new_album": "New album",
|
"library_page_new_album": "New album",
|
||||||
|
"library_page_sharing": "Sharing",
|
||||||
|
"library_page_sort_created": "Most recently created",
|
||||||
|
"library_page_sort_title": "Album title",
|
||||||
"login_form_button_text": "Login",
|
"login_form_button_text": "Login",
|
||||||
"login_form_email_hint": "youremail@email.com",
|
"login_form_email_hint": "youremail@email.com",
|
||||||
"login_form_endpoint_hint": "http://your-server-ip:port/api",
|
"login_form_endpoint_hint": "http://your-server-ip:port/api",
|
||||||
@@ -131,6 +159,12 @@
|
|||||||
"login_form_password_hint": "password",
|
"login_form_password_hint": "password",
|
||||||
"login_form_save_login": "Stay logged in",
|
"login_form_save_login": "Stay logged in",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
|
"notification_permission_dialog_cancel": "Cancel",
|
||||||
|
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
|
||||||
|
"notification_permission_dialog_settings": "Settings",
|
||||||
|
"notification_permission_list_tile_content": "Grant permission to enable notifications.",
|
||||||
|
"notification_permission_list_tile_enable_button": "Enable Notifications",
|
||||||
|
"notification_permission_list_tile_title": "Notification Permission",
|
||||||
"profile_drawer_app_logs": "Logs",
|
"profile_drawer_app_logs": "Logs",
|
||||||
"profile_drawer_client_server_up_to_date": "Client and Server are up-to-date",
|
"profile_drawer_client_server_up_to_date": "Client and Server are up-to-date",
|
||||||
"profile_drawer_settings": "Settings",
|
"profile_drawer_settings": "Settings",
|
||||||
@@ -144,6 +178,8 @@
|
|||||||
"select_additional_user_for_sharing_page_suggestions": "Suggestions",
|
"select_additional_user_for_sharing_page_suggestions": "Suggestions",
|
||||||
"select_user_for_sharing_page_err_album": "Failed to create album",
|
"select_user_for_sharing_page_err_album": "Failed to create album",
|
||||||
"select_user_for_sharing_page_share_suggestions": "Suggestions",
|
"select_user_for_sharing_page_share_suggestions": "Suggestions",
|
||||||
|
"server_info_box_app_version": "App Version",
|
||||||
|
"server_info_box_server_version": "Server Version",
|
||||||
"setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).",
|
"setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).",
|
||||||
"setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).",
|
"setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).",
|
||||||
"setting_image_viewer_original_title": "Load original image",
|
"setting_image_viewer_original_title": "Load original image",
|
||||||
@@ -193,5 +229,14 @@
|
|||||||
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
||||||
"version_announcement_overlay_text_2": "please take your time to visit the ",
|
"version_announcement_overlay_text_2": "please take your time to visit the ",
|
||||||
"version_announcement_overlay_text_3": " and ensure your docker-compose and .env setup is up-to-date to prevent any misconfigurations, especially if you use WatchTower or any mechanism that handles updating your server application automatically.",
|
"version_announcement_overlay_text_3": " and ensure your docker-compose and .env setup is up-to-date to prevent any misconfigurations, especially if you use WatchTower or any mechanism that handles updating your server application automatically.",
|
||||||
"version_announcement_overlay_title": "New Server Version Available \uD83C\uDF89"
|
"version_announcement_overlay_title": "New Server Version Available \uD83C\uDF89",
|
||||||
}
|
"permission_onboarding_request": "Immich requires permission to view your photos and videos.",
|
||||||
|
"permission_onboarding_grant_permission": "Grant permission",
|
||||||
|
"permission_onboarding_permission_granted": "Permission granted! You are all set.",
|
||||||
|
"permission_onboarding_permission_denied": "Permission denied. To use Immich, grant photo and video permissions in Settings.",
|
||||||
|
"permission_onboarding_get_started": "Get started",
|
||||||
|
"permission_onboarding_go_to_settings": "Go to settings",
|
||||||
|
"permission_onboarding_permission_limited": "Permission limited. To let Immich backup and manage your entire gallery collection, grant photo and video permissions in Settings.",
|
||||||
|
"permission_onboarding_continue_anyway": "Continue anyway",
|
||||||
|
"permission_onboarding_log_out": "Log out"
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
{
|
{
|
||||||
|
"add_to_album_bottom_sheet_added": "Added to {album}",
|
||||||
|
"add_to_album_bottom_sheet_already_exists": "Already in {album}",
|
||||||
"album_info_card_backup_album_excluded": "EXCLUIDOS",
|
"album_info_card_backup_album_excluded": "EXCLUIDOS",
|
||||||
"album_info_card_backup_album_included": "INCLUIDOS",
|
"album_info_card_backup_album_included": "INCLUIDOS",
|
||||||
"album_thumbnail_card_item": "1 item",
|
"album_thumbnail_card_item": "1 item",
|
||||||
@@ -12,6 +14,10 @@
|
|||||||
"album_viewer_appbar_share_leave": "Abandonar álbum ",
|
"album_viewer_appbar_share_leave": "Abandonar álbum ",
|
||||||
"album_viewer_appbar_share_remove": "Eliminar del álbum ",
|
"album_viewer_appbar_share_remove": "Eliminar del álbum ",
|
||||||
"album_viewer_page_share_add_users": "Añadir usuarios",
|
"album_viewer_page_share_add_users": "Añadir usuarios",
|
||||||
|
"asset_list_layout_settings_dynamic_layout_title": "Disposición dinámica",
|
||||||
|
"asset_list_layout_settings_group_by": "Agrupar recursos por",
|
||||||
|
"asset_list_layout_settings_group_by_month": "Mes",
|
||||||
|
"asset_list_layout_settings_group_by_month_day": "Mes + día",
|
||||||
"asset_list_settings_subtitle": "Photo grid layout settings",
|
"asset_list_settings_subtitle": "Photo grid layout settings",
|
||||||
"asset_list_settings_title": "Photo Grid",
|
"asset_list_settings_title": "Photo Grid",
|
||||||
"backup_album_selection_page_albums_device": "Álbumes en el dispositivo ({})",
|
"backup_album_selection_page_albums_device": "Álbumes en el dispositivo ({})",
|
||||||
@@ -29,6 +35,9 @@
|
|||||||
"backup_background_service_in_progress_notification": "Backing up your assets…",
|
"backup_background_service_in_progress_notification": "Backing up your assets…",
|
||||||
"backup_background_service_upload_failure_notification": "Failed to upload {}",
|
"backup_background_service_upload_failure_notification": "Failed to upload {}",
|
||||||
"backup_controller_page_albums": "Álbumes de copia de seguridad",
|
"backup_controller_page_albums": "Álbumes de copia de seguridad",
|
||||||
|
"backup_controller_page_background_app_refresh_disabled_content": "Enable background app refresh in Settings > General > Background App Refresh in order to use background backup.",
|
||||||
|
"backup_controller_page_background_app_refresh_disabled_title": "Background app refresh disabled",
|
||||||
|
"backup_controller_page_background_app_refresh_enable_button_text": "Go to settings",
|
||||||
"backup_controller_page_background_battery_info_link": "Show me how",
|
"backup_controller_page_background_battery_info_link": "Show me how",
|
||||||
"backup_controller_page_background_battery_info_message": "For the best background backup experience, please disable any battery optimizations restricting background activity for Immich.\n\nSince this is device-specific, please lookup the required information for your device manufacturer.",
|
"backup_controller_page_background_battery_info_message": "For the best background backup experience, please disable any battery optimizations restricting background activity for Immich.\n\nSince this is device-specific, please lookup the required information for your device manufacturer.",
|
||||||
"backup_controller_page_background_battery_info_ok": "OK",
|
"backup_controller_page_background_battery_info_ok": "OK",
|
||||||
@@ -83,11 +92,21 @@
|
|||||||
"cache_settings_subtitle": "Control the caching behaviour of the Immich mobile application",
|
"cache_settings_subtitle": "Control the caching behaviour of the Immich mobile application",
|
||||||
"cache_settings_thumbnail_size": "Thumbnail cache size ({} assets)",
|
"cache_settings_thumbnail_size": "Thumbnail cache size ({} assets)",
|
||||||
"cache_settings_title": "Caching Settings",
|
"cache_settings_title": "Caching Settings",
|
||||||
|
"change_password_form_confirm_password": "Confirm Password",
|
||||||
|
"change_password_form_description": "Hi {firstName} {lastName},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.",
|
||||||
|
"change_password_form_new_password": "New Password",
|
||||||
|
"change_password_form_password_mismatch": "Passwords do not match",
|
||||||
|
"change_password_form_reenter_new_password": "Re-enter New Password",
|
||||||
|
"common_add_to_album": "Add to album",
|
||||||
|
"common_change_password": "Change Password",
|
||||||
|
"common_create_new_album": "Create new album",
|
||||||
|
"common_shared": "Shared",
|
||||||
"control_bottom_app_bar_add_to_album": "Añadir al álbum",
|
"control_bottom_app_bar_add_to_album": "Añadir al álbum",
|
||||||
"control_bottom_app_bar_album_info": "{} elementos",
|
"control_bottom_app_bar_album_info": "{} elementos",
|
||||||
"control_bottom_app_bar_album_info_shared": "{} elementos · Compartido",
|
"control_bottom_app_bar_album_info_shared": "{} elementos · Compartido",
|
||||||
"control_bottom_app_bar_create_new_album": "Crear nuevo álbum",
|
"control_bottom_app_bar_create_new_album": "Crear nuevo álbum",
|
||||||
"control_bottom_app_bar_delete": "Eliminar",
|
"control_bottom_app_bar_delete": "Eliminar",
|
||||||
|
"control_bottom_app_bar_favorite": "Favorite",
|
||||||
"control_bottom_app_bar_share": "Share",
|
"control_bottom_app_bar_share": "Share",
|
||||||
"create_album_page_untitled": "Untitled",
|
"create_album_page_untitled": "Untitled",
|
||||||
"create_shared_album_page_create": "Create",
|
"create_shared_album_page_create": "Create",
|
||||||
@@ -108,17 +127,28 @@
|
|||||||
"experimental_settings_new_asset_list_title": "Enable experimental photo grid",
|
"experimental_settings_new_asset_list_title": "Enable experimental photo grid",
|
||||||
"experimental_settings_subtitle": "Use at your own risk!",
|
"experimental_settings_subtitle": "Use at your own risk!",
|
||||||
"experimental_settings_title": "Experimental",
|
"experimental_settings_title": "Experimental",
|
||||||
|
"favorites_page_title": "Favoritos",
|
||||||
"home_page_add_to_album_conflicts": "Añadidos {added} elementos al álbum {album}. {failed} elementos ya están añadidos.",
|
"home_page_add_to_album_conflicts": "Añadidos {added} elementos al álbum {album}. {failed} elementos ya están añadidos.",
|
||||||
|
"home_page_add_to_album_err_local": "Can not add local assets to albums yet, skipping",
|
||||||
"home_page_add_to_album_success": "Añadidos {added} elementos al álbum {album}.",
|
"home_page_add_to_album_success": "Añadidos {added} elementos al álbum {album}.",
|
||||||
|
"home_page_building_timeline": "Construyendo la línea de tiempo",
|
||||||
|
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
||||||
|
"home_page_first_time_notice": "Si esta es la primera vez que usas la app, por favor, asegúrate de elegir un álbum de respaldo para que la línea de tiempo pueda cargar fotos y videos en los álbumes.",
|
||||||
|
"image_viewer_page_state_provider_download_error": "Download Error",
|
||||||
|
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||||
"library_page_albums": "Albums",
|
"library_page_albums": "Albums",
|
||||||
|
"library_page_favorites": "Favoritos",
|
||||||
"library_page_new_album": "New album",
|
"library_page_new_album": "New album",
|
||||||
|
"library_page_sharing": "Compartiendo",
|
||||||
|
"library_page_sort_created": "Creado más recientemente",
|
||||||
|
"library_page_sort_title": "Título del álbum",
|
||||||
"login_form_button_text": "Iniciar Sesión",
|
"login_form_button_text": "Iniciar Sesión",
|
||||||
"login_form_email_hint": "tucorreo@correo.com",
|
"login_form_email_hint": "tucorreo@correo.com",
|
||||||
"login_form_endpoint_hint": "http://tu-ip-de-servidor:puerto/api",
|
"login_form_endpoint_hint": "http://tu-ip-de-servidor:puerto/api",
|
||||||
"login_form_endpoint_url": "URL del servidor",
|
"login_form_endpoint_url": "URL del servidor",
|
||||||
"login_form_err_http": "Por favor, especifique http:// o https://",
|
"login_form_err_http": "Por favor, especifique http:// o https://",
|
||||||
"login_form_err_invalid_email": "Correo electrónico no válido",
|
"login_form_err_invalid_email": "Correo electrónico no válido",
|
||||||
"login_form_err_invalid_url": "Invalid URL",
|
"login_form_err_invalid_url": "URL no válida",
|
||||||
"login_form_err_leading_whitespace": "Espacio en blanco inicial",
|
"login_form_err_leading_whitespace": "Espacio en blanco inicial",
|
||||||
"login_form_err_trailing_whitespace": "Espacio en blanco al final",
|
"login_form_err_trailing_whitespace": "Espacio en blanco al final",
|
||||||
"login_form_failed_get_oauth_server_config": "Error logging using OAuth, check server URL",
|
"login_form_failed_get_oauth_server_config": "Error logging using OAuth, check server URL",
|
||||||
@@ -129,6 +159,12 @@
|
|||||||
"login_form_password_hint": "contraseña",
|
"login_form_password_hint": "contraseña",
|
||||||
"login_form_save_login": "Mantener la sesión iniciada",
|
"login_form_save_login": "Mantener la sesión iniciada",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
|
"notification_permission_dialog_cancel": "Cancel",
|
||||||
|
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
|
||||||
|
"notification_permission_dialog_settings": "Settings",
|
||||||
|
"notification_permission_list_tile_content": "Grant permission to enable notifications.",
|
||||||
|
"notification_permission_list_tile_enable_button": "Enable Notifications",
|
||||||
|
"notification_permission_list_tile_title": "Notification Permission",
|
||||||
"profile_drawer_app_logs": "Logs",
|
"profile_drawer_app_logs": "Logs",
|
||||||
"profile_drawer_client_server_up_to_date": "El Cliente y el Servidor están actualizados",
|
"profile_drawer_client_server_up_to_date": "El Cliente y el Servidor están actualizados",
|
||||||
"profile_drawer_settings": "Settings",
|
"profile_drawer_settings": "Settings",
|
||||||
@@ -142,6 +178,8 @@
|
|||||||
"select_additional_user_for_sharing_page_suggestions": "Sugerencias",
|
"select_additional_user_for_sharing_page_suggestions": "Sugerencias",
|
||||||
"select_user_for_sharing_page_err_album": "Fallo al crear el álbum",
|
"select_user_for_sharing_page_err_album": "Fallo al crear el álbum",
|
||||||
"select_user_for_sharing_page_share_suggestions": "Suggestions",
|
"select_user_for_sharing_page_share_suggestions": "Suggestions",
|
||||||
|
"server_info_box_app_version": "App Version",
|
||||||
|
"server_info_box_server_version": "Server Version",
|
||||||
"setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).",
|
"setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).",
|
||||||
"setting_image_viewer_original_subtitle": "Habilitar para cargar la imagen en resolución original (¡muy grande!). Deshabilitar para reducir el consumo de datos (de red y caché).",
|
"setting_image_viewer_original_subtitle": "Habilitar para cargar la imagen en resolución original (¡muy grande!). Deshabilitar para reducir el consumo de datos (de red y caché).",
|
||||||
"setting_image_viewer_original_title": "Cargar imagen original",
|
"setting_image_viewer_original_title": "Cargar imagen original",
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
{
|
{
|
||||||
|
"add_to_album_bottom_sheet_added": "Added to {album}",
|
||||||
|
"add_to_album_bottom_sheet_already_exists": "Already in {album}",
|
||||||
"album_info_card_backup_album_excluded": "JÄTETTY POIS",
|
"album_info_card_backup_album_excluded": "JÄTETTY POIS",
|
||||||
"album_info_card_backup_album_included": "SISÄLLYTETTY",
|
"album_info_card_backup_album_included": "SISÄLLYTETTY",
|
||||||
"album_thumbnail_card_item": "1 kohde",
|
"album_thumbnail_card_item": "1 kohde",
|
||||||
@@ -12,6 +14,10 @@
|
|||||||
"album_viewer_appbar_share_leave": "Poistu albumista",
|
"album_viewer_appbar_share_leave": "Poistu albumista",
|
||||||
"album_viewer_appbar_share_remove": "Poista albumista",
|
"album_viewer_appbar_share_remove": "Poista albumista",
|
||||||
"album_viewer_page_share_add_users": "Lisää käyttäjiä",
|
"album_viewer_page_share_add_users": "Lisää käyttäjiä",
|
||||||
|
"asset_list_layout_settings_dynamic_layout_title": "Dynaaminen asetelma",
|
||||||
|
"asset_list_layout_settings_group_by": "Ryhmittele",
|
||||||
|
"asset_list_layout_settings_group_by_month": "Kuukauden mukaan",
|
||||||
|
"asset_list_layout_settings_group_by_month_day": "Kuukauden ja päivän mukaan",
|
||||||
"asset_list_settings_subtitle": "Kuvaruudukon asettelu",
|
"asset_list_settings_subtitle": "Kuvaruudukon asettelu",
|
||||||
"asset_list_settings_title": "Kuvaruudukko",
|
"asset_list_settings_title": "Kuvaruudukko",
|
||||||
"backup_album_selection_page_albums_device": "Laitteen albumit ({})",
|
"backup_album_selection_page_albums_device": "Laitteen albumit ({})",
|
||||||
@@ -29,6 +35,9 @@
|
|||||||
"backup_background_service_in_progress_notification": "Varmuuskopioidaan kohteita...",
|
"backup_background_service_in_progress_notification": "Varmuuskopioidaan kohteita...",
|
||||||
"backup_background_service_upload_failure_notification": "Lähetys palvelimelle epäonnistui {}",
|
"backup_background_service_upload_failure_notification": "Lähetys palvelimelle epäonnistui {}",
|
||||||
"backup_controller_page_albums": "Varmuuskopioi albumit",
|
"backup_controller_page_albums": "Varmuuskopioi albumit",
|
||||||
|
"backup_controller_page_background_app_refresh_disabled_content": "Enable background app refresh in Settings > General > Background App Refresh in order to use background backup.",
|
||||||
|
"backup_controller_page_background_app_refresh_disabled_title": "Background app refresh disabled",
|
||||||
|
"backup_controller_page_background_app_refresh_enable_button_text": "Go to settings",
|
||||||
"backup_controller_page_background_battery_info_link": "Näytä minulle miten",
|
"backup_controller_page_background_battery_info_link": "Näytä minulle miten",
|
||||||
"backup_controller_page_background_battery_info_message": "Kytke pois päältä kaikki Immichin taustatyöskentelyyn liittyvät akun optimoinnit, jotta varmistat taustavarmuuskopioinnin parhaan mahdollisen toiminnan.\n\nKoska tämä on laitekohtaista, tarkista tarvittavat toimet laitevalmistajan ohjeista.",
|
"backup_controller_page_background_battery_info_message": "Kytke pois päältä kaikki Immichin taustatyöskentelyyn liittyvät akun optimoinnit, jotta varmistat taustavarmuuskopioinnin parhaan mahdollisen toiminnan.\n\nKoska tämä on laitekohtaista, tarkista tarvittavat toimet laitevalmistajan ohjeista.",
|
||||||
"backup_controller_page_background_battery_info_ok": "OK",
|
"backup_controller_page_background_battery_info_ok": "OK",
|
||||||
@@ -83,11 +92,21 @@
|
|||||||
"cache_settings_subtitle": "Hallitse Immich-mobiilisovelluksen välimuistin käyttöä",
|
"cache_settings_subtitle": "Hallitse Immich-mobiilisovelluksen välimuistin käyttöä",
|
||||||
"cache_settings_thumbnail_size": "Esikatselukuvien välimuistin koko ({} kohdetta)",
|
"cache_settings_thumbnail_size": "Esikatselukuvien välimuistin koko ({} kohdetta)",
|
||||||
"cache_settings_title": "Välimuistin asetukset",
|
"cache_settings_title": "Välimuistin asetukset",
|
||||||
|
"change_password_form_confirm_password": "Confirm Password",
|
||||||
|
"change_password_form_description": "Hi {firstName} {lastName},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.",
|
||||||
|
"change_password_form_new_password": "New Password",
|
||||||
|
"change_password_form_password_mismatch": "Passwords do not match",
|
||||||
|
"change_password_form_reenter_new_password": "Re-enter New Password",
|
||||||
|
"common_add_to_album": "Add to album",
|
||||||
|
"common_change_password": "Change Password",
|
||||||
|
"common_create_new_album": "Create new album",
|
||||||
|
"common_shared": "Shared",
|
||||||
"control_bottom_app_bar_add_to_album": "Lisää albumiin",
|
"control_bottom_app_bar_add_to_album": "Lisää albumiin",
|
||||||
"control_bottom_app_bar_album_info": "{} kohdetta",
|
"control_bottom_app_bar_album_info": "{} kohdetta",
|
||||||
"control_bottom_app_bar_album_info_shared": "{} kohdetta · Jaettu",
|
"control_bottom_app_bar_album_info_shared": "{} kohdetta · Jaettu",
|
||||||
"control_bottom_app_bar_create_new_album": "Luo uusi albumi",
|
"control_bottom_app_bar_create_new_album": "Luo uusi albumi",
|
||||||
"control_bottom_app_bar_delete": "Poista",
|
"control_bottom_app_bar_delete": "Poista",
|
||||||
|
"control_bottom_app_bar_favorite": "Favorite",
|
||||||
"control_bottom_app_bar_share": "Jaa",
|
"control_bottom_app_bar_share": "Jaa",
|
||||||
"create_album_page_untitled": "Nimetön",
|
"create_album_page_untitled": "Nimetön",
|
||||||
"create_shared_album_page_create": "Luo",
|
"create_shared_album_page_create": "Luo",
|
||||||
@@ -108,17 +127,28 @@
|
|||||||
"experimental_settings_new_asset_list_title": "Ota käyttöön kokeellinen kuvaruudukko",
|
"experimental_settings_new_asset_list_title": "Ota käyttöön kokeellinen kuvaruudukko",
|
||||||
"experimental_settings_subtitle": "Käyttö omalla vastuulla!",
|
"experimental_settings_subtitle": "Käyttö omalla vastuulla!",
|
||||||
"experimental_settings_title": "Kokeellinen",
|
"experimental_settings_title": "Kokeellinen",
|
||||||
|
"favorites_page_title": "Suosikit",
|
||||||
"home_page_add_to_album_conflicts": "Lisätty {added} kohdetta albumiin {album}. {failed} kohdetta on jo albumissa.",
|
"home_page_add_to_album_conflicts": "Lisätty {added} kohdetta albumiin {album}. {failed} kohdetta on jo albumissa.",
|
||||||
|
"home_page_add_to_album_err_local": "Can not add local assets to albums yet, skipping",
|
||||||
"home_page_add_to_album_success": "Lisätty {added} kohdetta albumiin {album}.",
|
"home_page_add_to_album_success": "Lisätty {added} kohdetta albumiin {album}.",
|
||||||
|
"home_page_building_timeline": "Rakennetaan aikajanaa",
|
||||||
|
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
||||||
|
"home_page_first_time_notice": "Jos käytät sovellusta ensimmäistä kertaa, muista valita varmuuskopioitavat albumi(t), jotta aikajanalla voi olla kuvia ja videoita.",
|
||||||
|
"image_viewer_page_state_provider_download_error": "Download Error",
|
||||||
|
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||||
"library_page_albums": "Albumit",
|
"library_page_albums": "Albumit",
|
||||||
|
"library_page_favorites": "Suosikit",
|
||||||
"library_page_new_album": "Uusi albumi",
|
"library_page_new_album": "Uusi albumi",
|
||||||
|
"library_page_sharing": "Jakaminen",
|
||||||
|
"library_page_sort_created": "Viimeisin luotu",
|
||||||
|
"library_page_sort_title": "Albumin otsikko",
|
||||||
"login_form_button_text": "Kirjaudu",
|
"login_form_button_text": "Kirjaudu",
|
||||||
"login_form_email_hint": "sahkopostisi@esimerkki.fi",
|
"login_form_email_hint": "sahkopostisi@esimerkki.fi",
|
||||||
"login_form_endpoint_hint": "http://palvelimesi-osoite:portti/api",
|
"login_form_endpoint_hint": "http://palvelimesi-osoite:portti/api",
|
||||||
"login_form_endpoint_url": "Palvelimen URL",
|
"login_form_endpoint_url": "Palvelimen URL",
|
||||||
"login_form_err_http": "Lisää http:// tai https://",
|
"login_form_err_http": "Lisää http:// tai https://",
|
||||||
"login_form_err_invalid_email": "Virheellinen sähköpostiosoite",
|
"login_form_err_invalid_email": "Virheellinen sähköpostiosoite",
|
||||||
"login_form_err_invalid_url": "Invalid URL",
|
"login_form_err_invalid_url": "Virheellinen URL",
|
||||||
"login_form_err_leading_whitespace": "Alussa välilyönti",
|
"login_form_err_leading_whitespace": "Alussa välilyönti",
|
||||||
"login_form_err_trailing_whitespace": "Lopussa välilyönti",
|
"login_form_err_trailing_whitespace": "Lopussa välilyönti",
|
||||||
"login_form_failed_get_oauth_server_config": "Virhe kirjauduttaessa OAuth:lla, tarkista palvelimen URL",
|
"login_form_failed_get_oauth_server_config": "Virhe kirjauduttaessa OAuth:lla, tarkista palvelimen URL",
|
||||||
@@ -129,6 +159,12 @@
|
|||||||
"login_form_password_hint": "salasana",
|
"login_form_password_hint": "salasana",
|
||||||
"login_form_save_login": "Pysy kirjautuneena",
|
"login_form_save_login": "Pysy kirjautuneena",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
|
"notification_permission_dialog_cancel": "Cancel",
|
||||||
|
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
|
||||||
|
"notification_permission_dialog_settings": "Settings",
|
||||||
|
"notification_permission_list_tile_content": "Grant permission to enable notifications.",
|
||||||
|
"notification_permission_list_tile_enable_button": "Enable Notifications",
|
||||||
|
"notification_permission_list_tile_title": "Notification Permission",
|
||||||
"profile_drawer_app_logs": "Lokit",
|
"profile_drawer_app_logs": "Lokit",
|
||||||
"profile_drawer_client_server_up_to_date": "Asiakassovellus ja palvelin ovat ajan tasalla",
|
"profile_drawer_client_server_up_to_date": "Asiakassovellus ja palvelin ovat ajan tasalla",
|
||||||
"profile_drawer_settings": "Asetukset",
|
"profile_drawer_settings": "Asetukset",
|
||||||
@@ -142,6 +178,8 @@
|
|||||||
"select_additional_user_for_sharing_page_suggestions": "Ehdotukset",
|
"select_additional_user_for_sharing_page_suggestions": "Ehdotukset",
|
||||||
"select_user_for_sharing_page_err_album": "Albumin luonti epäonnistui",
|
"select_user_for_sharing_page_err_album": "Albumin luonti epäonnistui",
|
||||||
"select_user_for_sharing_page_share_suggestions": "Ehdotukset",
|
"select_user_for_sharing_page_share_suggestions": "Ehdotukset",
|
||||||
|
"server_info_box_app_version": "App Version",
|
||||||
|
"server_info_box_server_version": "Server Version",
|
||||||
"setting_image_viewer_help": "Sovellus lataa ensin pienen esikatselukuvan, toisena keskitarkkuuksisen kuvan (jos käytössä) ja kolmantena alkuperäisen täysitarkkuuksisen kuvan (jos käytössä)",
|
"setting_image_viewer_help": "Sovellus lataa ensin pienen esikatselukuvan, toisena keskitarkkuuksisen kuvan (jos käytössä) ja kolmantena alkuperäisen täysitarkkuuksisen kuvan (jos käytössä)",
|
||||||
"setting_image_viewer_original_subtitle": "Ota käyttöön ladataksesi alkuperäinen täysitarkkuuksinen kuva (suuri!). Poista käytöstä vähentääksesi datan käyttöä (sekä verkossa että laitteen välimuistissa).",
|
"setting_image_viewer_original_subtitle": "Ota käyttöön ladataksesi alkuperäinen täysitarkkuuksinen kuva (suuri!). Poista käytöstä vähentääksesi datan käyttöä (sekä verkossa että laitteen välimuistissa).",
|
||||||
"setting_image_viewer_original_title": "Lataa alkuperäinen kuva",
|
"setting_image_viewer_original_title": "Lataa alkuperäinen kuva",
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
{
|
{
|
||||||
|
"add_to_album_bottom_sheet_added": "Added to {album}",
|
||||||
|
"add_to_album_bottom_sheet_already_exists": "Already in {album}",
|
||||||
"album_info_card_backup_album_excluded": "EXCLU",
|
"album_info_card_backup_album_excluded": "EXCLU",
|
||||||
"album_info_card_backup_album_included": "INCLUS",
|
"album_info_card_backup_album_included": "INCLUS",
|
||||||
"album_thumbnail_card_item": "1 élément",
|
"album_thumbnail_card_item": "1 élément",
|
||||||
@@ -12,6 +14,10 @@
|
|||||||
"album_viewer_appbar_share_leave": "Quitter l'album",
|
"album_viewer_appbar_share_leave": "Quitter l'album",
|
||||||
"album_viewer_appbar_share_remove": "Retirer de l'album",
|
"album_viewer_appbar_share_remove": "Retirer de l'album",
|
||||||
"album_viewer_page_share_add_users": "Ajouter des utilisateurs",
|
"album_viewer_page_share_add_users": "Ajouter des utilisateurs",
|
||||||
|
"asset_list_layout_settings_dynamic_layout_title": "Affichage dynamique",
|
||||||
|
"asset_list_layout_settings_group_by": "Grouper les éléments par",
|
||||||
|
"asset_list_layout_settings_group_by_month": "Mois",
|
||||||
|
"asset_list_layout_settings_group_by_month_day": "Mois + jour",
|
||||||
"asset_list_settings_subtitle": "Paramètres de disposition de la grille de photos",
|
"asset_list_settings_subtitle": "Paramètres de disposition de la grille de photos",
|
||||||
"asset_list_settings_title": "Grille de photos",
|
"asset_list_settings_title": "Grille de photos",
|
||||||
"backup_album_selection_page_albums_device": "Albums sur l'appareil ({})",
|
"backup_album_selection_page_albums_device": "Albums sur l'appareil ({})",
|
||||||
@@ -29,13 +35,16 @@
|
|||||||
"backup_background_service_in_progress_notification": "Sauvegarde de vos éléments...",
|
"backup_background_service_in_progress_notification": "Sauvegarde de vos éléments...",
|
||||||
"backup_background_service_upload_failure_notification": "Impossible de transférer {}",
|
"backup_background_service_upload_failure_notification": "Impossible de transférer {}",
|
||||||
"backup_controller_page_albums": "Sauvegarder les albums",
|
"backup_controller_page_albums": "Sauvegarder les albums",
|
||||||
|
"backup_controller_page_background_app_refresh_disabled_content": "Enable background app refresh in Settings > General > Background App Refresh in order to use background backup.",
|
||||||
|
"backup_controller_page_background_app_refresh_disabled_title": "Background app refresh disabled",
|
||||||
|
"backup_controller_page_background_app_refresh_enable_button_text": "Go to settings",
|
||||||
"backup_controller_page_background_battery_info_link": "Montrez-moi comment",
|
"backup_controller_page_background_battery_info_link": "Montrez-moi comment",
|
||||||
"backup_controller_page_background_battery_info_message": "Pour une expérience optimale de la sauvegarde en arrière-plan, veuillez désactiver toute optimisation de la batterie limitant l'activité en arrière-plan pour Immich.\n\nÉtant donné que cela est spécifique à chaque appareil, veuillez consulter les informations requises pour le fabricant de votre appareil.",
|
"backup_controller_page_background_battery_info_message": "Pour une expérience optimale de la sauvegarde en arrière-plan, veuillez désactiver toute optimisation de la batterie limitant l'activité en arrière-plan pour Immich.\n\nÉtant donné que cela est spécifique à chaque appareil, veuillez consulter les informations requises pour le fabricant de votre appareil.",
|
||||||
"backup_controller_page_background_battery_info_ok": "OK",
|
"backup_controller_page_background_battery_info_ok": "OK",
|
||||||
"backup_controller_page_background_battery_info_title": "Optimisation de la batterie",
|
"backup_controller_page_background_battery_info_title": "Optimisation de la batterie",
|
||||||
"backup_controller_page_background_charging": "Seulement pendant la charge",
|
"backup_controller_page_background_charging": "Seulement pendant la charge",
|
||||||
"backup_controller_page_background_configure_error": "Échec de la configuration du service d'arrière-plan",
|
"backup_controller_page_background_configure_error": "Échec de la configuration du service d'arrière-plan",
|
||||||
"backup_controller_page_background_delay": "Delay new assets backup: {}",
|
"backup_controller_page_background_delay": "Retarder la sauvegarde des nouveaux éléments d'actif : {}",
|
||||||
"backup_controller_page_background_description": "Activez le service d'arrière-plan pour sauvegarder automatiquement tous les nouveaux éléments sans avoir à ouvrir l'application.",
|
"backup_controller_page_background_description": "Activez le service d'arrière-plan pour sauvegarder automatiquement tous les nouveaux éléments sans avoir à ouvrir l'application.",
|
||||||
"backup_controller_page_background_is_off": "La sauvegarde automatique en arrière-plan est désactivée",
|
"backup_controller_page_background_is_off": "La sauvegarde automatique en arrière-plan est désactivée",
|
||||||
"backup_controller_page_background_is_on": "La sauvegarde automatique en arrière-plan est activée",
|
"backup_controller_page_background_is_on": "La sauvegarde automatique en arrière-plan est activée",
|
||||||
@@ -83,11 +92,21 @@
|
|||||||
"cache_settings_subtitle": "Contrôler le comportement de mise en cache de l'application mobile Immich",
|
"cache_settings_subtitle": "Contrôler le comportement de mise en cache de l'application mobile Immich",
|
||||||
"cache_settings_thumbnail_size": "Taille du cache des miniatures ({} éléments)",
|
"cache_settings_thumbnail_size": "Taille du cache des miniatures ({} éléments)",
|
||||||
"cache_settings_title": "Paramètres de mise en cache",
|
"cache_settings_title": "Paramètres de mise en cache",
|
||||||
"control_bottom_app_bar_add_to_album": "Add to album",
|
"change_password_form_confirm_password": "Confirm Password",
|
||||||
"control_bottom_app_bar_album_info": "{} items",
|
"change_password_form_description": "Hi {firstName} {lastName},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.",
|
||||||
"control_bottom_app_bar_album_info_shared": "{} items · Shared",
|
"change_password_form_new_password": "New Password",
|
||||||
"control_bottom_app_bar_create_new_album": "Create new album",
|
"change_password_form_password_mismatch": "Passwords do not match",
|
||||||
|
"change_password_form_reenter_new_password": "Re-enter New Password",
|
||||||
|
"common_add_to_album": "Add to album",
|
||||||
|
"common_change_password": "Change Password",
|
||||||
|
"common_create_new_album": "Create new album",
|
||||||
|
"common_shared": "Shared",
|
||||||
|
"control_bottom_app_bar_add_to_album": "Ajouter à l'album",
|
||||||
|
"control_bottom_app_bar_album_info": "{} éléments",
|
||||||
|
"control_bottom_app_bar_album_info_shared": "{} éléments - Partagés",
|
||||||
|
"control_bottom_app_bar_create_new_album": "Créer un nouvel album",
|
||||||
"control_bottom_app_bar_delete": "Supprimer",
|
"control_bottom_app_bar_delete": "Supprimer",
|
||||||
|
"control_bottom_app_bar_favorite": "Favorite",
|
||||||
"control_bottom_app_bar_share": "Partager",
|
"control_bottom_app_bar_share": "Partager",
|
||||||
"create_album_page_untitled": "Sans titre",
|
"create_album_page_untitled": "Sans titre",
|
||||||
"create_shared_album_page_create": "Créer",
|
"create_shared_album_page_create": "Créer",
|
||||||
@@ -108,28 +127,45 @@
|
|||||||
"experimental_settings_new_asset_list_title": "Activez la grille de photos expérimentale",
|
"experimental_settings_new_asset_list_title": "Activez la grille de photos expérimentale",
|
||||||
"experimental_settings_subtitle": "Utilisez à vos dépends !",
|
"experimental_settings_subtitle": "Utilisez à vos dépends !",
|
||||||
"experimental_settings_title": "Expérimental",
|
"experimental_settings_title": "Expérimental",
|
||||||
"home_page_add_to_album_conflicts": "Added {added} assets to album {album}. {failed} assets are already in the album.",
|
"favorites_page_title": "Favoris",
|
||||||
"home_page_add_to_album_success": "Added {added} assets to album {album}.",
|
"home_page_add_to_album_conflicts": "{added} éléments ajoutés à l'album {album}. Les éléments {failed} sont déjà dans l'album.",
|
||||||
|
"home_page_add_to_album_err_local": "Can not add local assets to albums yet, skipping",
|
||||||
|
"home_page_add_to_album_success": "{added} éléments ajoutés à l'album {album}.",
|
||||||
|
"home_page_building_timeline": "Construction de la chronologie",
|
||||||
|
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
||||||
|
"home_page_first_time_notice": "Si c'est la première fois que vous utilisez l'application, veillez à choisir un ou plusieurs albums de sauvegarde afin que la chronologie puisse alimenter les photos et les vidéos de cet ou ces albums.",
|
||||||
|
"image_viewer_page_state_provider_download_error": "Download Error",
|
||||||
|
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||||
"library_page_albums": "Albums",
|
"library_page_albums": "Albums",
|
||||||
|
"library_page_favorites": "Favoris",
|
||||||
"library_page_new_album": "Nouvel album",
|
"library_page_new_album": "Nouvel album",
|
||||||
|
"library_page_sharing": "Partage",
|
||||||
|
"library_page_sort_created": "Créations les plus récentes",
|
||||||
|
"library_page_sort_title": "Titre de l'album",
|
||||||
"login_form_button_text": "Connexion",
|
"login_form_button_text": "Connexion",
|
||||||
"login_form_email_hint": "votreemail@email.com",
|
"login_form_email_hint": "votreemail@email.com",
|
||||||
"login_form_endpoint_hint": "http://adresse-ip-serveur:port/api",
|
"login_form_endpoint_hint": "http://adresse-ip-serveur:port/api",
|
||||||
"login_form_endpoint_url": "URL du point d'accès au serveur",
|
"login_form_endpoint_url": "URL du point d'accès au serveur",
|
||||||
"login_form_err_http": "Veuillez préciser http:// ou https://",
|
"login_form_err_http": "Veuillez préciser http:// ou https://",
|
||||||
"login_form_err_invalid_email": "Email invalide",
|
"login_form_err_invalid_email": "Email invalide",
|
||||||
"login_form_err_invalid_url": "Invalid URL",
|
"login_form_err_invalid_url": "URL invalide",
|
||||||
"login_form_err_leading_whitespace": "Espace en début de ligne",
|
"login_form_err_leading_whitespace": "Espace en début de ligne",
|
||||||
"login_form_err_trailing_whitespace": "Espace de fin de ligne",
|
"login_form_err_trailing_whitespace": "Espace de fin de ligne",
|
||||||
"login_form_failed_get_oauth_server_config": "Error logging using OAuth, check server URL",
|
"login_form_failed_get_oauth_server_config": "Erreur de connexion par OAuth, vérifiez l\"URL du serveur",
|
||||||
"login_form_failed_get_oauth_server_disable": "OAuth feature is not available on this server",
|
"login_form_failed_get_oauth_server_disable": "La fonctionnalité OAuth n'est pas disponible sur ce serveur",
|
||||||
"login_form_failed_login": "Erreur de connexion, vérifiez l'url du serveur, l'email et le mot de passe",
|
"login_form_failed_login": "Erreur de connexion, vérifiez l'url du serveur, l'email et le mot de passe",
|
||||||
"login_form_label_email": "Email",
|
"login_form_label_email": "Email",
|
||||||
"login_form_label_password": "Mot de passe",
|
"login_form_label_password": "Mot de passe",
|
||||||
"login_form_password_hint": "mot de passe",
|
"login_form_password_hint": "mot de passe",
|
||||||
"login_form_save_login": "Rester connecté",
|
"login_form_save_login": "Rester connecté",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
"profile_drawer_app_logs": "Logs",
|
"notification_permission_dialog_cancel": "Cancel",
|
||||||
|
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
|
||||||
|
"notification_permission_dialog_settings": "Settings",
|
||||||
|
"notification_permission_list_tile_content": "Grant permission to enable notifications.",
|
||||||
|
"notification_permission_list_tile_enable_button": "Enable Notifications",
|
||||||
|
"notification_permission_list_tile_title": "Notification Permission",
|
||||||
|
"profile_drawer_app_logs": "Journaux",
|
||||||
"profile_drawer_client_server_up_to_date": "Le client et le serveur sont à jour",
|
"profile_drawer_client_server_up_to_date": "Le client et le serveur sont à jour",
|
||||||
"profile_drawer_settings": "Paramètres",
|
"profile_drawer_settings": "Paramètres",
|
||||||
"profile_drawer_sign_out": "Se déconnecter",
|
"profile_drawer_sign_out": "Se déconnecter",
|
||||||
@@ -142,17 +178,19 @@
|
|||||||
"select_additional_user_for_sharing_page_suggestions": "Suggestions",
|
"select_additional_user_for_sharing_page_suggestions": "Suggestions",
|
||||||
"select_user_for_sharing_page_err_album": "Échec de la création de l'album",
|
"select_user_for_sharing_page_err_album": "Échec de la création de l'album",
|
||||||
"select_user_for_sharing_page_share_suggestions": "Suggestions",
|
"select_user_for_sharing_page_share_suggestions": "Suggestions",
|
||||||
"setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).",
|
"server_info_box_app_version": "App Version",
|
||||||
"setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).",
|
"server_info_box_server_version": "Server Version",
|
||||||
"setting_image_viewer_original_title": "Load original image",
|
"setting_image_viewer_help": "Le visualiseur de détails charge d'abord la petite miniature, puis l'aperçu de taille moyenne (s'il est activé), enfin l'original (s'il est activé).",
|
||||||
"setting_image_viewer_preview_subtitle": "Enable to load a medium-resolution image. Disable to either directly load the original or only use the thumbnail.",
|
"setting_image_viewer_original_subtitle": "Activez cette option pour charger l'image en résolution originale (volumineux !). Désactiver pour réduire l'utilisation des données (réseau et cache de l'appareil).",
|
||||||
"setting_image_viewer_preview_title": "Load preview image",
|
"setting_image_viewer_original_title": "Charger l'image originale",
|
||||||
|
"setting_image_viewer_preview_subtitle": "Activer pour charger une image de résolution moyenne. Désactiver pour charger directement l'original ou utiliser uniquement la miniature.",
|
||||||
|
"setting_image_viewer_preview_title": "Charger l'image d'aperçu",
|
||||||
"setting_notifications_notify_failures_grace_period": "Notifier les échecs de la sauvegarde en arrière-plan : {}",
|
"setting_notifications_notify_failures_grace_period": "Notifier les échecs de la sauvegarde en arrière-plan : {}",
|
||||||
"setting_notifications_notify_hours": "{} heures",
|
"setting_notifications_notify_hours": "{} heures",
|
||||||
"setting_notifications_notify_immediately": "immédiatement",
|
"setting_notifications_notify_immediately": "immédiatement",
|
||||||
"setting_notifications_notify_minutes": "{} minutes",
|
"setting_notifications_notify_minutes": "{} minutes",
|
||||||
"setting_notifications_notify_never": "jamais",
|
"setting_notifications_notify_never": "jamais",
|
||||||
"setting_notifications_notify_seconds": "{} seconds",
|
"setting_notifications_notify_seconds": "{} secondes",
|
||||||
"setting_notifications_single_progress_subtitle": "Informations détaillées sur la progression du transfert par élément",
|
"setting_notifications_single_progress_subtitle": "Informations détaillées sur la progression du transfert par élément",
|
||||||
"setting_notifications_single_progress_title": "Afficher la progression du détail de la sauvegarde en arrière-plan",
|
"setting_notifications_single_progress_title": "Afficher la progression du détail de la sauvegarde en arrière-plan",
|
||||||
"setting_notifications_subtitle": "Ajustez vos préférences de notification",
|
"setting_notifications_subtitle": "Ajustez vos préférences de notification",
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
{
|
{
|
||||||
|
"add_to_album_bottom_sheet_added": "Added to {album}",
|
||||||
|
"add_to_album_bottom_sheet_already_exists": "Already in {album}",
|
||||||
"album_info_card_backup_album_excluded": "ESCLUSI",
|
"album_info_card_backup_album_excluded": "ESCLUSI",
|
||||||
"album_info_card_backup_album_included": "INCLUSI",
|
"album_info_card_backup_album_included": "INCLUSI",
|
||||||
"album_thumbnail_card_item": "1 elemento ",
|
"album_thumbnail_card_item": "1 elemento ",
|
||||||
@@ -12,6 +14,10 @@
|
|||||||
"album_viewer_appbar_share_leave": "Lascia album",
|
"album_viewer_appbar_share_leave": "Lascia album",
|
||||||
"album_viewer_appbar_share_remove": "Rimuovere dall'album ",
|
"album_viewer_appbar_share_remove": "Rimuovere dall'album ",
|
||||||
"album_viewer_page_share_add_users": "Aggiungi utenti",
|
"album_viewer_page_share_add_users": "Aggiungi utenti",
|
||||||
|
"asset_list_layout_settings_dynamic_layout_title": "Dynamic layout",
|
||||||
|
"asset_list_layout_settings_group_by": "Group assets by",
|
||||||
|
"asset_list_layout_settings_group_by_month": "Month",
|
||||||
|
"asset_list_layout_settings_group_by_month_day": "Month + day",
|
||||||
"asset_list_settings_subtitle": "Impostazion del layout della griglia delle foto",
|
"asset_list_settings_subtitle": "Impostazion del layout della griglia delle foto",
|
||||||
"asset_list_settings_title": "Griglia foto",
|
"asset_list_settings_title": "Griglia foto",
|
||||||
"backup_album_selection_page_albums_device": "Albums sul device ({})",
|
"backup_album_selection_page_albums_device": "Albums sul device ({})",
|
||||||
@@ -29,6 +35,9 @@
|
|||||||
"backup_background_service_in_progress_notification": "Backing dei tuoi contenuti…",
|
"backup_background_service_in_progress_notification": "Backing dei tuoi contenuti…",
|
||||||
"backup_background_service_upload_failure_notification": "Impossibile caricare {}",
|
"backup_background_service_upload_failure_notification": "Impossibile caricare {}",
|
||||||
"backup_controller_page_albums": "Backup Album",
|
"backup_controller_page_albums": "Backup Album",
|
||||||
|
"backup_controller_page_background_app_refresh_disabled_content": "Enable background app refresh in Settings > General > Background App Refresh in order to use background backup.",
|
||||||
|
"backup_controller_page_background_app_refresh_disabled_title": "Background app refresh disabled",
|
||||||
|
"backup_controller_page_background_app_refresh_enable_button_text": "Go to settings",
|
||||||
"backup_controller_page_background_battery_info_link": "Mostrami come",
|
"backup_controller_page_background_battery_info_link": "Mostrami come",
|
||||||
"backup_controller_page_background_battery_info_message": "Per una migliore esperienza di backup, disabilita le ottimizzazioni della batteria per l'app Immich.\n\nDal momento che è una funzionalità specifica del dispositivo, per favore consulta il manuale del produttore.",
|
"backup_controller_page_background_battery_info_message": "Per una migliore esperienza di backup, disabilita le ottimizzazioni della batteria per l'app Immich.\n\nDal momento che è una funzionalità specifica del dispositivo, per favore consulta il manuale del produttore.",
|
||||||
"backup_controller_page_background_battery_info_ok": "OK",
|
"backup_controller_page_background_battery_info_ok": "OK",
|
||||||
@@ -83,11 +92,21 @@
|
|||||||
"cache_settings_subtitle": "Controlla il comportamento della cache dell'applicazione mobile immich",
|
"cache_settings_subtitle": "Controlla il comportamento della cache dell'applicazione mobile immich",
|
||||||
"cache_settings_thumbnail_size": "Dimensione cache anteprime ({} assets)",
|
"cache_settings_thumbnail_size": "Dimensione cache anteprime ({} assets)",
|
||||||
"cache_settings_title": "Impostazioni della Cache",
|
"cache_settings_title": "Impostazioni della Cache",
|
||||||
|
"change_password_form_confirm_password": "Confirm Password",
|
||||||
|
"change_password_form_description": "Hi {firstName} {lastName},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.",
|
||||||
|
"change_password_form_new_password": "New Password",
|
||||||
|
"change_password_form_password_mismatch": "Passwords do not match",
|
||||||
|
"change_password_form_reenter_new_password": "Re-enter New Password",
|
||||||
|
"common_add_to_album": "Add to album",
|
||||||
|
"common_change_password": "Change Password",
|
||||||
|
"common_create_new_album": "Create new album",
|
||||||
|
"common_shared": "Shared",
|
||||||
"control_bottom_app_bar_add_to_album": "Aggiungi all'album",
|
"control_bottom_app_bar_add_to_album": "Aggiungi all'album",
|
||||||
"control_bottom_app_bar_album_info": "{} elementi",
|
"control_bottom_app_bar_album_info": "{} elementi",
|
||||||
"control_bottom_app_bar_album_info_shared": "{} elementi · Condivisi",
|
"control_bottom_app_bar_album_info_shared": "{} elementi · Condivisi",
|
||||||
"control_bottom_app_bar_create_new_album": "Crea nuovo album",
|
"control_bottom_app_bar_create_new_album": "Crea nuovo album",
|
||||||
"control_bottom_app_bar_delete": "Elimina",
|
"control_bottom_app_bar_delete": "Elimina",
|
||||||
|
"control_bottom_app_bar_favorite": "Favorite",
|
||||||
"control_bottom_app_bar_share": "Condividi",
|
"control_bottom_app_bar_share": "Condividi",
|
||||||
"create_album_page_untitled": "Senza titolo",
|
"create_album_page_untitled": "Senza titolo",
|
||||||
"create_shared_album_page_create": "Crea",
|
"create_shared_album_page_create": "Crea",
|
||||||
@@ -108,10 +127,21 @@
|
|||||||
"experimental_settings_new_asset_list_title": "Attiva griglia di foto sperimentale",
|
"experimental_settings_new_asset_list_title": "Attiva griglia di foto sperimentale",
|
||||||
"experimental_settings_subtitle": "Usalo a tuo rischio!",
|
"experimental_settings_subtitle": "Usalo a tuo rischio!",
|
||||||
"experimental_settings_title": "Sperimentale",
|
"experimental_settings_title": "Sperimentale",
|
||||||
|
"favorites_page_title": "Favorites",
|
||||||
"home_page_add_to_album_conflicts": "Aggiunti {added} elementi all'album {album}. {failed} elementi erano già presenti nell'album.",
|
"home_page_add_to_album_conflicts": "Aggiunti {added} elementi all'album {album}. {failed} elementi erano già presenti nell'album.",
|
||||||
|
"home_page_add_to_album_err_local": "Can not add local assets to albums yet, skipping",
|
||||||
"home_page_add_to_album_success": "Aggiunti {added} elementi all'album {album}",
|
"home_page_add_to_album_success": "Aggiunti {added} elementi all'album {album}",
|
||||||
|
"home_page_building_timeline": "Building the timeline",
|
||||||
|
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
||||||
|
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
||||||
|
"image_viewer_page_state_provider_download_error": "Download Error",
|
||||||
|
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||||
"library_page_albums": "Album",
|
"library_page_albums": "Album",
|
||||||
|
"library_page_favorites": "Favorites",
|
||||||
"library_page_new_album": "Nuovo Album",
|
"library_page_new_album": "Nuovo Album",
|
||||||
|
"library_page_sharing": "Sharing",
|
||||||
|
"library_page_sort_created": "Most recently created",
|
||||||
|
"library_page_sort_title": "Album title",
|
||||||
"login_form_button_text": "Login",
|
"login_form_button_text": "Login",
|
||||||
"login_form_email_hint": "tuaemail@email.com",
|
"login_form_email_hint": "tuaemail@email.com",
|
||||||
"login_form_endpoint_hint": "http://ip-del-tuo-server:port/api",
|
"login_form_endpoint_hint": "http://ip-del-tuo-server:port/api",
|
||||||
@@ -129,6 +159,12 @@
|
|||||||
"login_form_password_hint": "password ",
|
"login_form_password_hint": "password ",
|
||||||
"login_form_save_login": "Rimani connesso ",
|
"login_form_save_login": "Rimani connesso ",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
|
"notification_permission_dialog_cancel": "Cancel",
|
||||||
|
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
|
||||||
|
"notification_permission_dialog_settings": "Settings",
|
||||||
|
"notification_permission_list_tile_content": "Grant permission to enable notifications.",
|
||||||
|
"notification_permission_list_tile_enable_button": "Enable Notifications",
|
||||||
|
"notification_permission_list_tile_title": "Notification Permission",
|
||||||
"profile_drawer_app_logs": "Logs",
|
"profile_drawer_app_logs": "Logs",
|
||||||
"profile_drawer_client_server_up_to_date": "Client e server sono aggiornati",
|
"profile_drawer_client_server_up_to_date": "Client e server sono aggiornati",
|
||||||
"profile_drawer_settings": "Impostazioni ",
|
"profile_drawer_settings": "Impostazioni ",
|
||||||
@@ -142,6 +178,8 @@
|
|||||||
"select_additional_user_for_sharing_page_suggestions": "Suggerimenti ",
|
"select_additional_user_for_sharing_page_suggestions": "Suggerimenti ",
|
||||||
"select_user_for_sharing_page_err_album": "Impossibile nel creare l'album ",
|
"select_user_for_sharing_page_err_album": "Impossibile nel creare l'album ",
|
||||||
"select_user_for_sharing_page_share_suggestions": "Suggerimenti",
|
"select_user_for_sharing_page_share_suggestions": "Suggerimenti",
|
||||||
|
"server_info_box_app_version": "App Version",
|
||||||
|
"server_info_box_server_version": "Server Version",
|
||||||
"setting_image_viewer_help": "Il visualizzatore dettagliato carica una piccola thumbnail per prima, per poi caricare un immagine di media grandezza (se abilitato). Ed infine carica l'originale (se abilitato).",
|
"setting_image_viewer_help": "Il visualizzatore dettagliato carica una piccola thumbnail per prima, per poi caricare un immagine di media grandezza (se abilitato). Ed infine carica l'originale (se abilitato).",
|
||||||
"setting_image_viewer_original_subtitle": "Abilita per caricare l'immagine originale a risoluzione massima (grande!). Disabilita per ridurre l'utilizzo di banda (sia sul network che nella cache del dispositivo).",
|
"setting_image_viewer_original_subtitle": "Abilita per caricare l'immagine originale a risoluzione massima (grande!). Disabilita per ridurre l'utilizzo di banda (sia sul network che nella cache del dispositivo).",
|
||||||
"setting_image_viewer_original_title": "Carica l'immagine originale",
|
"setting_image_viewer_original_title": "Carica l'immagine originale",
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
{
|
{
|
||||||
|
"add_to_album_bottom_sheet_added": "Added to {album}",
|
||||||
|
"add_to_album_bottom_sheet_already_exists": "Already in {album}",
|
||||||
"album_info_card_backup_album_excluded": "除外中",
|
"album_info_card_backup_album_excluded": "除外中",
|
||||||
"album_info_card_backup_album_included": "選択中",
|
"album_info_card_backup_album_included": "選択中",
|
||||||
"album_thumbnail_card_item": "項目数: 1",
|
"album_thumbnail_card_item": "項目数: 1",
|
||||||
@@ -12,6 +14,10 @@
|
|||||||
"album_viewer_appbar_share_leave": "アルバムから退会",
|
"album_viewer_appbar_share_leave": "アルバムから退会",
|
||||||
"album_viewer_appbar_share_remove": "アルバムから除外",
|
"album_viewer_appbar_share_remove": "アルバムから除外",
|
||||||
"album_viewer_page_share_add_users": "ユーザーを追加",
|
"album_viewer_page_share_add_users": "ユーザーを追加",
|
||||||
|
"asset_list_layout_settings_dynamic_layout_title": "Dynamic layout",
|
||||||
|
"asset_list_layout_settings_group_by": "Group assets by",
|
||||||
|
"asset_list_layout_settings_group_by_month": "Month",
|
||||||
|
"asset_list_layout_settings_group_by_month_day": "Month + day",
|
||||||
"asset_list_settings_subtitle": "グリッドに関する設定",
|
"asset_list_settings_subtitle": "グリッドに関する設定",
|
||||||
"asset_list_settings_title": "グリッド",
|
"asset_list_settings_title": "グリッド",
|
||||||
"backup_album_selection_page_albums_device": "端末上のアルバム数は {} だよ",
|
"backup_album_selection_page_albums_device": "端末上のアルバム数は {} だよ",
|
||||||
@@ -29,6 +35,9 @@
|
|||||||
"backup_background_service_in_progress_notification": "バックアップ中",
|
"backup_background_service_in_progress_notification": "バックアップ中",
|
||||||
"backup_background_service_upload_failure_notification": "{} のアップロードに失敗",
|
"backup_background_service_upload_failure_notification": "{} のアップロードに失敗",
|
||||||
"backup_controller_page_albums": "アルバム",
|
"backup_controller_page_albums": "アルバム",
|
||||||
|
"backup_controller_page_background_app_refresh_disabled_content": "Enable background app refresh in Settings > General > Background App Refresh in order to use background backup.",
|
||||||
|
"backup_controller_page_background_app_refresh_disabled_title": "Background app refresh disabled",
|
||||||
|
"backup_controller_page_background_app_refresh_enable_button_text": "Go to settings",
|
||||||
"backup_controller_page_background_battery_info_link": "方法を見る",
|
"backup_controller_page_background_battery_info_link": "方法を見る",
|
||||||
"backup_controller_page_background_battery_info_message": "バックグラウンドバックアップが正常に動作するためにImmichに適用されてるバッテリーの最適化と自動調整をオフにしてね。\n\n端末によって方法が変わるから各々調べてね",
|
"backup_controller_page_background_battery_info_message": "バックグラウンドバックアップが正常に動作するためにImmichに適用されてるバッテリーの最適化と自動調整をオフにしてね。\n\n端末によって方法が変わるから各々調べてね",
|
||||||
"backup_controller_page_background_battery_info_ok": "了解",
|
"backup_controller_page_background_battery_info_ok": "了解",
|
||||||
@@ -83,11 +92,21 @@
|
|||||||
"cache_settings_subtitle": "キャッシュの動作を変更できるよ",
|
"cache_settings_subtitle": "キャッシュの動作を変更できるよ",
|
||||||
"cache_settings_thumbnail_size": "サムネイルのキャッシュのサイズ ({}枚)",
|
"cache_settings_thumbnail_size": "サムネイルのキャッシュのサイズ ({}枚)",
|
||||||
"cache_settings_title": "キャッシュの設定",
|
"cache_settings_title": "キャッシュの設定",
|
||||||
|
"change_password_form_confirm_password": "Confirm Password",
|
||||||
|
"change_password_form_description": "Hi {firstName} {lastName},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.",
|
||||||
|
"change_password_form_new_password": "New Password",
|
||||||
|
"change_password_form_password_mismatch": "Passwords do not match",
|
||||||
|
"change_password_form_reenter_new_password": "Re-enter New Password",
|
||||||
|
"common_add_to_album": "Add to album",
|
||||||
|
"common_change_password": "Change Password",
|
||||||
|
"common_create_new_album": "Create new album",
|
||||||
|
"common_shared": "Shared",
|
||||||
"control_bottom_app_bar_add_to_album": "Add to album",
|
"control_bottom_app_bar_add_to_album": "Add to album",
|
||||||
"control_bottom_app_bar_album_info": "{} items",
|
"control_bottom_app_bar_album_info": "{} items",
|
||||||
"control_bottom_app_bar_album_info_shared": "{} items · Shared",
|
"control_bottom_app_bar_album_info_shared": "{} items · Shared",
|
||||||
"control_bottom_app_bar_create_new_album": "Create new album",
|
"control_bottom_app_bar_create_new_album": "Create new album",
|
||||||
"control_bottom_app_bar_delete": "削除",
|
"control_bottom_app_bar_delete": "削除",
|
||||||
|
"control_bottom_app_bar_favorite": "Favorite",
|
||||||
"control_bottom_app_bar_share": "共有",
|
"control_bottom_app_bar_share": "共有",
|
||||||
"create_album_page_untitled": "タイトル無し",
|
"create_album_page_untitled": "タイトル無し",
|
||||||
"create_shared_album_page_create": "作成",
|
"create_shared_album_page_create": "作成",
|
||||||
@@ -108,10 +127,21 @@
|
|||||||
"experimental_settings_new_asset_list_title": "試験的なグリッドを有効",
|
"experimental_settings_new_asset_list_title": "試験的なグリッドを有効",
|
||||||
"experimental_settings_subtitle": "試験的だから自己責任でね",
|
"experimental_settings_subtitle": "試験的だから自己責任でね",
|
||||||
"experimental_settings_title": "試験的",
|
"experimental_settings_title": "試験的",
|
||||||
|
"favorites_page_title": "Favorites",
|
||||||
"home_page_add_to_album_conflicts": "Added {added} assets to album {album}. {failed} assets are already in the album.",
|
"home_page_add_to_album_conflicts": "Added {added} assets to album {album}. {failed} assets are already in the album.",
|
||||||
|
"home_page_add_to_album_err_local": "Can not add local assets to albums yet, skipping",
|
||||||
"home_page_add_to_album_success": "Added {added} assets to album {album}.",
|
"home_page_add_to_album_success": "Added {added} assets to album {album}.",
|
||||||
|
"home_page_building_timeline": "Building the timeline",
|
||||||
|
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
||||||
|
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
||||||
|
"image_viewer_page_state_provider_download_error": "Download Error",
|
||||||
|
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||||
"library_page_albums": "アルバム",
|
"library_page_albums": "アルバム",
|
||||||
|
"library_page_favorites": "Favorites",
|
||||||
"library_page_new_album": "新しいアルバム",
|
"library_page_new_album": "新しいアルバム",
|
||||||
|
"library_page_sharing": "Sharing",
|
||||||
|
"library_page_sort_created": "Most recently created",
|
||||||
|
"library_page_sort_title": "Album title",
|
||||||
"login_form_button_text": "ログイン",
|
"login_form_button_text": "ログイン",
|
||||||
"login_form_email_hint": "example@email.com",
|
"login_form_email_hint": "example@email.com",
|
||||||
"login_form_endpoint_hint": "https://example.com:port/api",
|
"login_form_endpoint_hint": "https://example.com:port/api",
|
||||||
@@ -129,6 +159,12 @@
|
|||||||
"login_form_password_hint": "パスワード",
|
"login_form_password_hint": "パスワード",
|
||||||
"login_form_save_login": "ログインしたままにする",
|
"login_form_save_login": "ログインしたままにする",
|
||||||
"monthly_title_text_date_format": "yyyy年 MM月",
|
"monthly_title_text_date_format": "yyyy年 MM月",
|
||||||
|
"notification_permission_dialog_cancel": "Cancel",
|
||||||
|
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
|
||||||
|
"notification_permission_dialog_settings": "Settings",
|
||||||
|
"notification_permission_list_tile_content": "Grant permission to enable notifications.",
|
||||||
|
"notification_permission_list_tile_enable_button": "Enable Notifications",
|
||||||
|
"notification_permission_list_tile_title": "Notification Permission",
|
||||||
"profile_drawer_app_logs": "Logs",
|
"profile_drawer_app_logs": "Logs",
|
||||||
"profile_drawer_client_server_up_to_date": "サーバーとクライアント、両方最新バージョンだよ",
|
"profile_drawer_client_server_up_to_date": "サーバーとクライアント、両方最新バージョンだよ",
|
||||||
"profile_drawer_settings": "設定",
|
"profile_drawer_settings": "設定",
|
||||||
@@ -142,6 +178,8 @@
|
|||||||
"select_additional_user_for_sharing_page_suggestions": "ユーザーリスト",
|
"select_additional_user_for_sharing_page_suggestions": "ユーザーリスト",
|
||||||
"select_user_for_sharing_page_err_album": "アルバム作成に失敗...",
|
"select_user_for_sharing_page_err_album": "アルバム作成に失敗...",
|
||||||
"select_user_for_sharing_page_share_suggestions": "ユーザーの一覧",
|
"select_user_for_sharing_page_share_suggestions": "ユーザーの一覧",
|
||||||
|
"server_info_box_app_version": "App Version",
|
||||||
|
"server_info_box_server_version": "Server Version",
|
||||||
"setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).",
|
"setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).",
|
||||||
"setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).",
|
"setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).",
|
||||||
"setting_image_viewer_original_title": "Load original image",
|
"setting_image_viewer_original_title": "Load original image",
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
{
|
{
|
||||||
|
"add_to_album_bottom_sheet_added": "{album}에 추가",
|
||||||
|
"add_to_album_bottom_sheet_already_exists": "{album}에 이미 포함되어 있습니다",
|
||||||
"album_info_card_backup_album_excluded": "제외됨",
|
"album_info_card_backup_album_excluded": "제외됨",
|
||||||
"album_info_card_backup_album_included": "포함됨",
|
"album_info_card_backup_album_included": "포함됨",
|
||||||
"album_thumbnail_card_item": "1개 항목",
|
"album_thumbnail_card_item": "1개 항목",
|
||||||
@@ -12,6 +14,10 @@
|
|||||||
"album_viewer_appbar_share_leave": "앨범 나가기",
|
"album_viewer_appbar_share_leave": "앨범 나가기",
|
||||||
"album_viewer_appbar_share_remove": "앨범에서 제거",
|
"album_viewer_appbar_share_remove": "앨범에서 제거",
|
||||||
"album_viewer_page_share_add_users": "사용자 추가",
|
"album_viewer_page_share_add_users": "사용자 추가",
|
||||||
|
"asset_list_layout_settings_dynamic_layout_title": "다이나믹 레이아웃",
|
||||||
|
"asset_list_layout_settings_group_by": "다음으로 그룹화",
|
||||||
|
"asset_list_layout_settings_group_by_month": "월",
|
||||||
|
"asset_list_layout_settings_group_by_month_day": "월 + 일",
|
||||||
"asset_list_settings_subtitle": "사진 배열 레이아웃 설정",
|
"asset_list_settings_subtitle": "사진 배열 레이아웃 설정",
|
||||||
"asset_list_settings_title": "사진 배열",
|
"asset_list_settings_title": "사진 배열",
|
||||||
"backup_album_selection_page_albums_device": "기기의 앨범({})",
|
"backup_album_selection_page_albums_device": "기기의 앨범({})",
|
||||||
@@ -29,12 +35,16 @@
|
|||||||
"backup_background_service_in_progress_notification": "미디어파일 백업 중...",
|
"backup_background_service_in_progress_notification": "미디어파일 백업 중...",
|
||||||
"backup_background_service_upload_failure_notification": "{} 업로드 실패",
|
"backup_background_service_upload_failure_notification": "{} 업로드 실패",
|
||||||
"backup_controller_page_albums": "백업대상",
|
"backup_controller_page_albums": "백업대상",
|
||||||
|
"backup_controller_page_background_app_refresh_disabled_content": "Enable background app refresh in Settings > General > Background App Refresh in order to use background backup.",
|
||||||
|
"backup_controller_page_background_app_refresh_disabled_title": "Background app refresh disabled",
|
||||||
|
"backup_controller_page_background_app_refresh_enable_button_text": "Go to settings",
|
||||||
"backup_controller_page_background_battery_info_link": "사용 가이드",
|
"backup_controller_page_background_battery_info_link": "사용 가이드",
|
||||||
"backup_controller_page_background_battery_info_message": "최상의 백업 환경을 위해 Immich 앱의 백그라운드 활동을 제한하는 배터리 최적화기능을 꺼주세요.\n\n휴대폰마다 설정방법이 다르므로 제조업체별로 설정방법을 확인하세요.",
|
"backup_controller_page_background_battery_info_message": "최상의 백업 환경을 위해 Immich 앱의 백그라운드 활동을 제한하는 배터리 최적화기능을 꺼주세요.\n\n휴대폰마다 설정방법이 다르므로 제조업체별로 설정방법을 확인하세요.",
|
||||||
"backup_controller_page_background_battery_info_ok": "확인",
|
"backup_controller_page_background_battery_info_ok": "확인",
|
||||||
"backup_controller_page_background_battery_info_title": "배터리 최적화",
|
"backup_controller_page_background_battery_info_title": "배터리 최적화",
|
||||||
"backup_controller_page_background_charging": "충전 중일 때만",
|
"backup_controller_page_background_charging": "충전 중일 때만",
|
||||||
"backup_controller_page_background_configure_error": "백그라운드 서비스를 구성하지 못했습니다",
|
"backup_controller_page_background_configure_error": "백그라운드 서비스를 구성하지 못했습니다",
|
||||||
|
"backup_controller_page_background_delay": "새 미디어파일 백업 지연: {}",
|
||||||
"backup_controller_page_background_description": "백그라운드 서비스를 켜서 앱을 열지 않고도 새 미디어파일을 자동으로 백업합니다.",
|
"backup_controller_page_background_description": "백그라운드 서비스를 켜서 앱을 열지 않고도 새 미디어파일을 자동으로 백업합니다.",
|
||||||
"backup_controller_page_background_is_off": "자동 백그라운드 백업이 꺼져 있습니다",
|
"backup_controller_page_background_is_off": "자동 백그라운드 백업이 꺼져 있습니다",
|
||||||
"backup_controller_page_background_is_on": "자동 백그라운드 백업이 켜져 있습니다",
|
"backup_controller_page_background_is_on": "자동 백그라운드 백업이 켜져 있습니다",
|
||||||
@@ -82,11 +92,21 @@
|
|||||||
"cache_settings_subtitle": "Immich 앱의 캐싱 동작 제어",
|
"cache_settings_subtitle": "Immich 앱의 캐싱 동작 제어",
|
||||||
"cache_settings_thumbnail_size": "썸네일 캐시 크기 ({} 미디어)",
|
"cache_settings_thumbnail_size": "썸네일 캐시 크기 ({} 미디어)",
|
||||||
"cache_settings_title": "캐시 설정",
|
"cache_settings_title": "캐시 설정",
|
||||||
|
"change_password_form_confirm_password": "비밀번호 확인",
|
||||||
|
"change_password_form_description": "{firstName} {lastName} 님, 안녕하세요.\n\n시스템에 처음 로그인했거나 비밀번호 변경 요청이 있었습니다. 아래에 새 비밀번호를 입력하세요.",
|
||||||
|
"change_password_form_new_password": "새 비밀번호",
|
||||||
|
"change_password_form_password_mismatch": "비밀번호가 일치하지 않습니다",
|
||||||
|
"change_password_form_reenter_new_password": "새 비밀번호 재입력",
|
||||||
|
"common_add_to_album": "앨범에 추가",
|
||||||
|
"common_change_password": "비밀번호 변경",
|
||||||
|
"common_create_new_album": "새 앨범 만들기",
|
||||||
|
"common_shared": "공유됨",
|
||||||
"control_bottom_app_bar_add_to_album": "앨범에 추가",
|
"control_bottom_app_bar_add_to_album": "앨범에 추가",
|
||||||
"control_bottom_app_bar_album_info": "{} 항목",
|
"control_bottom_app_bar_album_info": "{} 항목",
|
||||||
"control_bottom_app_bar_album_info_shared": "{} 항목 · 공유됨",
|
"control_bottom_app_bar_album_info_shared": "{} 항목 · 공유됨",
|
||||||
"control_bottom_app_bar_create_new_album": "앨범 생성",
|
"control_bottom_app_bar_create_new_album": "앨범 생성",
|
||||||
"control_bottom_app_bar_delete": "삭제",
|
"control_bottom_app_bar_delete": "삭제",
|
||||||
|
"control_bottom_app_bar_favorite": "즐겨찾기",
|
||||||
"control_bottom_app_bar_share": "공유",
|
"control_bottom_app_bar_share": "공유",
|
||||||
"create_album_page_untitled": "제목없음",
|
"create_album_page_untitled": "제목없음",
|
||||||
"create_shared_album_page_create": "만들기",
|
"create_shared_album_page_create": "만들기",
|
||||||
@@ -103,26 +123,49 @@
|
|||||||
"exif_bottom_sheet_description": "설명 추가...",
|
"exif_bottom_sheet_description": "설명 추가...",
|
||||||
"exif_bottom_sheet_details": "상세정보",
|
"exif_bottom_sheet_details": "상세정보",
|
||||||
"exif_bottom_sheet_location": "위치",
|
"exif_bottom_sheet_location": "위치",
|
||||||
|
"experimental_settings_new_asset_list_subtitle": "진행중",
|
||||||
|
"experimental_settings_new_asset_list_title": "실험적 사진 그리드 적용",
|
||||||
"experimental_settings_subtitle": "문제시 책임지지 않습니다!",
|
"experimental_settings_subtitle": "문제시 책임지지 않습니다!",
|
||||||
"experimental_settings_title": "실험적기능",
|
"experimental_settings_title": "실험적기능",
|
||||||
|
"favorites_page_title": "즐겨찾기",
|
||||||
"home_page_add_to_album_conflicts": "{album} 앨범에 {added} 미디어를 추가했습니다. {failed} 이미 앨범에 있는 항목입니다.",
|
"home_page_add_to_album_conflicts": "{album} 앨범에 {added} 미디어를 추가했습니다. {failed} 이미 앨범에 있는 항목입니다.",
|
||||||
|
"home_page_add_to_album_err_local": "앨범에 미디어파일을 추가할 수 없어, 건너뜁니다.",
|
||||||
"home_page_add_to_album_success": "{album} 앨범에 {added} 미디어를 추가했습니다. ",
|
"home_page_add_to_album_success": "{album} 앨범에 {added} 미디어를 추가했습니다. ",
|
||||||
|
"home_page_building_timeline": "타임라인 생성",
|
||||||
|
"home_page_favorite_err_local": "미디어파일을 즐겨찾기에 추가할 수 없어, 건너뜁니다.",
|
||||||
|
"home_page_first_time_notice": "앱을 처음 사용하는 경우 타임라인이 앨범의 사진과 비디오를 채울 수 있도록 백업대상 앨범을 선택해야 합니다.",
|
||||||
|
"image_viewer_page_state_provider_download_error": "다운로드 에러",
|
||||||
|
"image_viewer_page_state_provider_download_success": "다운로드 완료",
|
||||||
"library_page_albums": "앨범",
|
"library_page_albums": "앨범",
|
||||||
|
"library_page_favorites": "즐겨찾기",
|
||||||
"library_page_new_album": "새 앨범",
|
"library_page_new_album": "새 앨범",
|
||||||
|
"library_page_sharing": "공유",
|
||||||
|
"library_page_sort_created": "최근생성일",
|
||||||
|
"library_page_sort_title": "앨범 제목",
|
||||||
"login_form_button_text": "로그인",
|
"login_form_button_text": "로그인",
|
||||||
"login_form_email_hint": "youremail@email.com",
|
"login_form_email_hint": "youremail@email.com",
|
||||||
"login_form_endpoint_hint": "https://your-server-ip:port/api",
|
"login_form_endpoint_hint": "https://your-server-ip:port/api",
|
||||||
"login_form_endpoint_url": "서버 엔드포인트 URL",
|
"login_form_endpoint_url": "서버 엔드포인트 URL",
|
||||||
"login_form_err_http": "엔드포인트는 http:// 또는 https://로 시작해야 합니다",
|
"login_form_err_http": "엔드포인트는 http:// 또는 https://로 시작해야 합니다",
|
||||||
"login_form_err_invalid_email": "잘못된 이메일 형식입니다",
|
"login_form_err_invalid_email": "잘못된 이메일 형식입니다",
|
||||||
|
"login_form_err_invalid_url": "잘못된 URL 형식입니다",
|
||||||
"login_form_err_leading_whitespace": "이메일 앞에 공백문자가 포함되어 있습니다",
|
"login_form_err_leading_whitespace": "이메일 앞에 공백문자가 포함되어 있습니다",
|
||||||
"login_form_err_trailing_whitespace": "이메일 뒤에 공백문자가 포함되어 있습니다",
|
"login_form_err_trailing_whitespace": "이메일 뒤에 공백문자가 포함되어 있습니다",
|
||||||
|
"login_form_failed_get_oauth_server_config": "OAuth 로그인 오류, 서버 URL을 확인해주세요",
|
||||||
|
"login_form_failed_get_oauth_server_disable": "이 서버에서는 OAuth 기능을 사용할 수 없습니다.",
|
||||||
"login_form_failed_login": "로그인 오류, 서버 URL, 이메일 및 비밀번호를 확인하세요",
|
"login_form_failed_login": "로그인 오류, 서버 URL, 이메일 및 비밀번호를 확인하세요",
|
||||||
"login_form_label_email": "이메일",
|
"login_form_label_email": "이메일",
|
||||||
"login_form_label_password": "비밀번호",
|
"login_form_label_password": "비밀번호",
|
||||||
"login_form_password_hint": "비밀번호",
|
"login_form_password_hint": "비밀번호",
|
||||||
"login_form_save_login": "로그인상태 유지",
|
"login_form_save_login": "로그인상태 유지",
|
||||||
"monthly_title_text_date_format": "y년 M월",
|
"monthly_title_text_date_format": "y년 M월",
|
||||||
|
"notification_permission_dialog_cancel": "취소",
|
||||||
|
"notification_permission_dialog_content": "알림을 활성화하려면 설정으로 이동하여 허용을 선택해주세요.",
|
||||||
|
"notification_permission_dialog_settings": "설정",
|
||||||
|
"notification_permission_list_tile_content": "알림 활성화 권한허용",
|
||||||
|
"notification_permission_list_tile_enable_button": "알림 활성화",
|
||||||
|
"notification_permission_list_tile_title": "알림 권한",
|
||||||
|
"profile_drawer_app_logs": "로그",
|
||||||
"profile_drawer_client_server_up_to_date": "클라이언트와 서버가 최신 상태입니다",
|
"profile_drawer_client_server_up_to_date": "클라이언트와 서버가 최신 상태입니다",
|
||||||
"profile_drawer_settings": "설정",
|
"profile_drawer_settings": "설정",
|
||||||
"profile_drawer_sign_out": "로그아웃",
|
"profile_drawer_sign_out": "로그아웃",
|
||||||
@@ -135,11 +178,19 @@
|
|||||||
"select_additional_user_for_sharing_page_suggestions": "초대 가능한 사용자 제안",
|
"select_additional_user_for_sharing_page_suggestions": "초대 가능한 사용자 제안",
|
||||||
"select_user_for_sharing_page_err_album": "앨범 생성 실패",
|
"select_user_for_sharing_page_err_album": "앨범 생성 실패",
|
||||||
"select_user_for_sharing_page_share_suggestions": "초대 가능한 사용자 제안",
|
"select_user_for_sharing_page_share_suggestions": "초대 가능한 사용자 제안",
|
||||||
|
"server_info_box_app_version": "앱 버전",
|
||||||
|
"server_info_box_server_version": "서버 버전",
|
||||||
|
"setting_image_viewer_help": "상세뷰어는 먼저 작은 썸네일을 불러온 다음 중간크기 미리보기를 불러오고(활성화된 경우) 마지막으로 원본을 불러옵니다(활성화된 경우).",
|
||||||
|
"setting_image_viewer_original_subtitle": "원본 해상도 이미지(고화질)를 로드하려면 활성화합니다. 데이터 사용량을 줄이려면 비활성화합니다.",
|
||||||
|
"setting_image_viewer_original_title": "원본 이미지 불러오기",
|
||||||
|
"setting_image_viewer_preview_subtitle": "중간 해상도 이미지를 로드하려면 활성화합니다. 원본을 직접 로드하거나 썸네일만 사용하려면 비활성화 하세요.",
|
||||||
|
"setting_image_viewer_preview_title": "미리보기 이미지 불러오기",
|
||||||
"setting_notifications_notify_failures_grace_period": "백그라운드 백업 실패 알림: {}",
|
"setting_notifications_notify_failures_grace_period": "백그라운드 백업 실패 알림: {}",
|
||||||
"setting_notifications_notify_hours": "{}시간 뒤",
|
"setting_notifications_notify_hours": "{}시간 뒤",
|
||||||
"setting_notifications_notify_immediately": "즉시",
|
"setting_notifications_notify_immediately": "즉시",
|
||||||
"setting_notifications_notify_minutes": "{}분 뒤",
|
"setting_notifications_notify_minutes": "{}분 뒤",
|
||||||
"setting_notifications_notify_never": "알리지 않음",
|
"setting_notifications_notify_never": "알리지 않음",
|
||||||
|
"setting_notifications_notify_seconds": "{} 초",
|
||||||
"setting_notifications_single_progress_subtitle": "미디어별 상세 진행률 표시",
|
"setting_notifications_single_progress_subtitle": "미디어별 상세 진행률 표시",
|
||||||
"setting_notifications_single_progress_title": "백그라운드 작업 세부 진행률 표시",
|
"setting_notifications_single_progress_title": "백그라운드 작업 세부 진행률 표시",
|
||||||
"setting_notifications_subtitle": "알림 기본 설정 조정",
|
"setting_notifications_subtitle": "알림 기본 설정 조정",
|
||||||
@@ -147,6 +198,7 @@
|
|||||||
"setting_notifications_total_progress_subtitle": "전체 업로드 진행률(완료/전체)",
|
"setting_notifications_total_progress_subtitle": "전체 업로드 진행률(완료/전체)",
|
||||||
"setting_notifications_total_progress_title": "백그라운드 작업 전체 진행률 표시",
|
"setting_notifications_total_progress_title": "백그라운드 작업 전체 진행률 표시",
|
||||||
"setting_pages_app_bar_settings": "설정",
|
"setting_pages_app_bar_settings": "설정",
|
||||||
|
"settings_require_restart": "설정을 적용하려면 Immich를 다시 시작하세요.",
|
||||||
"share_add": "추가",
|
"share_add": "추가",
|
||||||
"share_add_photos": "사진 추가",
|
"share_add_photos": "사진 추가",
|
||||||
"share_add_title": "새 앨범제목",
|
"share_add_title": "새 앨범제목",
|
||||||
@@ -177,5 +229,5 @@
|
|||||||
"version_announcement_overlay_text_1": "안녕하세요!",
|
"version_announcement_overlay_text_1": "안녕하세요!",
|
||||||
"version_announcement_overlay_text_2": "앱에 새로운 업데이트가 있습니다!",
|
"version_announcement_overlay_text_2": "앱에 새로운 업데이트가 있습니다!",
|
||||||
"version_announcement_overlay_text_3": "특히 WatchTower 또는 서버 응용 프로그램 자동 업데이트를 처리하는 메커니즘을 사용하는 경우 잘못된 구성을 방지하기 위해 docker-compose 및 .env 설정이 최신 상태인지 확인하세요.",
|
"version_announcement_overlay_text_3": "특히 WatchTower 또는 서버 응용 프로그램 자동 업데이트를 처리하는 메커니즘을 사용하는 경우 잘못된 구성을 방지하기 위해 docker-compose 및 .env 설정이 최신 상태인지 확인하세요.",
|
||||||
"version_announcement_overlay_title": "새 서버 버전 사용 가능 🎉"
|
"version_announcement_overlay_title": "새 서버 버전 사용 가능 \uD83C\uDF89"
|
||||||
}
|
}
|
||||||