Compare commits
153 Commits
fix/asset-
...
tmp/demo-s
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2f2e281b07 | ||
|
|
40cff2893c | ||
|
|
b621281351 | ||
|
|
4336afd6bf | ||
|
|
5a456ef277 | ||
|
|
5cb5fcbf62 | ||
|
|
95e3b15776 | ||
|
|
50335dc363 | ||
|
|
6e62c09d84 | ||
|
|
00d3b8d83a | ||
|
|
d911b76c08 | ||
|
|
502854cee1 | ||
|
|
59e5c82569 | ||
|
|
e4b0c00885 | ||
|
|
946507231d | ||
|
|
20ba800a50 | ||
|
|
f434e858ed | ||
|
|
3e03c47fbf | ||
|
|
9aa3850769 | ||
|
|
628dcdeebf | ||
|
|
11bfde2aa8 | ||
|
|
69b1ac47ea | ||
|
|
4f81265694 | ||
|
|
3428a876c7 | ||
|
|
bd822657d3 | ||
|
|
9e7744a9ab | ||
|
|
7729fe80fa | ||
|
|
68e24ad168 | ||
|
|
186c573565 | ||
|
|
5b63b9fc8b | ||
|
|
5c80e8734b | ||
|
|
a5093a9434 | ||
|
|
637ad1fdcb | ||
|
|
6789c2ac19 | ||
|
|
838a8dd9a6 | ||
|
|
d71c5602c3 | ||
|
|
8c50e3e80e | ||
|
|
efcb1129ce | ||
|
|
faabda4446 | ||
|
|
b8b2898c87 | ||
|
|
b25914c2a5 | ||
|
|
d613f15606 | ||
|
|
a831876fdc | ||
|
|
09f4476f97 | ||
|
|
238c151ac3 | ||
|
|
e4f83680d9 | ||
|
|
74f7fd4b53 | ||
|
|
f4dbfd856e | ||
|
|
55a3c30664 | ||
|
|
6fa0cb534a | ||
|
|
9f0dbfc150 | ||
|
|
6419ac74af | ||
|
|
d2bcf5d716 | ||
|
|
c8331f111f | ||
|
|
4b4bcd23f4 | ||
|
|
3fde5a8328 | ||
|
|
cc3ea32cd2 | ||
|
|
431cf281da | ||
|
|
8f786fd7dd | ||
|
|
3e73765375 | ||
|
|
411521b21d | ||
|
|
e163808348 | ||
|
|
411772123f | ||
|
|
84c35e35d6 | ||
|
|
f7d730eb05 | ||
|
|
16e0166d22 | ||
|
|
43f8f473e9 | ||
|
|
cc393b2b7b | ||
|
|
6341962de4 | ||
|
|
c26b28f6a4 | ||
|
|
c72c82c401 | ||
|
|
fecf3809a6 | ||
|
|
619bd72de9 | ||
|
|
fd4a5f71b5 | ||
|
|
2f8725c66f | ||
|
|
9fbd6369b9 | ||
|
|
c547d849d9 | ||
|
|
6ba94ac2f2 | ||
|
|
dfb0626c91 | ||
|
|
392ce7deb2 | ||
|
|
75df8fc10e | ||
|
|
4cf7c55680 | ||
|
|
b8ff93a3c9 | ||
|
|
37eb70c1eb | ||
|
|
aa4d6405f4 | ||
|
|
ae447542a4 | ||
|
|
90f21d9047 | ||
|
|
567a92fe77 | ||
|
|
8d6f5a2da9 | ||
|
|
69662e1ab4 | ||
|
|
42b1efb679 | ||
|
|
b8bc11b0d9 | ||
|
|
91065db3ff | ||
|
|
c14668bdd4 | ||
|
|
9757f70064 | ||
|
|
4a0045db44 | ||
|
|
a651a4bf0e | ||
|
|
8bc80076bb | ||
|
|
89656472ef | ||
|
|
d9c6ec06e5 | ||
|
|
4bfef2460a | ||
|
|
ad151130f9 | ||
|
|
a77608e36b | ||
|
|
9e015c7f97 | ||
|
|
df8ba21b7d | ||
|
|
a285b1898e | ||
|
|
6a8e38042d | ||
|
|
55b52ecbec | ||
|
|
b5d5c40c69 | ||
|
|
b00da18e84 | ||
|
|
3c87341902 | ||
|
|
bcd9248b43 | ||
|
|
dbc279f843 | ||
|
|
21954939cf | ||
|
|
d537f2c2d1 | ||
|
|
1820c0aa0d | ||
|
|
0d805a1f5b | ||
|
|
f5e6042eb1 | ||
|
|
8de71ddaf3 | ||
|
|
7075c5b393 | ||
|
|
9398b0d4b3 | ||
|
|
1a0a9ef36c | ||
|
|
ce456709b5 | ||
|
|
bc90678276 | ||
|
|
217a90bf61 | ||
|
|
62ba8c3e71 | ||
|
|
564724b398 | ||
|
|
cedeba8723 | ||
|
|
1d994333a6 | ||
|
|
db8155f738 | ||
|
|
4d723f4b56 | ||
|
|
898b3e75c2 | ||
|
|
8c2d02c362 | ||
|
|
d7a6e78bf0 | ||
|
|
8723f585e0 | ||
|
|
9f46ba8eb4 | ||
|
|
fe19f9ba84 | ||
|
|
b609f35841 | ||
|
|
9cf3b88f80 | ||
|
|
e96ffd43e7 | ||
|
|
dd263b010c | ||
|
|
6c2985df26 | ||
|
|
2b37caba03 | ||
|
|
6a40aa83b7 | ||
|
|
93907a89d8 | ||
|
|
3ce8608662 | ||
|
|
d0e283f687 | ||
|
|
f8b40188e2 | ||
|
|
9105e696bf | ||
|
|
0a8135dde4 | ||
|
|
0bb95544e5 | ||
|
|
14c3b99c0f | ||
|
|
1e184a70f1 |
@@ -1,4 +1,4 @@
|
||||
ARG BASEIMAGE=mcr.microsoft.com/devcontainers/typescript-node:22@sha256:9791f4aa527774bc370c6bd2f6705ce5a686f1e6f204badd8dfaacce28c631ae
|
||||
ARG BASEIMAGE=mcr.microsoft.com/devcontainers/typescript-node:22@sha256:2ef23730ec68d8511ec8e6e0b82550ca728b256805d81f60ed890f3bfb21cfb9
|
||||
FROM ${BASEIMAGE}
|
||||
|
||||
# Flutter SDK
|
||||
|
||||
3
.gitattributes
vendored
3
.gitattributes
vendored
@@ -6,6 +6,9 @@ mobile/openapi/**/*.dart linguist-generated=true
|
||||
mobile/lib/**/*.g.dart -diff -merge
|
||||
mobile/lib/**/*.g.dart linguist-generated=true
|
||||
|
||||
mobile/lib/**/*.drift.dart -diff -merge
|
||||
mobile/lib/**/*.drift.dart linguist-generated=true
|
||||
|
||||
open-api/typescript-sdk/fetch-client.ts -diff -merge
|
||||
open-api/typescript-sdk/fetch-client.ts linguist-generated=true
|
||||
|
||||
|
||||
1
.github/.nvmrc
vendored
Normal file
1
.github/.nvmrc
vendored
Normal file
@@ -0,0 +1 @@
|
||||
22.14.0
|
||||
@@ -1,5 +1,5 @@
|
||||
title: "[Feature] feature-name-goes-here"
|
||||
labels: ["feature"]
|
||||
title: '[Feature] feature-name-goes-here'
|
||||
labels: ['feature']
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
@@ -13,7 +13,7 @@ body:
|
||||
attributes:
|
||||
label: I have searched the existing feature requests, both open and closed, to make sure this is not a duplicate request.
|
||||
options:
|
||||
- label: "Yes"
|
||||
- label: 'Yes'
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
|
||||
9
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
9
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
@@ -5,7 +5,7 @@ body:
|
||||
attributes:
|
||||
label: I have searched the existing issues, both open and closed, to make sure this is not a duplicate report.
|
||||
options:
|
||||
- label: "Yes"
|
||||
- label: 'Yes'
|
||||
required: true
|
||||
|
||||
- type: markdown
|
||||
@@ -84,7 +84,7 @@ body:
|
||||
id: repro
|
||||
attributes:
|
||||
label: Reproduction steps
|
||||
description: "How do you trigger this bug? Please walk us through it step by step."
|
||||
description: 'How do you trigger this bug? Please walk us through it step by step.'
|
||||
value: |
|
||||
1.
|
||||
2.
|
||||
@@ -97,12 +97,13 @@ body:
|
||||
id: logs
|
||||
attributes:
|
||||
label: Relevant log output
|
||||
description: Please copy and paste any relevant logs below. (code formatting is
|
||||
description:
|
||||
Please copy and paste any relevant logs below. (code formatting is
|
||||
enabled, no need for backticks)
|
||||
render: shell
|
||||
validations:
|
||||
required: false
|
||||
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Additional information
|
||||
|
||||
28
.github/package-lock.json
generated
vendored
Normal file
28
.github/package-lock.json
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"name": ".github",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"devDependencies": {
|
||||
"prettier": "^3.5.3"
|
||||
}
|
||||
},
|
||||
"node_modules/prettier": {
|
||||
"version": "3.5.3",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
|
||||
"integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"prettier": "bin/prettier.cjs"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/prettier/prettier?sponsor=1"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
9
.github/package.json
vendored
Normal file
9
.github/package.json
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"scripts": {
|
||||
"format": "prettier --check .",
|
||||
"format:fix": "prettier --write ."
|
||||
},
|
||||
"devDependencies": {
|
||||
"prettier": "^3.5.3"
|
||||
}
|
||||
}
|
||||
66
.github/release.yml
vendored
66
.github/release.yml
vendored
@@ -1,33 +1,33 @@
|
||||
changelog:
|
||||
categories:
|
||||
- title: 🚨 Breaking Changes
|
||||
labels:
|
||||
- changelog:breaking-change
|
||||
|
||||
- title: 🫥 Deprecated Changes
|
||||
labels:
|
||||
- changelog:deprecated
|
||||
|
||||
- title: 🔒 Security
|
||||
labels:
|
||||
- changelog:security
|
||||
|
||||
- title: 🚀 Features
|
||||
labels:
|
||||
- changelog:feature
|
||||
|
||||
- title: 🌟 Enhancements
|
||||
labels:
|
||||
- changelog:enhancement
|
||||
|
||||
- title: 🐛 Bug fixes
|
||||
labels:
|
||||
- changelog:bugfix
|
||||
|
||||
- title: 📚 Documentation
|
||||
labels:
|
||||
- changelog:documentation
|
||||
|
||||
- title: 🌐 Translations
|
||||
labels:
|
||||
- changelog:translation
|
||||
changelog:
|
||||
categories:
|
||||
- title: 🚨 Breaking Changes
|
||||
labels:
|
||||
- changelog:breaking-change
|
||||
|
||||
- title: 🫥 Deprecated Changes
|
||||
labels:
|
||||
- changelog:deprecated
|
||||
|
||||
- title: 🔒 Security
|
||||
labels:
|
||||
- changelog:security
|
||||
|
||||
- title: 🚀 Features
|
||||
labels:
|
||||
- changelog:feature
|
||||
|
||||
- title: 🌟 Enhancements
|
||||
labels:
|
||||
- changelog:enhancement
|
||||
|
||||
- title: 🐛 Bug fixes
|
||||
labels:
|
||||
- changelog:bugfix
|
||||
|
||||
- title: 📚 Documentation
|
||||
labels:
|
||||
- changelog:documentation
|
||||
|
||||
- title: 🌐 Translations
|
||||
labels:
|
||||
- changelog:translation
|
||||
|
||||
12
.github/workflows/build-mobile.yml
vendored
12
.github/workflows/build-mobile.yml
vendored
@@ -22,9 +22,9 @@ jobs:
|
||||
should_run: ${{ steps.found_paths.outputs.mobile == 'true' || steps.should_force.outputs.should_force == 'true' }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
- id: found_paths
|
||||
uses: dorny/paths-filter@v3
|
||||
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3
|
||||
with:
|
||||
filters: |
|
||||
mobile:
|
||||
@@ -51,18 +51,18 @@ jobs:
|
||||
ref="${input_ref:-$github_ref}"
|
||||
echo "ref=$ref" >> $GITHUB_OUTPUT
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
with:
|
||||
ref: ${{ steps.get-ref.outputs.ref }}
|
||||
|
||||
- uses: actions/setup-java@v4
|
||||
- uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4
|
||||
with:
|
||||
distribution: 'zulu'
|
||||
java-version: '17'
|
||||
cache: 'gradle'
|
||||
|
||||
- name: Setup Flutter SDK
|
||||
uses: subosito/flutter-action@v2
|
||||
uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2
|
||||
with:
|
||||
channel: 'stable'
|
||||
flutter-version-file: ./mobile/pubspec.yaml
|
||||
@@ -89,7 +89,7 @@ jobs:
|
||||
flutter build apk --release --split-per-abi --target-platform android-arm,android-arm64,android-x64
|
||||
|
||||
- name: Publish Android Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
||||
with:
|
||||
name: release-apk-signed
|
||||
path: mobile/build/app/outputs/flutter-apk/*.apk
|
||||
|
||||
2
.github/workflows/cache-cleanup.yml
vendored
2
.github/workflows/cache-cleanup.yml
vendored
@@ -14,7 +14,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Cleanup
|
||||
run: |
|
||||
|
||||
17
.github/workflows/cli.yml
vendored
17
.github/workflows/cli.yml
vendored
@@ -6,7 +6,6 @@ on:
|
||||
- 'cli/**'
|
||||
- '.github/workflows/cli.yml'
|
||||
pull_request:
|
||||
branches: [main]
|
||||
paths:
|
||||
- 'cli/**'
|
||||
- '.github/workflows/cli.yml'
|
||||
@@ -29,9 +28,9 @@ jobs:
|
||||
working-directory: ./cli
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
# Setup .npmrc file to publish to npm
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
|
||||
with:
|
||||
node-version-file: './cli/.nvmrc'
|
||||
registry-url: 'https://registry.npmjs.org'
|
||||
@@ -53,16 +52,16 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3.6.0
|
||||
uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3.10.0
|
||||
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
|
||||
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v3
|
||||
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
|
||||
if: ${{ !github.event.pull_request.head.repo.fork }}
|
||||
with:
|
||||
registry: ghcr.io
|
||||
@@ -77,7 +76,7 @@ jobs:
|
||||
|
||||
- name: Generate docker image tags
|
||||
id: metadata
|
||||
uses: docker/metadata-action@v5
|
||||
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5
|
||||
with:
|
||||
flavor: |
|
||||
latest=false
|
||||
@@ -88,7 +87,7 @@ jobs:
|
||||
type=raw,value=latest,enable=${{ github.event_name == 'release' }}
|
||||
|
||||
- name: Build and push image
|
||||
uses: docker/build-push-action@v6.15.0
|
||||
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0
|
||||
with:
|
||||
file: cli/Dockerfile
|
||||
platforms: linux/amd64,linux/arm64
|
||||
|
||||
63
.github/workflows/codeql-analysis.yml
vendored
63
.github/workflows/codeql-analysis.yml
vendored
@@ -9,14 +9,14 @@
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
name: "CodeQL"
|
||||
name: 'CodeQL'
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "main" ]
|
||||
branches: ['main']
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ "main" ]
|
||||
branches: ['main']
|
||||
schedule:
|
||||
- cron: '20 13 * * 1'
|
||||
|
||||
@@ -36,43 +36,42 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'javascript', 'python' ]
|
||||
language: ['javascript', 'python']
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
||||
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v3
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# 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.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@1b549b9259bda1cb5ddde3b41741a82a2d15a841 # v3
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# 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.
|
||||
# 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
|
||||
# queries: security-extended,security-and-quality
|
||||
# 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
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@1b549b9259bda1cb5ddde3b41741a82a2d15a841 # v3
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v3
|
||||
# ℹ️ 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
|
||||
|
||||
# ℹ️ 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
|
||||
# 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.
|
||||
|
||||
# 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.
|
||||
# - run: |
|
||||
# echo "Run, Build Application using script"
|
||||
# ./location_of_script_within_repo/buildscript.sh
|
||||
|
||||
# - run: |
|
||||
# echo "Run, Build Application using script"
|
||||
# ./location_of_script_within_repo/buildscript.sh
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v3
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@1b549b9259bda1cb5ddde3b41741a82a2d15a841 # v3
|
||||
with:
|
||||
category: '/language:${{matrix.language}}'
|
||||
|
||||
98
.github/workflows/docker.yml
vendored
98
.github/workflows/docker.yml
vendored
@@ -23,9 +23,9 @@ jobs:
|
||||
should_run_ml: ${{ steps.found_paths.outputs.machine-learning == 'true' || steps.should_force.outputs.should_force == 'true' }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
- id: found_paths
|
||||
uses: dorny/paths-filter@v3
|
||||
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3
|
||||
with:
|
||||
filters: |
|
||||
server:
|
||||
@@ -49,23 +49,23 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
suffix: ["", "-cuda", "-openvino", "-armnn"]
|
||||
suffix: ['', '-cuda', '-rocm', '-openvino', '-armnn', '-rknn']
|
||||
steps:
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Re-tag image
|
||||
run: |
|
||||
REGISTRY_NAME="ghcr.io"
|
||||
REPOSITORY=${{ github.repository_owner }}/immich-machine-learning
|
||||
TAG_OLD=main${{ matrix.suffix }}
|
||||
TAG_PR=${{ github.event.number == 0 && github.ref_name || format('pr-{0}', github.event.number) }}${{ matrix.suffix }}
|
||||
TAG_COMMIT=commit-${{ github.event_name != 'pull_request' && github.sha || github.event.pull_request.head.sha }}${{ matrix.suffix }}
|
||||
docker buildx imagetools create -t $REGISTRY_NAME/$REPOSITORY:$TAG_PR $REGISTRY_NAME/$REPOSITORY:$TAG_OLD
|
||||
docker buildx imagetools create -t $REGISTRY_NAME/$REPOSITORY:$TAG_COMMIT $REGISTRY_NAME/$REPOSITORY:$TAG_OLD
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Re-tag image
|
||||
run: |
|
||||
REGISTRY_NAME="ghcr.io"
|
||||
REPOSITORY=${{ github.repository_owner }}/immich-machine-learning
|
||||
TAG_OLD=main${{ matrix.suffix }}
|
||||
TAG_PR=${{ github.event.number == 0 && github.ref_name || format('pr-{0}', github.event.number) }}${{ matrix.suffix }}
|
||||
TAG_COMMIT=commit-${{ github.event_name != 'pull_request' && github.sha || github.event.pull_request.head.sha }}${{ matrix.suffix }}
|
||||
docker buildx imagetools create -t $REGISTRY_NAME/$REPOSITORY:$TAG_PR $REGISTRY_NAME/$REPOSITORY:$TAG_OLD
|
||||
docker buildx imagetools create -t $REGISTRY_NAME/$REPOSITORY:$TAG_COMMIT $REGISTRY_NAME/$REPOSITORY:$TAG_OLD
|
||||
|
||||
retag_server:
|
||||
name: Re-Tag Server
|
||||
@@ -74,10 +74,10 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
suffix: [""]
|
||||
suffix: ['']
|
||||
steps:
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v3
|
||||
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
@@ -120,6 +120,11 @@ jobs:
|
||||
device: cuda
|
||||
suffix: -cuda
|
||||
|
||||
- platform: linux/amd64
|
||||
runner: mich
|
||||
device: rocm
|
||||
suffix: -rocm
|
||||
|
||||
- platform: linux/amd64
|
||||
runner: ubuntu-latest
|
||||
device: openvino
|
||||
@@ -130,6 +135,11 @@ jobs:
|
||||
device: armnn
|
||||
suffix: -armnn
|
||||
|
||||
- platform: linux/arm64
|
||||
runner: ubuntu-24.04-arm
|
||||
device: rknn
|
||||
suffix: -rknn
|
||||
|
||||
steps:
|
||||
- name: Prepare
|
||||
run: |
|
||||
@@ -137,13 +147,13 @@ jobs:
|
||||
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3.10.0
|
||||
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
|
||||
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v3
|
||||
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
|
||||
if: ${{ !github.event.pull_request.head.repo.fork }}
|
||||
with:
|
||||
registry: ghcr.io
|
||||
@@ -170,7 +180,7 @@ jobs:
|
||||
|
||||
- name: Build and push image
|
||||
id: build
|
||||
uses: docker/build-push-action@v6.15.0
|
||||
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0
|
||||
with:
|
||||
context: ${{ env.context }}
|
||||
file: ${{ env.file }}
|
||||
@@ -195,7 +205,7 @@ jobs:
|
||||
touch "${{ runner.temp }}/digests/${digest#sha256:}"
|
||||
|
||||
- name: Upload digest
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
||||
with:
|
||||
name: ml-digests-${{ matrix.device }}-${{ env.PLATFORM_PAIR }}
|
||||
path: ${{ runner.temp }}/digests/*
|
||||
@@ -215,15 +225,19 @@ jobs:
|
||||
- device: cpu
|
||||
- device: cuda
|
||||
suffix: -cuda
|
||||
- device: rocm
|
||||
suffix: -rocm
|
||||
- device: openvino
|
||||
suffix: -openvino
|
||||
- device: armnn
|
||||
suffix: -armnn
|
||||
- device: rknn
|
||||
suffix: -rknn
|
||||
needs:
|
||||
- build_and_push_ml
|
||||
steps:
|
||||
- name: Download digests
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
|
||||
with:
|
||||
path: ${{ runner.temp }}/digests
|
||||
pattern: ml-digests-${{ matrix.device }}-*
|
||||
@@ -231,26 +245,26 @@ jobs:
|
||||
|
||||
- name: Login to Docker Hub
|
||||
if: ${{ github.event_name == 'release' }}
|
||||
uses: docker/login-action@v3
|
||||
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Login to GHCR
|
||||
uses: docker/login-action@v3
|
||||
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3
|
||||
|
||||
- name: Generate docker image tags
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5
|
||||
env:
|
||||
DOCKER_METADATA_PR_HEAD_SHA: "true"
|
||||
DOCKER_METADATA_PR_HEAD_SHA: 'true'
|
||||
with:
|
||||
flavor: |
|
||||
# Disable latest tag
|
||||
@@ -301,13 +315,13 @@ jobs:
|
||||
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3
|
||||
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v3
|
||||
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
|
||||
if: ${{ !github.event.pull_request.head.repo.fork }}
|
||||
with:
|
||||
registry: ghcr.io
|
||||
@@ -334,7 +348,7 @@ jobs:
|
||||
|
||||
- name: Build and push image
|
||||
id: build
|
||||
uses: docker/build-push-action@v6.15.0
|
||||
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0
|
||||
with:
|
||||
context: ${{ env.context }}
|
||||
file: ${{ env.file }}
|
||||
@@ -359,7 +373,7 @@ jobs:
|
||||
touch "${{ runner.temp }}/digests/${digest#sha256:}"
|
||||
|
||||
- name: Upload digest
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
||||
with:
|
||||
name: server-digests-${{ env.PLATFORM_PAIR }}
|
||||
path: ${{ runner.temp }}/digests/*
|
||||
@@ -377,7 +391,7 @@ jobs:
|
||||
- build_and_push_server
|
||||
steps:
|
||||
- name: Download digests
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
|
||||
with:
|
||||
path: ${{ runner.temp }}/digests
|
||||
pattern: server-digests-*
|
||||
@@ -385,26 +399,26 @@ jobs:
|
||||
|
||||
- name: Login to Docker Hub
|
||||
if: ${{ github.event_name == 'release' }}
|
||||
uses: docker/login-action@v3
|
||||
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Login to GHCR
|
||||
uses: docker/login-action@v3
|
||||
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3
|
||||
|
||||
- name: Generate docker image tags
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5
|
||||
env:
|
||||
DOCKER_METADATA_PR_HEAD_SHA: "true"
|
||||
DOCKER_METADATA_PR_HEAD_SHA: 'true'
|
||||
with:
|
||||
flavor: |
|
||||
# Disable latest tag
|
||||
|
||||
11
.github/workflows/docs-build.yml
vendored
11
.github/workflows/docs-build.yml
vendored
@@ -3,7 +3,6 @@ on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
branches: [main]
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
@@ -18,9 +17,9 @@ jobs:
|
||||
should_run: ${{ steps.found_paths.outputs.docs == 'true' || steps.should_force.outputs.should_force == 'true' }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
- id: found_paths
|
||||
uses: dorny/paths-filter@v3
|
||||
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3
|
||||
with:
|
||||
filters: |
|
||||
docs:
|
||||
@@ -42,10 +41,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
|
||||
with:
|
||||
node-version-file: './docs/.nvmrc'
|
||||
|
||||
@@ -59,7 +58,7 @@ jobs:
|
||||
run: npm run build
|
||||
|
||||
- name: Upload build output
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
||||
with:
|
||||
name: docs-build-output
|
||||
path: docs/build/
|
||||
|
||||
42
.github/workflows/docs-deploy.yml
vendored
42
.github/workflows/docs-deploy.yml
vendored
@@ -1,7 +1,7 @@
|
||||
name: Docs deploy
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: ["Docs build"]
|
||||
workflows: ['Docs build']
|
||||
types:
|
||||
- completed
|
||||
|
||||
@@ -17,7 +17,7 @@ jobs:
|
||||
run: echo 'The triggering workflow did not succeed' && exit 1
|
||||
- name: Get artifact
|
||||
id: get-artifact
|
||||
uses: actions/github-script@v7
|
||||
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
|
||||
with:
|
||||
script: |
|
||||
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
|
||||
@@ -35,7 +35,7 @@ jobs:
|
||||
return { found: true, id: matchArtifact.id };
|
||||
- name: Determine deploy parameters
|
||||
id: parameters
|
||||
uses: actions/github-script@v7
|
||||
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
|
||||
with:
|
||||
script: |
|
||||
const eventType = context.payload.workflow_run.event;
|
||||
@@ -98,11 +98,11 @@ jobs:
|
||||
if: ${{ fromJson(needs.checks.outputs.artifact).found && fromJson(needs.checks.outputs.parameters).shouldDeploy }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Load parameters
|
||||
id: parameters
|
||||
uses: actions/github-script@v7
|
||||
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
|
||||
with:
|
||||
script: |
|
||||
const json = `${{ needs.checks.outputs.parameters }}`;
|
||||
@@ -115,7 +115,7 @@ jobs:
|
||||
echo "Starting docs deployment for ${{ steps.parameters.outputs.event }} ${{ steps.parameters.outputs.name }}"
|
||||
|
||||
- name: Download artifact
|
||||
uses: actions/github-script@v7
|
||||
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
|
||||
with:
|
||||
script: |
|
||||
let artifact = ${{ needs.checks.outputs.artifact }};
|
||||
@@ -138,12 +138,12 @@ jobs:
|
||||
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
|
||||
uses: gruntwork-io/terragrunt-action@v2
|
||||
uses: gruntwork-io/terragrunt-action@9559e51d05873b0ea467c42bbabcb5c067642ccc # v2
|
||||
with:
|
||||
tg_version: "0.58.12"
|
||||
tofu_version: "1.7.1"
|
||||
tg_dir: "deployment/modules/cloudflare/docs"
|
||||
tg_command: "apply"
|
||||
tg_version: '0.58.12'
|
||||
tofu_version: '1.7.1'
|
||||
tg_dir: 'deployment/modules/cloudflare/docs'
|
||||
tg_command: 'apply'
|
||||
|
||||
- name: Deploy Docs Subdomain Output
|
||||
id: docs-output
|
||||
@@ -153,12 +153,12 @@ jobs:
|
||||
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
|
||||
uses: gruntwork-io/terragrunt-action@v2
|
||||
uses: gruntwork-io/terragrunt-action@9559e51d05873b0ea467c42bbabcb5c067642ccc # v2
|
||||
with:
|
||||
tg_version: "0.58.12"
|
||||
tofu_version: "1.7.1"
|
||||
tg_dir: "deployment/modules/cloudflare/docs"
|
||||
tg_command: "output -json"
|
||||
tg_version: '0.58.12'
|
||||
tofu_version: '1.7.1'
|
||||
tg_dir: 'deployment/modules/cloudflare/docs'
|
||||
tg_command: 'output -json'
|
||||
|
||||
- name: Output Cleaning
|
||||
id: clean
|
||||
@@ -167,13 +167,13 @@ jobs:
|
||||
echo "output=$TG_OUT" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Publish to Cloudflare Pages
|
||||
uses: cloudflare/pages-action@v1
|
||||
uses: cloudflare/pages-action@f0a1cd58cd66095dee69bfa18fa5efd1dde93bca # v1
|
||||
with:
|
||||
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN_PAGES_UPLOAD }}
|
||||
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||
projectName: ${{ fromJson(steps.clean.outputs.output).pages_project_name.value }}
|
||||
workingDirectory: "docs"
|
||||
directory: "build"
|
||||
workingDirectory: 'docs'
|
||||
directory: 'build'
|
||||
branch: ${{ steps.parameters.outputs.name }}
|
||||
wranglerVersion: '3'
|
||||
|
||||
@@ -184,7 +184,7 @@ jobs:
|
||||
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
|
||||
uses: gruntwork-io/terragrunt-action@v2
|
||||
uses: gruntwork-io/terragrunt-action@9559e51d05873b0ea467c42bbabcb5c067642ccc # v2
|
||||
with:
|
||||
tg_version: '0.58.12'
|
||||
tofu_version: '1.7.1'
|
||||
@@ -192,7 +192,7 @@ jobs:
|
||||
tg_command: 'apply'
|
||||
|
||||
- name: Comment
|
||||
uses: actions-cool/maintain-one-comment@v3
|
||||
uses: actions-cool/maintain-one-comment@4b2dbf086015f892dcb5e8c1106f5fccd6c1476b # v3
|
||||
if: ${{ steps.parameters.outputs.event == 'pr' }}
|
||||
with:
|
||||
number: ${{ fromJson(needs.checks.outputs.parameters).pr_number }}
|
||||
|
||||
18
.github/workflows/docs-destroy.yml
vendored
18
.github/workflows/docs-destroy.yml
vendored
@@ -9,24 +9,24 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Destroy Docs Subdomain
|
||||
env:
|
||||
TF_VAR_prefix_name: "pr-${{ github.event.number }}"
|
||||
TF_VAR_prefix_event_type: "pr"
|
||||
TF_VAR_prefix_name: 'pr-${{ github.event.number }}'
|
||||
TF_VAR_prefix_event_type: 'pr'
|
||||
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||
TF_STATE_POSTGRES_CONN_STR: ${{ secrets.TF_STATE_POSTGRES_CONN_STR }}
|
||||
uses: gruntwork-io/terragrunt-action@v2
|
||||
uses: gruntwork-io/terragrunt-action@9559e51d05873b0ea467c42bbabcb5c067642ccc # v2
|
||||
with:
|
||||
tg_version: "0.58.12"
|
||||
tofu_version: "1.7.1"
|
||||
tg_dir: "deployment/modules/cloudflare/docs"
|
||||
tg_command: "destroy -refresh=false"
|
||||
tg_version: '0.58.12'
|
||||
tofu_version: '1.7.1'
|
||||
tg_dir: 'deployment/modules/cloudflare/docs'
|
||||
tg_command: 'destroy -refresh=false'
|
||||
|
||||
- name: Comment
|
||||
uses: actions-cool/maintain-one-comment@v3
|
||||
uses: actions-cool/maintain-one-comment@4b2dbf086015f892dcb5e8c1106f5fccd6c1476b # v3
|
||||
with:
|
||||
number: ${{ github.event.number }}
|
||||
delete: true
|
||||
|
||||
11
.github/workflows/fix-format.yml
vendored
11
.github/workflows/fix-format.yml
vendored
@@ -13,19 +13,19 @@ jobs:
|
||||
steps:
|
||||
- name: Generate a token
|
||||
id: generate-token
|
||||
uses: actions/create-github-app-token@v1
|
||||
uses: actions/create-github-app-token@d72941d797fd3113feb6b93fd0dec494b13a2547 # v1
|
||||
with:
|
||||
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||
|
||||
- name: 'Checkout'
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.ref }}
|
||||
token: ${{ steps.generate-token.outputs.token }}
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
|
||||
with:
|
||||
node-version-file: './server/.nvmrc'
|
||||
|
||||
@@ -33,13 +33,13 @@ jobs:
|
||||
run: make install-all && make format-all
|
||||
|
||||
- name: Commit and push
|
||||
uses: EndBug/add-and-commit@v9
|
||||
uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9
|
||||
with:
|
||||
default_author: github_actions
|
||||
message: 'chore: fix formatting'
|
||||
|
||||
- name: Remove label
|
||||
uses: actions/github-script@v7
|
||||
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
|
||||
if: always()
|
||||
with:
|
||||
script: |
|
||||
@@ -49,4 +49,3 @@ jobs:
|
||||
repo: context.repo.repo,
|
||||
name: 'fix:formatting'
|
||||
})
|
||||
|
||||
|
||||
6
.github/workflows/pr-label-validation.yml
vendored
6
.github/workflows/pr-label-validation.yml
vendored
@@ -12,11 +12,11 @@ jobs:
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Require PR to have a changelog label
|
||||
uses: mheap/github-action-required-labels@v5
|
||||
uses: mheap/github-action-required-labels@388fd6af37b34cdfe5a23b37060e763217e58b03 # v5
|
||||
with:
|
||||
mode: exactly
|
||||
count: 1
|
||||
use_regex: true
|
||||
labels: "changelog:.*"
|
||||
labels: 'changelog:.*'
|
||||
add_comment: true
|
||||
message: "Label error. Requires {{errorString}} {{count}} of: {{ provided }}. Found: {{ applied }}. A maintainer will add the required label."
|
||||
message: 'Label error. Requires {{errorString}} {{count}} of: {{ provided }}. Found: {{ applied }}. A maintainer will add the required label.'
|
||||
|
||||
6
.github/workflows/pr-labeler.yml
vendored
6
.github/workflows/pr-labeler.yml
vendored
@@ -1,6 +1,6 @@
|
||||
name: "Pull Request Labeler"
|
||||
name: 'Pull Request Labeler'
|
||||
on:
|
||||
- pull_request_target
|
||||
- pull_request_target
|
||||
|
||||
jobs:
|
||||
labeler:
|
||||
@@ -9,4 +9,4 @@ jobs:
|
||||
pull-requests: write
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/labeler@v5
|
||||
- uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5
|
||||
|
||||
@@ -9,7 +9,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: PR Conventional Commit Validation
|
||||
uses: ytanikin/PRConventionalCommits@1.3.0
|
||||
uses: ytanikin/PRConventionalCommits@b628c5a234cc32513014b7bfdd1e47b532124d98 # 1.3.0
|
||||
with:
|
||||
task_types: '["feat","fix","docs","test","ci","refactor","perf","chore","revert"]'
|
||||
add_label: 'false'
|
||||
|
||||
16
.github/workflows/prepare-release.yml
vendored
16
.github/workflows/prepare-release.yml
vendored
@@ -31,25 +31,25 @@ jobs:
|
||||
steps:
|
||||
- name: Generate a token
|
||||
id: generate-token
|
||||
uses: actions/create-github-app-token@v1
|
||||
uses: actions/create-github-app-token@d72941d797fd3113feb6b93fd0dec494b13a2547 # v1
|
||||
with:
|
||||
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
with:
|
||||
token: ${{ steps.generate-token.outputs.token }}
|
||||
|
||||
- name: Install uv
|
||||
uses: astral-sh/setup-uv@v5
|
||||
uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 # v5
|
||||
|
||||
- name: Bump version
|
||||
run: misc/release/pump-version.sh -s "${{ inputs.serverBump }}" -m "${{ inputs.mobileBump }}"
|
||||
|
||||
- name: Commit and tag
|
||||
id: push-tag
|
||||
uses: EndBug/add-and-commit@v9
|
||||
uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9
|
||||
with:
|
||||
default_author: github_actions
|
||||
message: 'chore: version ${{ env.IMMICH_VERSION }}'
|
||||
@@ -70,23 +70,23 @@ jobs:
|
||||
steps:
|
||||
- name: Generate a token
|
||||
id: generate-token
|
||||
uses: actions/create-github-app-token@v1
|
||||
uses: actions/create-github-app-token@d72941d797fd3113feb6b93fd0dec494b13a2547 # v1
|
||||
with:
|
||||
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
with:
|
||||
token: ${{ steps.generate-token.outputs.token }}
|
||||
|
||||
- name: Download APK
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4
|
||||
with:
|
||||
name: release-apk-signed
|
||||
|
||||
- name: Create draft release
|
||||
uses: softprops/action-gh-release@v2
|
||||
uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda # v2
|
||||
with:
|
||||
draft: true
|
||||
tag_name: ${{ env.IMMICH_VERSION }}
|
||||
|
||||
8
.github/workflows/preview-label.yaml
vendored
8
.github/workflows/preview-label.yaml
vendored
@@ -11,10 +11,10 @@ jobs:
|
||||
permissions:
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: mshick/add-pr-comment@v2
|
||||
- uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2
|
||||
with:
|
||||
message-id: "preview-status"
|
||||
message: "Deploying preview environment to https://pr-${{ github.event.pull_request.number }}.preview.internal.immich.cloud/"
|
||||
message-id: 'preview-status'
|
||||
message: 'Deploying preview environment to https://pr-${{ github.event.pull_request.number }}.preview.internal.immich.cloud/'
|
||||
|
||||
remove-label:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -22,7 +22,7 @@ jobs:
|
||||
permissions:
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/github-script@v7
|
||||
- uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
|
||||
with:
|
||||
script: |
|
||||
github.rest.issues.removeLabel({
|
||||
|
||||
4
.github/workflows/sdk.yml
vendored
4
.github/workflows/sdk.yml
vendored
@@ -15,9 +15,9 @@ jobs:
|
||||
run:
|
||||
working-directory: ./open-api/typescript-sdk
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
# Setup .npmrc file to publish to npm
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
|
||||
with:
|
||||
node-version-file: './open-api/typescript-sdk/.nvmrc'
|
||||
registry-url: 'https://registry.npmjs.org'
|
||||
|
||||
10
.github/workflows/static_analysis.yml
vendored
10
.github/workflows/static_analysis.yml
vendored
@@ -16,9 +16,9 @@ jobs:
|
||||
should_run: ${{ steps.found_paths.outputs.mobile == 'true' || steps.should_force.outputs.should_force == 'true' }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
- id: found_paths
|
||||
uses: dorny/paths-filter@v3
|
||||
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3
|
||||
with:
|
||||
filters: |
|
||||
mobile:
|
||||
@@ -38,10 +38,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Setup Flutter SDK
|
||||
uses: subosito/flutter-action@v2
|
||||
uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2
|
||||
with:
|
||||
channel: 'stable'
|
||||
flutter-version-file: ./mobile/pubspec.yaml
|
||||
@@ -55,7 +55,7 @@ jobs:
|
||||
working-directory: ./mobile
|
||||
|
||||
- name: Find file changes
|
||||
uses: tj-actions/verify-changed-files@v20
|
||||
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20
|
||||
id: verify-changed-files
|
||||
with:
|
||||
files: |
|
||||
|
||||
102
.github/workflows/test.yml
vendored
102
.github/workflows/test.yml
vendored
@@ -21,11 +21,12 @@ jobs:
|
||||
should_run_ml: ${{ steps.found_paths.outputs.machine-learning == 'true' || steps.should_force.outputs.should_force == 'true' }}
|
||||
should_run_e2e_web: ${{ steps.found_paths.outputs.e2e == 'true' || steps.found_paths.outputs.web == 'true' || steps.should_force.outputs.should_force == 'true' }}
|
||||
should_run_e2e_server_cli: ${{ steps.found_paths.outputs.e2e == 'true' || steps.found_paths.outputs.server == 'true' || steps.found_paths.outputs.cli == 'true' || steps.should_force.outputs.should_force == 'true' }}
|
||||
should_run_.github: ${{ steps.found_paths.outputs['.github'] == 'true' || steps.should_force.outputs.should_force == 'true' }} # redundant to have should_force but if someone changes the trigger then this won't have to be changed
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
- id: found_paths
|
||||
uses: dorny/paths-filter@v3
|
||||
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3
|
||||
with:
|
||||
filters: |
|
||||
web:
|
||||
@@ -45,6 +46,8 @@ jobs:
|
||||
- 'machine-learning/**'
|
||||
workflow:
|
||||
- '.github/workflows/test.yml'
|
||||
.github:
|
||||
- '.github/**'
|
||||
|
||||
- name: Check if we should force jobs to run
|
||||
id: should_force
|
||||
@@ -61,10 +64,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
|
||||
with:
|
||||
node-version-file: './server/.nvmrc'
|
||||
|
||||
@@ -98,10 +101,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
|
||||
with:
|
||||
node-version-file: './cli/.nvmrc'
|
||||
|
||||
@@ -139,10 +142,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
|
||||
with:
|
||||
node-version-file: './cli/.nvmrc'
|
||||
|
||||
@@ -173,10 +176,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
|
||||
with:
|
||||
node-version-file: './web/.nvmrc'
|
||||
|
||||
@@ -218,10 +221,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
|
||||
with:
|
||||
node-version-file: './e2e/.nvmrc'
|
||||
|
||||
@@ -257,10 +260,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
|
||||
with:
|
||||
node-version-file: './server/.nvmrc'
|
||||
|
||||
@@ -282,12 +285,12 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
with:
|
||||
submodules: 'recursive'
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
|
||||
with:
|
||||
node-version-file: './e2e/.nvmrc'
|
||||
|
||||
@@ -324,12 +327,12 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
with:
|
||||
submodules: 'recursive'
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
|
||||
with:
|
||||
node-version-file: './e2e/.nvmrc'
|
||||
|
||||
@@ -360,9 +363,9 @@ jobs:
|
||||
if: ${{ needs.pre-job.outputs.should_run_mobile == 'true' }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
- name: Setup Flutter SDK
|
||||
uses: subosito/flutter-action@v2
|
||||
uses: subosito/flutter-action@e938fdf56512cc96ef2f93601a5a40bde3801046 # v2
|
||||
with:
|
||||
channel: 'stable'
|
||||
flutter-version-file: ./mobile/pubspec.yaml
|
||||
@@ -379,10 +382,10 @@ jobs:
|
||||
run:
|
||||
working-directory: ./machine-learning
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
- name: Install uv
|
||||
uses: astral-sh/setup-uv@v5
|
||||
- uses: actions/setup-python@v5
|
||||
uses: astral-sh/setup-uv@0c5e2b8115b80b4c7c5ddf6ffdd634974642d182 # v5
|
||||
- uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5
|
||||
# TODO: add caching when supported (https://github.com/actions/setup-python/pull/818)
|
||||
# with:
|
||||
# python-version: 3.11
|
||||
@@ -392,22 +395,47 @@ jobs:
|
||||
uv sync --extra cpu
|
||||
- name: Lint with ruff
|
||||
run: |
|
||||
uv run ruff check --output-format=github app export
|
||||
uv run ruff check --output-format=github immich_ml
|
||||
- name: Check black formatting
|
||||
run: |
|
||||
uv run black --check app export
|
||||
uv run black --check immich_ml
|
||||
- name: Run mypy type checking
|
||||
run: |
|
||||
uv run mypy --strict app/
|
||||
uv run mypy --strict immich_ml/
|
||||
- name: Run tests and coverage
|
||||
run: |
|
||||
uv run pytest app --cov=app --cov-report term-missing
|
||||
uv run pytest --cov=immich_ml --cov-report term-missing
|
||||
|
||||
github-files-formatting:
|
||||
name: .github Files Formatting
|
||||
needs: pre-job
|
||||
if: ${{ needs.pre-job.outputs['should_run_.github'] == 'true' }}
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ./.github
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
|
||||
with:
|
||||
node-version-file: './.github/.nvmrc'
|
||||
|
||||
- name: Run npm install
|
||||
run: npm ci
|
||||
|
||||
- name: Run formatter
|
||||
run: npm run format
|
||||
if: ${{ !cancelled() }}
|
||||
|
||||
shellcheck:
|
||||
name: ShellCheck
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
- name: Run ShellCheck
|
||||
uses: ludeeus/action-shellcheck@master
|
||||
with:
|
||||
@@ -421,10 +449,10 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
|
||||
with:
|
||||
node-version-file: './server/.nvmrc'
|
||||
|
||||
@@ -438,7 +466,7 @@ jobs:
|
||||
run: make open-api
|
||||
|
||||
- name: Find file changes
|
||||
uses: tj-actions/verify-changed-files@v20
|
||||
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20
|
||||
id: verify-changed-files
|
||||
with:
|
||||
files: |
|
||||
@@ -476,10 +504,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4
|
||||
with:
|
||||
node-version-file: './server/.nvmrc'
|
||||
|
||||
@@ -497,10 +525,10 @@ jobs:
|
||||
|
||||
- name: Generate new migrations
|
||||
continue-on-error: true
|
||||
run: npm run typeorm:migrations:generate ./src/migrations/TestMigration
|
||||
run: npm run migrations:generate TestMigration
|
||||
|
||||
- name: Find file changes
|
||||
uses: tj-actions/verify-changed-files@v20
|
||||
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20
|
||||
id: verify-changed-files
|
||||
with:
|
||||
files: |
|
||||
@@ -510,7 +538,7 @@ jobs:
|
||||
run: |
|
||||
echo "ERROR: Generated migration files not up to date!"
|
||||
echo "Changed files: ${{ steps.verify-changed-files.outputs.changed_files }}"
|
||||
cat ./src/migrations/*-TestMigration.ts
|
||||
cat ./src/*-TestMigration.ts
|
||||
exit 1
|
||||
|
||||
- name: Run SQL generation
|
||||
@@ -519,7 +547,7 @@ jobs:
|
||||
DB_URL: postgres://postgres:postgres@localhost:5432/immich
|
||||
|
||||
- name: Find file changes
|
||||
uses: tj-actions/verify-changed-files@v20
|
||||
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20
|
||||
id: verify-changed-sql-files
|
||||
with:
|
||||
files: |
|
||||
|
||||
16
.github/workflows/weblate-lock.yml
vendored
16
.github/workflows/weblate-lock.yml
vendored
@@ -11,22 +11,22 @@ jobs:
|
||||
should_run: ${{ steps.found_paths.outputs.i18n == 'true' && github.head_ref != 'chore/translations'}}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
- id: found_paths
|
||||
uses: dorny/paths-filter@v3
|
||||
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3
|
||||
with:
|
||||
filters: |
|
||||
i18n:
|
||||
- 'i18n/!(en)**\.json'
|
||||
- name: Debug
|
||||
run: |
|
||||
echo "Should run: ${{ steps.found_paths.outputs.i18n == 'true' && github.head_ref != 'chore/translations'}}"
|
||||
echo "Found i18n paths: ${{ steps.found_paths.outputs.i18n }}"
|
||||
echo "Head ref: ${{ github.head_ref }}"
|
||||
echo "Should run: ${{ steps.found_paths.outputs.i18n == 'true' && github.head_ref != 'chore/translations'}}"
|
||||
echo "Found i18n paths: ${{ steps.found_paths.outputs.i18n }}"
|
||||
echo "Head ref: ${{ github.head_ref }}"
|
||||
|
||||
enforce-lock:
|
||||
name: Check Weblate Lock
|
||||
needs: [ pre-job ]
|
||||
needs: [pre-job]
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ needs.pre-job.outputs.should_run == 'true' }}
|
||||
steps:
|
||||
@@ -36,7 +36,7 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
- name: Find Pull Request
|
||||
uses: juliangruber/find-pull-request-action@v1
|
||||
uses: juliangruber/find-pull-request-action@48b6133aa6c826f267ebd33aa2d29470f9d9e7d0 # v1
|
||||
id: find-pr
|
||||
with:
|
||||
branch: chore/translations
|
||||
@@ -45,7 +45,7 @@ jobs:
|
||||
run: exit 1
|
||||
success-check-lock:
|
||||
name: Weblate Lock Check Success
|
||||
needs: [ enforce-lock ]
|
||||
needs: [enforce-lock]
|
||||
runs-on: ubuntu-latest
|
||||
if: always()
|
||||
steps:
|
||||
|
||||
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@@ -39,6 +39,7 @@
|
||||
],
|
||||
"explorer.fileNesting.enabled": true,
|
||||
"explorer.fileNesting.patterns": {
|
||||
"*.ts": "${capture}.spec.ts,${capture}.mock.ts"
|
||||
"*.ts": "${capture}.spec.ts,${capture}.mock.ts",
|
||||
"*.dart": "${capture}.g.dart,${capture}.gr.dart,${capture}.drift.dart"
|
||||
}
|
||||
}
|
||||
10
Makefile
10
Makefile
@@ -39,7 +39,7 @@ attach-server:
|
||||
renovate:
|
||||
LOG_LEVEL=debug npx renovate --platform=local --repository-cache=reset
|
||||
|
||||
MODULES = e2e server web cli sdk docs
|
||||
MODULES = e2e server web cli sdk docs .github
|
||||
|
||||
audit-%:
|
||||
npm --prefix $(subst sdk,open-api/typescript-sdk,$*) audit fix
|
||||
@@ -77,14 +77,14 @@ test-medium:
|
||||
test-medium-dev:
|
||||
docker exec -it immich_server /bin/sh -c "npm run test:medium"
|
||||
|
||||
build-all: $(foreach M,$(filter-out e2e,$(MODULES)),build-$M) ;
|
||||
build-all: $(foreach M,$(filter-out e2e .github,$(MODULES)),build-$M) ;
|
||||
install-all: $(foreach M,$(MODULES),install-$M) ;
|
||||
check-all: $(foreach M,$(filter-out sdk cli docs,$(MODULES)),check-$M) ;
|
||||
lint-all: $(foreach M,$(filter-out sdk docs,$(MODULES)),lint-$M) ;
|
||||
check-all: $(foreach M,$(filter-out sdk cli docs .github,$(MODULES)),check-$M) ;
|
||||
lint-all: $(foreach M,$(filter-out sdk docs .github,$(MODULES)),lint-$M) ;
|
||||
format-all: $(foreach M,$(filter-out sdk,$(MODULES)),format-$M) ;
|
||||
audit-all: $(foreach M,$(MODULES),audit-$M) ;
|
||||
hygiene-all: lint-all format-all check-all sql audit-all;
|
||||
test-all: $(foreach M,$(filter-out sdk docs,$(MODULES)),test-$M) ;
|
||||
test-all: $(foreach M,$(filter-out sdk docs .github,$(MODULES)),test-$M) ;
|
||||
|
||||
clean:
|
||||
find . -name "node_modules" -type d -prune -exec rm -rf '{}' +
|
||||
|
||||
@@ -104,7 +104,7 @@ For the mobile app, you can use `https://demo.immich.app` for the `Server Endpoi
|
||||
| Read-only gallery | Yes | Yes |
|
||||
| Stacked Photos | Yes | Yes |
|
||||
| Tags | No | Yes |
|
||||
| Folder View | No | Yes |
|
||||
| Folder View | Yes | Yes |
|
||||
|
||||
## Translations
|
||||
|
||||
|
||||
@@ -1,39 +1,29 @@
|
||||
import { FlatCompat } from '@eslint/eslintrc';
|
||||
import js from '@eslint/js';
|
||||
import typescriptEslint from '@typescript-eslint/eslint-plugin';
|
||||
import tsParser from '@typescript-eslint/parser';
|
||||
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended';
|
||||
import eslintPluginUnicorn from 'eslint-plugin-unicorn';
|
||||
import globals from 'globals';
|
||||
import path from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import typescriptEslint from 'typescript-eslint';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
const compat = new FlatCompat({
|
||||
baseDirectory: __dirname,
|
||||
recommendedConfig: js.configs.recommended,
|
||||
allConfig: js.configs.all,
|
||||
});
|
||||
|
||||
export default [
|
||||
export default typescriptEslint.config([
|
||||
eslintPluginUnicorn.configs.recommended,
|
||||
eslintPluginPrettierRecommended,
|
||||
js.configs.recommended,
|
||||
typescriptEslint.configs.recommended,
|
||||
{
|
||||
ignores: ['eslint.config.mjs', 'dist'],
|
||||
},
|
||||
...compat.extends(
|
||||
'plugin:@typescript-eslint/recommended',
|
||||
'plugin:prettier/recommended',
|
||||
'plugin:unicorn/recommended',
|
||||
),
|
||||
{
|
||||
plugins: {
|
||||
'@typescript-eslint': typescriptEslint,
|
||||
},
|
||||
|
||||
languageOptions: {
|
||||
globals: {
|
||||
...globals.node,
|
||||
},
|
||||
|
||||
parser: tsParser,
|
||||
parser: typescriptEslint.parser,
|
||||
ecmaVersion: 5,
|
||||
sourceType: 'module',
|
||||
|
||||
@@ -58,4 +48,4 @@ export default [
|
||||
'object-shorthand': ['error', 'always'],
|
||||
},
|
||||
},
|
||||
];
|
||||
]);
|
||||
|
||||
1011
cli/package-lock.json
generated
1011
cli/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@immich/cli",
|
||||
"version": "2.2.53",
|
||||
"version": "2.2.61",
|
||||
"description": "Command Line Interface (CLI) for Immich",
|
||||
"type": "module",
|
||||
"exports": "./dist/index.js",
|
||||
@@ -21,9 +21,7 @@
|
||||
"@types/lodash-es": "^4.17.12",
|
||||
"@types/micromatch": "^4.0.9",
|
||||
"@types/mock-fs": "^4.13.1",
|
||||
"@types/node": "^22.13.9",
|
||||
"@typescript-eslint/eslint-plugin": "^8.15.0",
|
||||
"@typescript-eslint/parser": "^8.15.0",
|
||||
"@types/node": "^22.13.14",
|
||||
"@vitest/coverage-v8": "^3.0.0",
|
||||
"byte-size": "^9.0.0",
|
||||
"cli-progress": "^3.12.0",
|
||||
@@ -31,12 +29,13 @@
|
||||
"eslint": "^9.14.0",
|
||||
"eslint-config-prettier": "^10.0.0",
|
||||
"eslint-plugin-prettier": "^5.1.3",
|
||||
"eslint-plugin-unicorn": "^56.0.1",
|
||||
"eslint-plugin-unicorn": "^57.0.0",
|
||||
"globals": "^16.0.0",
|
||||
"mock-fs": "^5.2.0",
|
||||
"prettier": "^3.2.5",
|
||||
"prettier-plugin-organize-imports": "^4.0.0",
|
||||
"typescript": "^5.3.3",
|
||||
"typescript-eslint": "^8.28.0",
|
||||
"vite": "^6.0.0",
|
||||
"vite-tsconfig-paths": "^5.0.0",
|
||||
"vitest": "^3.0.0",
|
||||
|
||||
@@ -95,12 +95,12 @@ services:
|
||||
image: immich-machine-learning-dev:latest
|
||||
# extends:
|
||||
# file: hwaccel.ml.yml
|
||||
# service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference
|
||||
# service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference
|
||||
build:
|
||||
context: ../machine-learning
|
||||
dockerfile: Dockerfile
|
||||
args:
|
||||
- DEVICE=cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference
|
||||
- DEVICE=cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference
|
||||
ports:
|
||||
- 3003:3003
|
||||
volumes:
|
||||
|
||||
@@ -38,12 +38,12 @@ services:
|
||||
image: immich-machine-learning:latest
|
||||
# extends:
|
||||
# file: hwaccel.ml.yml
|
||||
# service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference
|
||||
# service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference
|
||||
build:
|
||||
context: ../machine-learning
|
||||
dockerfile: Dockerfile
|
||||
args:
|
||||
- DEVICE=cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference
|
||||
- DEVICE=cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference
|
||||
ports:
|
||||
- 3003:3003
|
||||
volumes:
|
||||
@@ -77,22 +77,12 @@ services:
|
||||
- 5432:5432
|
||||
healthcheck:
|
||||
test: >-
|
||||
pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1;
|
||||
Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align
|
||||
--command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')";
|
||||
echo "checksum failure count is $$Chksum";
|
||||
[ "$$Chksum" = '0' ] || exit 1
|
||||
pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1; Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
|
||||
interval: 5m
|
||||
start_interval: 30s
|
||||
start_period: 5m
|
||||
command: >-
|
||||
postgres
|
||||
-c shared_preload_libraries=vectors.so
|
||||
-c 'search_path="$$user", public, vectors'
|
||||
-c logging_collector=on
|
||||
-c max_wal_size=2GB
|
||||
-c shared_buffers=512MB
|
||||
-c wal_compression=on
|
||||
postgres -c shared_preload_libraries=vectors.so -c 'search_path="$$user", public, vectors' -c logging_collector=on -c max_wal_size=2GB -c shared_buffers=512MB -c wal_compression=on
|
||||
restart: always
|
||||
|
||||
# set IMMICH_TELEMETRY_INCLUDE=all in .env to enable metrics
|
||||
@@ -100,7 +90,7 @@ services:
|
||||
container_name: immich_prometheus
|
||||
ports:
|
||||
- 9090:9090
|
||||
image: prom/prometheus@sha256:6927e0919a144aa7616fd0137d4816816d42f6b816de3af269ab065250859a62
|
||||
image: prom/prometheus@sha256:502ad90314c7485892ce696cb14a99fceab9fc27af29f4b427f41bd39701a199
|
||||
volumes:
|
||||
- ./prometheus.yml:/etc/prometheus/prometheus.yml
|
||||
- prometheus-data:/prometheus
|
||||
@@ -109,7 +99,7 @@ services:
|
||||
# add data source for http://immich-prometheus:9090 to get started
|
||||
immich-grafana:
|
||||
container_name: immich_grafana
|
||||
command: ['./run.sh', '-disable-reporting']
|
||||
command: [ './run.sh', '-disable-reporting' ]
|
||||
ports:
|
||||
- 3000:3000
|
||||
image: grafana/grafana:11.5.2-ubuntu@sha256:8b5858c447e06fd7a89006b562ba7bba7c4d5813600c7982374c41852adefaeb
|
||||
|
||||
@@ -33,12 +33,12 @@ services:
|
||||
|
||||
immich-machine-learning:
|
||||
container_name: immich_machine_learning
|
||||
# For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.
|
||||
# For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
|
||||
# Example tag: ${IMMICH_VERSION:-release}-cuda
|
||||
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
|
||||
# extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
|
||||
# file: hwaccel.ml.yml
|
||||
# service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
|
||||
# service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
|
||||
volumes:
|
||||
- model-cache:/cache
|
||||
env_file:
|
||||
@@ -67,22 +67,12 @@ services:
|
||||
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: >-
|
||||
pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1;
|
||||
Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align
|
||||
--command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')";
|
||||
echo "checksum failure count is $$Chksum";
|
||||
[ "$$Chksum" = '0' ] || exit 1
|
||||
pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1; Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
|
||||
interval: 5m
|
||||
start_interval: 30s
|
||||
start_period: 5m
|
||||
command: >-
|
||||
postgres
|
||||
-c shared_preload_libraries=vectors.so
|
||||
-c 'search_path="$$user", public, vectors'
|
||||
-c logging_collector=on
|
||||
-c max_wal_size=2GB
|
||||
-c shared_buffers=512MB
|
||||
-c wal_compression=on
|
||||
postgres -c shared_preload_libraries=vectors.so -c 'search_path="$$user", public, vectors' -c logging_collector=on -c max_wal_size=2GB -c shared_buffers=512MB -c wal_compression=on
|
||||
restart: always
|
||||
|
||||
volumes:
|
||||
|
||||
@@ -13,6 +13,13 @@ services:
|
||||
volumes:
|
||||
- /lib/firmware/mali_csffw.bin:/lib/firmware/mali_csffw.bin:ro # Mali firmware for your chipset (not always required depending on the driver)
|
||||
- /usr/lib/libmali.so:/usr/lib/libmali.so:ro # Mali driver for your chipset (always required)
|
||||
|
||||
rknn:
|
||||
security_opt:
|
||||
- systempaths=unconfined
|
||||
- apparmor=unconfined
|
||||
devices:
|
||||
- /dev/dri:/dev/dri
|
||||
|
||||
cpu: {}
|
||||
|
||||
@@ -26,6 +33,13 @@ services:
|
||||
capabilities:
|
||||
- gpu
|
||||
|
||||
rocm:
|
||||
group_add:
|
||||
- video
|
||||
devices:
|
||||
- /dev/dri:/dev/dri
|
||||
- /dev/kfd:/dev/kfd
|
||||
|
||||
openvino:
|
||||
device_cgroup_rules:
|
||||
- 'c 189:* rmw'
|
||||
|
||||
@@ -262,7 +262,7 @@ No, this is not supported. Only models listed in the [Hugging Face][huggingface]
|
||||
|
||||
### I want to be able to search in other languages besides English. How can I do that?
|
||||
|
||||
You can change to a multilingual CLIP model. See [here](/docs/features/searching#clip-model) for instructions.
|
||||
You can change to a multilingual CLIP model. See [here](/docs/features/searching#clip-models) for instructions.
|
||||
|
||||
### Does Immich support Facial Recognition for videos?
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ The `immich-server` docker image comes preinstalled with an administrative CLI (
|
||||
| `enable-oauth-login` | Enable OAuth login |
|
||||
| `disable-oauth-login` | Disable OAuth login |
|
||||
| `list-users` | List Immich users |
|
||||
| `version` | Print Immich version |
|
||||
|
||||
## How to run a command
|
||||
|
||||
@@ -80,3 +81,10 @@ immich-admin list-users
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
Print Immich Version
|
||||
|
||||
```
|
||||
immich-admin version
|
||||
v1.129.0
|
||||
```
|
||||
|
||||
|
Before Width: | Height: | Size: 4.9 MiB After Width: | Height: | Size: 4.9 MiB |
@@ -95,7 +95,7 @@ The `immich-server` container will need access to the gallery. Modify your docke
|
||||
+ - /mnt/nas/christmas-trip:/mnt/media/christmas-trip:ro
|
||||
+ - /home/user/old-pics:/mnt/media/old-pics:ro
|
||||
+ - /mnt/media/videos:/mnt/media/videos:ro
|
||||
+ - /mnt/media/videos2:/mnt/media/videos2 # the files in this folder can be deleted, as it does not end with :ro
|
||||
+ - /mnt/media/videos2:/mnt/media/videos2 # WARNING: Immich will be able to delete the files in this folder, as it does not end with :ro
|
||||
+ - "C:/Users/user_name/Desktop/my media:/mnt/media/my-media:ro" # import path in Windows system.
|
||||
```
|
||||
|
||||
|
||||
@@ -11,7 +11,9 @@ You do not need to redo any machine learning jobs after enabling hardware accele
|
||||
|
||||
- ARM NN (Mali)
|
||||
- CUDA (NVIDIA GPUs with [compute capability](https://developer.nvidia.com/cuda-gpus) 5.2 or higher)
|
||||
- ROCm (AMD GPUs)
|
||||
- OpenVINO (Intel GPUs such as Iris Xe and Arc)
|
||||
- RKNN (Rockchip)
|
||||
|
||||
## Limitations
|
||||
|
||||
@@ -19,6 +21,7 @@ You do not need to redo any machine learning jobs after enabling hardware accele
|
||||
- Only Linux and Windows (through WSL2) servers are supported.
|
||||
- ARM NN is only supported on devices with Mali GPUs. Other Arm devices are not supported.
|
||||
- Some models may not be compatible with certain backends. CUDA is the most reliable.
|
||||
- Search latency isn't improved by ARM NN due to model compatibility issues preventing its use. However, smart search jobs do make use of ARM NN.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
@@ -33,6 +36,7 @@ You do not need to redo any machine learning jobs after enabling hardware accele
|
||||
- The `hwaccel.ml.yml` file assumes the path to it is `/usr/lib/libmali.so`, so update accordingly if it is elsewhere
|
||||
- The `hwaccel.ml.yml` file assumes an additional file `/lib/firmware/mali_csffw.bin`, so update accordingly if your device's driver does not require this file
|
||||
- Optional: Configure your `.env` file, see [environment variables](/docs/install/environment-variables) for ARM NN specific settings
|
||||
- In particular, the `MACHINE_LEARNING_ANN_FP16_TURBO` can significantly improve performance at the cost of very slightly lower accuracy
|
||||
|
||||
#### CUDA
|
||||
|
||||
@@ -41,22 +45,38 @@ You do not need to redo any machine learning jobs after enabling hardware accele
|
||||
- The installed driver must be >= 535 (it must support CUDA 12.2).
|
||||
- On Linux (except for WSL2), you also need to have [NVIDIA Container Toolkit][nvct] installed.
|
||||
|
||||
#### ROCm
|
||||
|
||||
- The GPU must be supported by ROCm. If it isn't officially supported, you can attempt to use the `HSA_OVERRIDE_GFX_VERSION` environmental variable: `HSA_OVERRIDE_GFX_VERSION=<a supported version, e.g. 10.3.0>`. If this doesn't work, you might need to also set `HSA_USE_SVM=0`.
|
||||
- The ROCm image is quite large and requires at least 35GiB of free disk space. However, pulling later updates to the service through Docker will generally only amount to a few hundred megabytes as the rest will be cached.
|
||||
- This backend is new and may experience some issues. For example, GPU power consumption can be higher than usual after running inference, even if the machine learning service is idle. In this case, it will only go back to normal after being idle for 5 minutes (configurable with the [MACHINE_LEARNING_MODEL_TTL](/docs/install/environment-variables) setting).
|
||||
|
||||
#### OpenVINO
|
||||
|
||||
- Integrated GPUs are more likely to experience issues than discrete GPUs, especially for older processors or servers with low RAM.
|
||||
- Ensure the server's kernel version is new enough to use the device for hardware accceleration.
|
||||
- Expect higher RAM usage when using OpenVINO compared to CPU processing.
|
||||
|
||||
#### RKNN
|
||||
|
||||
- You must have a supported Rockchip SoC: only RK3566, RK3568, RK3576 and RK3588 are supported at this moment.
|
||||
- Make sure you have the appropriate linux kernel driver installed
|
||||
- This is usually pre-installed on the device vendor's Linux images
|
||||
- RKNPU driver V0.9.8 or later must be available in the host server
|
||||
- You may confirm this by running `cat /sys/kernel/debug/rknpu/version` to check the version
|
||||
- Optional: Configure your `.env` file, see [environment variables](/docs/install/environment-variables) for RKNN specific settings
|
||||
- In particular, setting `MACHINE_LEARNING_RKNN_THREADS` to 2 or 3 can _dramatically_ improve performance for RK3576 and RK3588 compared to the default of 1, at the expense of multiplying the amount of RAM each model uses by that amount.
|
||||
|
||||
## Setup
|
||||
|
||||
1. If you do not already have it, download the latest [`hwaccel.ml.yml`][hw-file] file and ensure it's in the same folder as the `docker-compose.yml`.
|
||||
2. In the `docker-compose.yml` under `immich-machine-learning`, uncomment the `extends` section and change `cpu` to the appropriate backend.
|
||||
3. Still in `immich-machine-learning`, add one of -[armnn, cuda, openvino] to the `image` section's tag at the end of the line.
|
||||
3. Still in `immich-machine-learning`, add one of -[armnn, cuda, rocm, openvino, rknn] to the `image` section's tag at the end of the line.
|
||||
4. Redeploy the `immich-machine-learning` container with these updated settings.
|
||||
|
||||
### Confirming Device Usage
|
||||
|
||||
You can confirm the device is being recognized and used by checking its utilization. There are many tools to display this, such as `nvtop` for NVIDIA or Intel and `intel_gpu_top` for Intel.
|
||||
You can confirm the device is being recognized and used by checking its utilization. There are many tools to display this, such as `nvtop` for NVIDIA or Intel, `intel_gpu_top` for Intel, and `radeontop` for AMD.
|
||||
|
||||
You can also check the logs of the `immich-machine-learning` container. When a Smart Search or Face Detection job begins, or when you search with text in Immich, you should either see a log for `Available ORT providers` containing the relevant provider (e.g. `CUDAExecutionProvider` in the case of CUDA), or a `Loaded ANN model` log entry without errors in the case of ARM NN.
|
||||
|
||||
@@ -127,3 +147,12 @@ Note that you should increase job concurrencies to increase overall utilization
|
||||
- If you encounter an error when a model is running, try a different model to see if the issue is model-specific.
|
||||
- You may want to increase concurrency past the default for higher utilization. However, keep in mind that this will also increase VRAM consumption.
|
||||
- Larger models benefit more from hardware acceleration, if you have the VRAM for them.
|
||||
- Compared to ARM NN, RKNPU has:
|
||||
- Wider model support (including for search, which ARM NN does not accelerate)
|
||||
- Less heat generation
|
||||
- Very slightly lower accuracy (RKNPU always uses FP16, while ARM NN by default uses higher precision FP32 unless `MACHINE_LEARNING_ANN_FP16_TURBO` is enabled)
|
||||
- Varying speed (tested on RK3588):
|
||||
- If `MACHINE_LEARNING_RKNN_THREADS` is at the default of 1, RKNPU will have substantially lower throughput for ML jobs than ARM NN in most cases, but similar latency (such as when searching)
|
||||
- If `MACHINE_LEARNING_RKNN_THREADS` is set to 3, it will be somewhat faster than ARM NN at FP32, but somewhat slower than ARM NN if `MACHINE_LEARNING_ANN_FP16_TURBO` is enabled
|
||||
- When other tasks also use the GPU (like transcoding), RKNPU has a significant advantage over ARM NN as it uses the otherwise idle NPU instead of competing for GPU usage
|
||||
- Lower RAM usage if `MACHINE_LEARNING_RKNN_THREADS` is at the default of 1, but significantly higher if greater than 1 (which is necessary for it to fully utilize the NPU and hence be comparable in speed to ARM NN)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -23,12 +23,12 @@ name: immich_remote_ml
|
||||
services:
|
||||
immich-machine-learning:
|
||||
container_name: immich_machine_learning
|
||||
# For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.
|
||||
# For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
|
||||
# Example tag: ${IMMICH_VERSION:-release}-cuda
|
||||
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
|
||||
# extends:
|
||||
# file: hwaccel.ml.yml
|
||||
# service: # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
|
||||
# service: # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
|
||||
volumes:
|
||||
- model-cache:/cache
|
||||
restart: always
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
---
|
||||
sidebar_position: 100
|
||||
---
|
||||
|
||||
# Config File
|
||||
|
||||
A config file can be provided as an alternative to the UI configuration.
|
||||
|
||||
@@ -69,39 +69,4 @@ If you get an error `can't set healthcheck.start_interval as feature require Doc
|
||||
|
||||
## Next Steps
|
||||
|
||||
Read the [Post Installation](/docs/install/post-install.mdx) steps or setup optional features below.
|
||||
|
||||
### Setting up optional features
|
||||
|
||||
- [External Libraries](/docs/features/libraries.md): Adding your existing photo library to Immich
|
||||
- [Hardware Transcoding](/docs/features/hardware-transcoding.md): Speeding up video transcoding
|
||||
- [Hardware-Accelerated Machine Learning](/docs/features/ml-hardware-acceleration.md): Speeding up various machine learning tasks in Immich
|
||||
|
||||
### Upgrading
|
||||
|
||||
:::danger Read the release notes
|
||||
Immich is currently under heavy development, which means you can expect [breaking changes][breaking] and bugs. Therefore, we recommend reading the release notes prior to updating and to take special care when using automated tools like [Watchtower][watchtower].
|
||||
|
||||
You can see versions that had breaking changes [here][breaking].
|
||||
:::
|
||||
|
||||
If `IMMICH_VERSION` is set, it will need to be updated to the latest or desired version.
|
||||
|
||||
When a new version of Immich is [released][releases], the application can be upgraded and restarted with the following commands, run in the directory with the `docker-compose.yml` file:
|
||||
|
||||
```bash title="Upgrade and restart Immich"
|
||||
docker compose pull && docker compose up -d
|
||||
```
|
||||
|
||||
To clean up disk space, the old version's obsolete container images can be deleted with the following command:
|
||||
|
||||
```bash title="Clean up unused Docker images"
|
||||
docker image prune
|
||||
```
|
||||
|
||||
[compose-file]: https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
|
||||
[env-file]: https://github.com/immich-app/immich/releases/latest/download/example.env
|
||||
[watchtower]: https://containrrr.dev/watchtower/
|
||||
[breaking]: https://github.com/immich-app/immich/discussions?discussions_q=label%3Achangelog%3Abreaking-change+sort%3Adate_created
|
||||
[container-auth]: https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry#authenticating-to-the-container-registry
|
||||
[releases]: https://github.com/immich-app/immich/releases
|
||||
Read the [Post Installation](/docs/install/post-install.mdx) steps and [upgrade instructions](/docs/install/upgrading.md).
|
||||
|
||||
@@ -170,6 +170,8 @@ Redis (Sentinel) URL example JSON before encoding:
|
||||
| `MACHINE_LEARNING_MAX_BATCH_SIZE__FACIAL_RECOGNITION` | Set the maximum number of faces that will be processed at once by the facial recognition model | None (`1` if using OpenVINO) | machine learning |
|
||||
| `MACHINE_LEARNING_PING_TIMEOUT` | How long (ms) to wait for a PING response when checking if an ML server is available | `2000` | server |
|
||||
| `MACHINE_LEARNING_AVAILABILITY_BACKOFF_TIME` | How long to ignore ML servers that are offline before trying again | `30000` | server |
|
||||
| `MACHINE_LEARNING_RKNN` | Enable RKNN hardware acceleration if supported | `True` | machine learning |
|
||||
| `MACHINE_LEARNING_RKNN_THREADS` | How many threads of RKNN runtime should be spinned up while inferencing. | `1` | machine learning |
|
||||
|
||||
\*1: It is recommended to begin with this parameter when changing the concurrency levels of the machine learning service and then tune the other ones.
|
||||
|
||||
|
||||
@@ -41,3 +41,9 @@ A list of common steps to take after installing Immich include:
|
||||
## Step 7 - Setup Server Backups
|
||||
|
||||
<ServerBackup />
|
||||
|
||||
## Setting up optional features
|
||||
|
||||
- [External Libraries](/docs/features/libraries.md): Adding your existing photo library to Immich
|
||||
- [Hardware Transcoding](/docs/features/hardware-transcoding.md): Speeding up video transcoding
|
||||
- [Hardware-Accelerated Machine Learning](/docs/features/ml-hardware-acceleration.md): Speeding up various machine learning tasks in Immich
|
||||
|
||||
@@ -67,10 +67,4 @@ Click "**Edit Rules**" and add the following firewall rules:
|
||||
|
||||
## Next Steps
|
||||
|
||||
Read the [Post Installation](/docs/install/post-install.mdx) steps or setup optional features below.
|
||||
|
||||
### Setting up optional features
|
||||
|
||||
- [External Libraries](/docs/features/libraries.md): Adding your existing photo library to Immich
|
||||
- [Hardware Transcoding](/docs/features/hardware-transcoding.md): Speeding up video transcoding
|
||||
- [Hardware-Accelerated Machine Learning](/docs/features/ml-hardware-acceleration.md): Speeding up various machine learning tasks in Immich
|
||||
Read the [Post Installation](/docs/install/post-install.mdx) steps and [upgrade instructions](/docs/install/upgrading.md).
|
||||
|
||||
@@ -247,6 +247,10 @@ Some examples are: `IMMICH_VERSION`, `UPLOAD_LOCATION`, `DB_DATA_LOCATION`, `TZ`
|
||||
|
||||
## Updating the App
|
||||
|
||||
:::danger
|
||||
Make sure to read the general [upgrade instructions](/docs/install/upgrading.md).
|
||||
:::
|
||||
|
||||
When updates become available, SCALE alerts and provides easy updates.
|
||||
To update the app to the latest version:
|
||||
|
||||
|
||||
@@ -131,6 +131,10 @@ For more information on how to use the application once installed, please refer
|
||||
|
||||
## Updating Steps
|
||||
|
||||
:::danger
|
||||
Make sure to read the general [upgrade instructions](/docs/install/upgrading.md).
|
||||
:::
|
||||
|
||||
Updating is extremely easy however it's important to be aware that containers managed via the Docker Compose Manager plugin do not integrate with Unraid's native dockerman UI, the label "_update ready_" will always be present on containers installed via the Docker Compose Manager.
|
||||
|
||||
<img
|
||||
|
||||
32
docs/docs/install/upgrading.md
Normal file
32
docs/docs/install/upgrading.md
Normal file
@@ -0,0 +1,32 @@
|
||||
---
|
||||
sidebar_position: 95
|
||||
---
|
||||
|
||||
# Upgrading
|
||||
|
||||
:::danger Read the release notes
|
||||
Immich is currently under heavy development, which means you can expect [breaking changes][breaking] and bugs. You should read the release notes prior to updating and take special care when using automated tools like [Watchtower][watchtower].
|
||||
|
||||
You can see versions that had breaking changes [here][breaking].
|
||||
:::
|
||||
|
||||
When a new version of Immich is [released][releases], you should read the release notes and account for any breaking changes noted (as mentioned above).
|
||||
If you use `IMMICH_VERSION` in your `.env` file, it will need to be updated to the latest or desired version.
|
||||
After that, the application can be upgraded and restarted with the following commands, run in the directory with the `docker-compose.yml` file:
|
||||
|
||||
```bash title="Upgrade and restart Immich"
|
||||
docker compose pull && docker compose up -d
|
||||
```
|
||||
|
||||
To clean up disk space, the old version's obsolete container images can be deleted with the following command:
|
||||
|
||||
```bash title="Clean up unused Docker images"
|
||||
docker image prune
|
||||
```
|
||||
|
||||
[compose-file]: https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
|
||||
[env-file]: https://github.com/immich-app/immich/releases/latest/download/example.env
|
||||
[watchtower]: https://containrrr.dev/watchtower/
|
||||
[breaking]: https://github.com/immich-app/immich/discussions?discussions_q=label%3Achangelog%3Abreaking-change+sort%3Adate_created
|
||||
[container-auth]: https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry#authenticating-to-the-container-registry
|
||||
[releases]: https://github.com/immich-app/immich/releases
|
||||
@@ -1,2 +1,7 @@
|
||||
Now that you have imported some pictures, you should setup server backups to preserve your memories.
|
||||
You can do so by following our [backup guide](/docs/administration/backup-and-restore.md).
|
||||
|
||||
:::danger
|
||||
Immich is still under heavy development _and_ handles very important data.
|
||||
It is essential that you set up good backups, and test them.
|
||||
:::
|
||||
|
||||
18
docs/package-lock.json
generated
18
docs/package-lock.json
generated
@@ -5308,9 +5308,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/autoprefixer": {
|
||||
"version": "10.4.20",
|
||||
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz",
|
||||
"integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==",
|
||||
"version": "10.4.21",
|
||||
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz",
|
||||
"integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
@@ -5327,11 +5327,11 @@
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"browserslist": "^4.23.3",
|
||||
"caniuse-lite": "^1.0.30001646",
|
||||
"browserslist": "^4.24.4",
|
||||
"caniuse-lite": "^1.0.30001702",
|
||||
"fraction.js": "^4.3.7",
|
||||
"normalize-range": "^0.1.2",
|
||||
"picocolors": "^1.0.1",
|
||||
"picocolors": "^1.1.1",
|
||||
"postcss-value-parser": "^4.2.0"
|
||||
},
|
||||
"bin": {
|
||||
@@ -5781,9 +5781,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/caniuse-lite": {
|
||||
"version": "1.0.30001695",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz",
|
||||
"integrity": "sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==",
|
||||
"version": "1.0.30001706",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001706.tgz",
|
||||
"integrity": "sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
|
||||
32
docs/static/archived-versions.json
vendored
32
docs/static/archived-versions.json
vendored
@@ -1,4 +1,36 @@
|
||||
[
|
||||
{
|
||||
"label": "v1.131.3",
|
||||
"url": "https://v1.131.3.archive.immich.app"
|
||||
},
|
||||
{
|
||||
"label": "v1.131.2",
|
||||
"url": "https://v1.131.2.archive.immich.app"
|
||||
},
|
||||
{
|
||||
"label": "v1.131.1",
|
||||
"url": "https://v1.131.1.archive.immich.app"
|
||||
},
|
||||
{
|
||||
"label": "v1.131.0",
|
||||
"url": "https://v1.131.0.archive.immich.app"
|
||||
},
|
||||
{
|
||||
"label": "v1.130.3",
|
||||
"url": "https://v1.130.3.archive.immich.app"
|
||||
},
|
||||
{
|
||||
"label": "v1.130.2",
|
||||
"url": "https://v1.130.2.archive.immich.app"
|
||||
},
|
||||
{
|
||||
"label": "v1.130.1",
|
||||
"url": "https://v1.130.1.archive.immich.app"
|
||||
},
|
||||
{
|
||||
"label": "v1.130.0",
|
||||
"url": "https://v1.130.0.archive.immich.app"
|
||||
},
|
||||
{
|
||||
"label": "v1.129.0",
|
||||
"url": "https://v1.129.0.archive.immich.app"
|
||||
|
||||
@@ -1,39 +1,29 @@
|
||||
import { FlatCompat } from '@eslint/eslintrc';
|
||||
import js from '@eslint/js';
|
||||
import typescriptEslint from '@typescript-eslint/eslint-plugin';
|
||||
import tsParser from '@typescript-eslint/parser';
|
||||
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended';
|
||||
import eslintPluginUnicorn from 'eslint-plugin-unicorn';
|
||||
import globals from 'globals';
|
||||
import path from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import typescriptEslint from 'typescript-eslint';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
const compat = new FlatCompat({
|
||||
baseDirectory: __dirname,
|
||||
recommendedConfig: js.configs.recommended,
|
||||
allConfig: js.configs.all,
|
||||
});
|
||||
|
||||
export default [
|
||||
export default typescriptEslint.config([
|
||||
eslintPluginUnicorn.configs.recommended,
|
||||
eslintPluginPrettierRecommended,
|
||||
js.configs.recommended,
|
||||
typescriptEslint.configs.recommended,
|
||||
{
|
||||
ignores: ['eslint.config.mjs'],
|
||||
},
|
||||
...compat.extends(
|
||||
'plugin:@typescript-eslint/recommended',
|
||||
'plugin:prettier/recommended',
|
||||
'plugin:unicorn/recommended',
|
||||
),
|
||||
{
|
||||
plugins: {
|
||||
'@typescript-eslint': typescriptEslint,
|
||||
},
|
||||
|
||||
languageOptions: {
|
||||
globals: {
|
||||
...globals.node,
|
||||
},
|
||||
|
||||
parser: tsParser,
|
||||
parser: typescriptEslint.parser,
|
||||
ecmaVersion: 5,
|
||||
sourceType: 'module',
|
||||
|
||||
@@ -62,4 +52,4 @@ export default [
|
||||
'object-shorthand': ['error', 'always'],
|
||||
},
|
||||
},
|
||||
];
|
||||
]);
|
||||
|
||||
1472
e2e/package-lock.json
generated
1472
e2e/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "immich-e2e",
|
||||
"version": "1.129.0",
|
||||
"version": "1.131.3",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"type": "module",
|
||||
@@ -25,18 +25,16 @@
|
||||
"@immich/sdk": "file:../open-api/typescript-sdk",
|
||||
"@playwright/test": "^1.44.1",
|
||||
"@types/luxon": "^3.4.2",
|
||||
"@types/node": "^22.13.9",
|
||||
"@types/node": "^22.13.14",
|
||||
"@types/oidc-provider": "^8.5.1",
|
||||
"@types/pg": "^8.11.0",
|
||||
"@types/pngjs": "^6.0.4",
|
||||
"@types/supertest": "^6.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "^8.15.0",
|
||||
"@typescript-eslint/parser": "^8.15.0",
|
||||
"@vitest/coverage-v8": "^3.0.0",
|
||||
"eslint": "^9.14.0",
|
||||
"eslint-config-prettier": "^10.0.0",
|
||||
"eslint-plugin-prettier": "^5.1.3",
|
||||
"eslint-plugin-unicorn": "^56.0.1",
|
||||
"eslint-plugin-unicorn": "^57.0.0",
|
||||
"exiftool-vendored": "^28.3.1",
|
||||
"globals": "^16.0.0",
|
||||
"jose": "^5.6.3",
|
||||
@@ -49,6 +47,7 @@
|
||||
"socket.io-client": "^4.7.4",
|
||||
"supertest": "^7.0.0",
|
||||
"typescript": "^5.3.3",
|
||||
"typescript-eslint": "^8.28.0",
|
||||
"utimes": "^5.2.1",
|
||||
"vitest": "^3.0.0"
|
||||
},
|
||||
|
||||
@@ -1257,6 +1257,7 @@ describe('/asset', () => {
|
||||
|
||||
for (const { id, status } of assets) {
|
||||
expect(status).toBe(AssetMediaStatus.Created);
|
||||
// longer timeout as the thumbnail generation from full-size raw files can take a while
|
||||
await utils.waitForWebsocketEvent({ event: 'assetUpload', id });
|
||||
}
|
||||
|
||||
|
||||
@@ -329,7 +329,7 @@ describe('/libraries', () => {
|
||||
const library = await utils.createLibrary(admin.accessToken, {
|
||||
ownerId: admin.userId,
|
||||
importPaths: [`${testAssetDirInternal}/temp`],
|
||||
exclusionPatterns: ['**/directoryA'],
|
||||
exclusionPatterns: ['**/directoryA/**'],
|
||||
});
|
||||
|
||||
await utils.scan(admin.accessToken, library.id);
|
||||
@@ -337,7 +337,82 @@ describe('/libraries', () => {
|
||||
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
|
||||
|
||||
expect(assets.count).toBe(1);
|
||||
expect(assets.items[0].originalPath.includes('directoryB'));
|
||||
|
||||
expect(assets.items).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({ originalPath: expect.stringContaining('directoryB/assetB.png') }),
|
||||
]),
|
||||
);
|
||||
});
|
||||
|
||||
it('should scan external library with multiple exclusion patterns', async () => {
|
||||
const library = await utils.createLibrary(admin.accessToken, {
|
||||
ownerId: admin.userId,
|
||||
importPaths: [`${testAssetDirInternal}/temp`],
|
||||
exclusionPatterns: ['**/directoryA/**', '**/directoryB/**'],
|
||||
});
|
||||
|
||||
await utils.scan(admin.accessToken, library.id);
|
||||
|
||||
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
|
||||
|
||||
expect(assets.count).toBe(0);
|
||||
|
||||
expect(assets.items).toEqual([]);
|
||||
});
|
||||
|
||||
it('should remove assets covered by a new exclusion pattern', async () => {
|
||||
const library = await utils.createLibrary(admin.accessToken, {
|
||||
ownerId: admin.userId,
|
||||
importPaths: [`${testAssetDirInternal}/temp`],
|
||||
});
|
||||
|
||||
await utils.scan(admin.accessToken, library.id);
|
||||
|
||||
{
|
||||
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
|
||||
|
||||
expect(assets.count).toBe(2);
|
||||
|
||||
expect(assets.items).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({ originalPath: expect.stringContaining('directoryA/assetA.png') }),
|
||||
expect.objectContaining({ originalPath: expect.stringContaining('directoryB/assetB.png') }),
|
||||
]),
|
||||
);
|
||||
}
|
||||
|
||||
await utils.updateLibrary(admin.accessToken, library.id, {
|
||||
exclusionPatterns: ['**/directoryA/**'],
|
||||
});
|
||||
|
||||
await utils.scan(admin.accessToken, library.id);
|
||||
|
||||
{
|
||||
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
|
||||
|
||||
expect(assets.count).toBe(1);
|
||||
|
||||
expect(assets.items).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({ originalPath: expect.stringContaining('directoryB/assetB.png') }),
|
||||
]),
|
||||
);
|
||||
}
|
||||
|
||||
await utils.updateLibrary(admin.accessToken, library.id, {
|
||||
exclusionPatterns: ['**/directoryA/**', '**/directoryB/**'],
|
||||
});
|
||||
|
||||
await utils.scan(admin.accessToken, library.id);
|
||||
|
||||
{
|
||||
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
|
||||
|
||||
expect(assets.count).toBe(0);
|
||||
|
||||
expect(assets.items).toEqual([]);
|
||||
}
|
||||
});
|
||||
|
||||
it('should scan multiple import paths', async () => {
|
||||
@@ -454,6 +529,133 @@ describe('/libraries', () => {
|
||||
utils.removeImageFile(`${testAssetDir}/temp/folder${char}2/asset2.png`);
|
||||
});
|
||||
|
||||
it('should respect exclusion patterns when using multiple import paths', async () => {
|
||||
// https://github.com/immich-app/immich/issues/17121
|
||||
const library = await utils.createLibrary(admin.accessToken, {
|
||||
ownerId: admin.userId,
|
||||
importPaths: [`${testAssetDirInternal}/temp/exclusion/`, `${testAssetDirInternal}/temp/exclusion2/`],
|
||||
});
|
||||
|
||||
const excludedFolder = `Raw`;
|
||||
|
||||
utils.createImageFile(`${testAssetDir}/temp/exclusion/asset1.png`);
|
||||
utils.createImageFile(`${testAssetDir}/temp/exclusion/${excludedFolder}/asset2.png`);
|
||||
|
||||
await utils.scan(admin.accessToken, library.id);
|
||||
|
||||
{
|
||||
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
|
||||
|
||||
expect(assets.items).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
|
||||
expect.objectContaining({ originalPath: expect.stringContaining(`${excludedFolder}/asset2.png`) }),
|
||||
]),
|
||||
);
|
||||
}
|
||||
|
||||
await utils.scan(admin.accessToken, library.id);
|
||||
|
||||
{
|
||||
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
|
||||
|
||||
expect(assets.items).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
|
||||
expect.objectContaining({ originalPath: expect.stringContaining(`${excludedFolder}/asset2.png`) }),
|
||||
]),
|
||||
);
|
||||
}
|
||||
|
||||
await utils.updateLibrary(admin.accessToken, library.id, { exclusionPatterns: [`**/${excludedFolder}/**`] });
|
||||
await utils.scan(admin.accessToken, library.id);
|
||||
|
||||
{
|
||||
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
|
||||
|
||||
expect(assets.items).toEqual([
|
||||
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
|
||||
]);
|
||||
}
|
||||
|
||||
await utils.scan(admin.accessToken, library.id);
|
||||
|
||||
{
|
||||
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
|
||||
|
||||
expect(assets.items).toEqual([
|
||||
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
|
||||
]);
|
||||
}
|
||||
|
||||
utils.removeImageFile(`${testAssetDir}/temp/exclusion/asset1.png`);
|
||||
utils.removeImageFile(`${testAssetDir}/temp/exclusion/${excludedFolder}/asset2.png`);
|
||||
});
|
||||
|
||||
const annoyingExclusionPatterns = ['@', '#', '$', '%', '^', '&', '='];
|
||||
|
||||
it.each(annoyingExclusionPatterns)('should support exclusion patterns with %s', async (char) => {
|
||||
const library = await utils.createLibrary(admin.accessToken, {
|
||||
ownerId: admin.userId,
|
||||
importPaths: [`${testAssetDirInternal}/temp/exclusion/`],
|
||||
});
|
||||
|
||||
const excludedFolder = `${char}folder`;
|
||||
|
||||
utils.createImageFile(`${testAssetDir}/temp/exclusion/asset1.png`);
|
||||
utils.createImageFile(`${testAssetDir}/temp/exclusion/${excludedFolder}/asset2.png`);
|
||||
|
||||
await utils.scan(admin.accessToken, library.id);
|
||||
|
||||
{
|
||||
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
|
||||
|
||||
expect(assets.items).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
|
||||
expect.objectContaining({ originalPath: expect.stringContaining(`${excludedFolder}/asset2.png`) }),
|
||||
]),
|
||||
);
|
||||
}
|
||||
|
||||
await utils.scan(admin.accessToken, library.id);
|
||||
|
||||
{
|
||||
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
|
||||
|
||||
expect(assets.items).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
|
||||
expect.objectContaining({ originalPath: expect.stringContaining(`${excludedFolder}/asset2.png`) }),
|
||||
]),
|
||||
);
|
||||
}
|
||||
|
||||
await utils.updateLibrary(admin.accessToken, library.id, { exclusionPatterns: [`**/${excludedFolder}/**`] });
|
||||
await utils.scan(admin.accessToken, library.id);
|
||||
|
||||
{
|
||||
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
|
||||
|
||||
expect(assets.items).toEqual([
|
||||
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
|
||||
]);
|
||||
}
|
||||
|
||||
await utils.scan(admin.accessToken, library.id);
|
||||
|
||||
{
|
||||
const { assets } = await utils.searchAssets(admin.accessToken, { libraryId: library.id });
|
||||
|
||||
expect(assets.items).toEqual([
|
||||
expect.objectContaining({ originalPath: expect.stringContaining(`/asset1.png`) }),
|
||||
]);
|
||||
}
|
||||
|
||||
utils.removeImageFile(`${testAssetDir}/temp/exclusion/asset1.png`);
|
||||
utils.removeImageFile(`${testAssetDir}/temp/exclusion/${excludedFolder}/asset2.png`);
|
||||
});
|
||||
|
||||
it('should reimport a modified file', async () => {
|
||||
const library = await utils.createLibrary(admin.accessToken, {
|
||||
ownerId: admin.userId,
|
||||
|
||||
@@ -633,7 +633,6 @@ describe('/search', () => {
|
||||
.set('Authorization', `Bearer ${admin.accessToken}`);
|
||||
expect(body).toEqual([
|
||||
'Andalusia',
|
||||
'Berlin',
|
||||
'Glarus',
|
||||
'Greater Accra',
|
||||
'Havana',
|
||||
@@ -642,6 +641,7 @@ describe('/search', () => {
|
||||
'Mississippi',
|
||||
'New York',
|
||||
'Shanghai',
|
||||
'State of Berlin',
|
||||
'St.-Petersburg',
|
||||
'Tbilisi',
|
||||
'Tokyo',
|
||||
@@ -657,7 +657,6 @@ describe('/search', () => {
|
||||
.set('Authorization', `Bearer ${admin.accessToken}`);
|
||||
expect(body).toEqual([
|
||||
'Andalusia',
|
||||
'Berlin',
|
||||
'Glarus',
|
||||
'Greater Accra',
|
||||
'Havana',
|
||||
@@ -666,6 +665,7 @@ describe('/search', () => {
|
||||
'Mississippi',
|
||||
'New York',
|
||||
'Shanghai',
|
||||
'State of Berlin',
|
||||
'St.-Petersburg',
|
||||
'Tbilisi',
|
||||
'Tokyo',
|
||||
|
||||
@@ -117,7 +117,7 @@ describe('/shared-links', () => {
|
||||
const resp = await request(shareUrl).get(`/${linkWithAssets.key}`);
|
||||
expect(resp.status).toBe(200);
|
||||
expect(resp.header['content-type']).toContain('text/html');
|
||||
expect(resp.text).toContain(`<meta property="og:image" content="http://`);
|
||||
expect(resp.text).toContain(`<meta property="og:image" content="https://my.immich.app`);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ const tests: Test[] = [
|
||||
},
|
||||
{
|
||||
test: 'should support paths with an asterisk',
|
||||
paths: [`/photos\*/image1.jpg`],
|
||||
paths: [`/photos*/image1.jpg`],
|
||||
files: {
|
||||
'/photos*/image1.jpg': true,
|
||||
'/photos*/image2.jpg': false,
|
||||
@@ -40,7 +40,7 @@ const tests: Test[] = [
|
||||
},
|
||||
{
|
||||
test: 'should support paths with a single quote',
|
||||
paths: [`/photos\'/image1.jpg`],
|
||||
paths: [`/photos'/image1.jpg`],
|
||||
files: {
|
||||
"/photos'/image1.jpg": true,
|
||||
"/photos'/image2.jpg": false,
|
||||
@@ -49,7 +49,7 @@ const tests: Test[] = [
|
||||
},
|
||||
{
|
||||
test: 'should support paths with a double quote',
|
||||
paths: [`/photos\"/image1.jpg`],
|
||||
paths: [`/photos"/image1.jpg`],
|
||||
files: {
|
||||
'/photos"/image1.jpg': true,
|
||||
'/photos"/image2.jpg': false,
|
||||
@@ -67,7 +67,7 @@ const tests: Test[] = [
|
||||
},
|
||||
{
|
||||
test: 'should support paths with an opening brace',
|
||||
paths: [`/photos\{/image1.jpg`],
|
||||
paths: [`/photos{/image1.jpg`],
|
||||
files: {
|
||||
'/photos{/image1.jpg': true,
|
||||
'/photos{/image2.jpg': false,
|
||||
@@ -76,7 +76,7 @@ const tests: Test[] = [
|
||||
},
|
||||
{
|
||||
test: 'should support paths with a closing brace',
|
||||
paths: [`/photos\}/image1.jpg`],
|
||||
paths: [`/photos}/image1.jpg`],
|
||||
files: {
|
||||
'/photos}/image1.jpg': true,
|
||||
'/photos}/image2.jpg': false,
|
||||
|
||||
@@ -493,7 +493,7 @@ export const utils = {
|
||||
value: accessToken,
|
||||
domain,
|
||||
path: '/',
|
||||
expires: 1_742_402_728,
|
||||
expires: 2_058_028_213,
|
||||
httpOnly: true,
|
||||
secure: false,
|
||||
sameSite: 'Lax',
|
||||
@@ -503,7 +503,7 @@ export const utils = {
|
||||
value: 'password',
|
||||
domain,
|
||||
path: '/',
|
||||
expires: 1_742_402_728,
|
||||
expires: 2_058_028_213,
|
||||
httpOnly: true,
|
||||
secure: false,
|
||||
sameSite: 'Lax',
|
||||
@@ -513,7 +513,7 @@ export const utils = {
|
||||
value: 'true',
|
||||
domain,
|
||||
path: '/',
|
||||
expires: 1_742_402_728,
|
||||
expires: 2_058_028_213,
|
||||
httpOnly: false,
|
||||
secure: false,
|
||||
sameSite: 'Lax',
|
||||
@@ -537,6 +537,7 @@ export const utils = {
|
||||
},
|
||||
|
||||
waitForQueueFinish: (accessToken: string, queue: keyof AllJobStatusResponseDto, ms?: number) => {
|
||||
// eslint-disable-next-line no-async-promise-executor
|
||||
return new Promise<void>(async (resolve, reject) => {
|
||||
const timeout = setTimeout(() => reject(new Error('Timed out waiting for queue to empty')), ms || 10_000);
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ test.describe('Photo Viewer', () => {
|
||||
const { x, y, width, height } = box!;
|
||||
await page.mouse.move(x + width / 2, y + height / 2);
|
||||
await page.mouse.wheel(0, -1);
|
||||
await expect.poll(async () => await imageLocator(page).getAttribute('src')).toContain('original');
|
||||
await expect.poll(async () => await imageLocator(page).getAttribute('src')).toContain('fullsize');
|
||||
});
|
||||
|
||||
test('reloads photo when checksum changes', async ({ page }) => {
|
||||
|
||||
@@ -45,7 +45,7 @@ test.describe('Shared Links', () => {
|
||||
await page.goto(`/share/${sharedLink.key}`);
|
||||
await page.getByRole('heading', { name: 'Test Album' }).waitFor();
|
||||
await page.locator(`[data-asset-id="${asset.id}"]`).hover();
|
||||
await page.waitForSelector('#asset-group-by-date svg');
|
||||
await page.waitForSelector('[data-group] svg');
|
||||
await page.getByRole('checkbox').click();
|
||||
await page.getByRole('button', { name: 'Download' }).click();
|
||||
await page.getByText('DOWNLOADING', { exact: true }).waitFor();
|
||||
|
||||
16
i18n/af.json
16
i18n/af.json
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"about": "Verfris",
|
||||
"about": "Oor",
|
||||
"account": "Rekening",
|
||||
"account_settings": "Rekeninginstellings",
|
||||
"acknowledge": "Erken",
|
||||
@@ -56,7 +56,7 @@
|
||||
"duplicate_detection_job_description": "Begin masjienleer op bates om soortgelyke beelde op te spoor. Maak staat op Smart Search",
|
||||
"exclusion_pattern_description": "Met uitsluitingspatrone kan jy lêers en vouers ignoreer wanneer jy jou biblioteek skandeer. Dit is nuttig as jy vouers het wat lêers bevat wat jy nie wil invoer nie, soos RAW-lêers.",
|
||||
"external_library_created_at": "Eksterne biblioteek (geskep op {date})",
|
||||
"external_library_management": "Eksterne Biblioteek-opsies",
|
||||
"external_library_management": "Eksterne Biblioteekbestuur",
|
||||
"face_detection": "Gesig deteksie",
|
||||
"failed_job_command": "Opdrag {command} het misluk vir werk: {job}",
|
||||
"force_delete_user_warning": "WAARSKUWING: Dit sal onmiddellik die gebruiker en alle bates verwyder. Dit kan nie ontdoen word nie en die lêers kan nie herstel word nie.",
|
||||
@@ -64,7 +64,8 @@
|
||||
"image_format": "Formaat",
|
||||
"image_format_description": "WebP produseer kleiner lêers as JPEG, maar is stadiger om te enkodeer.",
|
||||
"image_prefer_embedded_preview": "Verkies ingebedde voorskou",
|
||||
"image_prefer_wide_gamut": "Verkies wye spektrum",
|
||||
"image_prefer_wide_gamut": "Verkies wide gamut",
|
||||
"image_prefer_wide_gamut_setting_description": "Gebruik Display P3 vir kleinkiekies. Dit behou die lewendheid van beelde met wye kleurruimtes beter, maar beelde kan anders verskyn op ou apparate met 'n ou blaaierweergawe. sRGB-beelde gebruik steeds sRGB om kleurverskuiwings te voorkom.",
|
||||
"image_preview_description": "Mediumgrootte prent met gestroopte metadata, wat gebruik word wanneer 'n enkele bate bekyk word en vir masjienleer",
|
||||
"image_preview_quality_description": "Voorskou kwaliteit van 1-100. Hoër is beter, maar produseer groter lêers en kan app-reaksie verminder. Die stel van 'n lae waarde kan masjienleerkwaliteit beïnvloed.",
|
||||
"image_preview_title": "Voorskou Instellings",
|
||||
@@ -72,7 +73,14 @@
|
||||
"image_resolution": "Resolusie",
|
||||
"image_resolution_description": "Hoër resolusies kan meer detail bewaar, maar neem langer om te enkodeer, het groter lêergroottes en kan app-reaksie verminder.",
|
||||
"image_settings": "Prent Instellings",
|
||||
"image_settings_description": "Bestuur die kwaliteit en resolusie van gegenereerde beelde"
|
||||
"image_settings_description": "Bestuur die kwaliteit en resolusie van gegenereerde beelde",
|
||||
"image_thumbnail_description": "Klein kleinkiekies sonder metadata, gebruik om groepe foto's soos die tydlyn te bekyk",
|
||||
"image_thumbnail_quality_description": "Kleinkiekiekwaliteit van 1-100. Hoër is beter, maar produseer groter lêers en kan die toepassing vertraag.",
|
||||
"image_thumbnail_title": "Kleinkiekie-instellings",
|
||||
"job_concurrency": "{job} gelyktydigheid",
|
||||
"job_created": "Taak gemaak",
|
||||
"job_not_concurrency_safe": "Hierdie taak kan nie gelyktydig uitgevoer word nie.",
|
||||
"job_settings": "Agtergrondtaakinstellings"
|
||||
},
|
||||
"search_by_description": "Soek by beskrywing",
|
||||
"search_by_description_example": "Stapdag in Sapa"
|
||||
|
||||
@@ -987,6 +987,7 @@
|
||||
"permanently_deleted_asset": "تم حذف الأصل بشكل نهائي",
|
||||
"permanently_deleted_assets_count": "تم حذف {count, plural, one {# محتوى} other {# المحتويات}} نهائيًا",
|
||||
"person": "شخص",
|
||||
"person_birthdate": "تاريخ الميلاد {التاريخ}",
|
||||
"person_hidden": "{name}{hidden, select, true { (مخفي)} other {}}",
|
||||
"photo_shared_all_users": "يبدو أنك شاركت صورك مع جميع المستخدمين أو ليس لديك أي مستخدم للمشاركة معه.",
|
||||
"photos": "الصور",
|
||||
@@ -1078,6 +1079,8 @@
|
||||
"remove_from_album": "إزالة من الألبوم",
|
||||
"remove_from_favorites": "إزالة من المفضلة",
|
||||
"remove_from_shared_link": "إزالة من الرابط المشترك",
|
||||
"remove_memory": "إزالة الذاكرة",
|
||||
"remove_photo_from_memory": "إزالة الصورة من هذه الذكرى",
|
||||
"remove_url": "إزالة عنوان URL",
|
||||
"remove_user": "إزالة المستخدم",
|
||||
"removed_api_key": "تم إزالة مفتاح API: {name}",
|
||||
@@ -1148,6 +1151,7 @@
|
||||
"searching_locales": "جارٍ البحث في اللغات...",
|
||||
"second": "ثانية",
|
||||
"see_all_people": "عرض جميع الأشخاص",
|
||||
"select": "إختر",
|
||||
"select_album_cover": "تحديد غلاف الألبوم",
|
||||
"select_all": "تحديد الكل",
|
||||
"select_all_duplicates": "تحديد جميع النسخ المكررة",
|
||||
|
||||
@@ -1079,6 +1079,8 @@
|
||||
"remove_from_album": "Odstranit z alba",
|
||||
"remove_from_favorites": "Odstranit z oblíbených",
|
||||
"remove_from_shared_link": "Odstranit ze sdíleného odkazu",
|
||||
"remove_memory": "Odstranit vzpomínku",
|
||||
"remove_photo_from_memory": "Odstranit fotografii z této vzpomínky",
|
||||
"remove_url": "Odstranit URL",
|
||||
"remove_user": "Odebrat uživatele",
|
||||
"removed_api_key": "Odstraněn API klíč: {name}",
|
||||
@@ -1149,6 +1151,7 @@
|
||||
"searching_locales": "Vyhledávání jazyků...",
|
||||
"second": "Sekunda",
|
||||
"see_all_people": "Zobrazit všechny lidi",
|
||||
"select": "Vybrat",
|
||||
"select_album_cover": "Vybrat obal alba",
|
||||
"select_all": "Vybrat vše",
|
||||
"select_all_duplicates": "Vybrat všechny duplicity",
|
||||
@@ -1375,4 +1378,4 @@
|
||||
"yes": "Ano",
|
||||
"you_dont_have_any_shared_links": "Nemáte žádné sdílené odkazy",
|
||||
"zoom_image": "Zvětšit obrázek"
|
||||
}
|
||||
}
|
||||
|
||||
16
i18n/da.json
16
i18n/da.json
@@ -41,6 +41,7 @@
|
||||
"backup_settings": "Backup-indstillinger",
|
||||
"backup_settings_description": "Administrer backupindstillinger for database",
|
||||
"check_all": "Tjek Alle",
|
||||
"cleanup": "Ryd op",
|
||||
"cleared_jobs": "Ryddet jobs til: {job}",
|
||||
"config_set_by_file": "konfigurationen er i øjeblikket indstillet af en konfigurations fil",
|
||||
"confirm_delete_library": "Er du sikker på, at du vil slette {library} bibliotek?",
|
||||
@@ -96,7 +97,7 @@
|
||||
"library_scanning_enable_description": "Aktiver periodisk biblioteksscanning",
|
||||
"library_settings": "Eksternt bibliotek",
|
||||
"library_settings_description": "Administrer eksterne biblioteksindstillinger",
|
||||
"library_tasks_description": "Udfør biblioteksopgaver",
|
||||
"library_tasks_description": "Scan eksterne biblioteker for nye og/eller ændrede mediefiler",
|
||||
"library_watching_enable_description": "Overvåg eksterne biblioteker for filændringer",
|
||||
"library_watching_settings": "Biblioteks overvågning (EKSPERIMENTEL)",
|
||||
"library_watching_settings_description": "Tjek automatisk for ændrede filer",
|
||||
@@ -131,7 +132,7 @@
|
||||
"machine_learning_smart_search_description": "Søg semantisk efter billeder ved hjælp af CLIP-indlejringer",
|
||||
"machine_learning_smart_search_enabled": "Aktiver smart søgning",
|
||||
"machine_learning_smart_search_enabled_description": "Hvis deaktiveret, vil billeder ikke blive kodet til smart søgning.",
|
||||
"machine_learning_url_description": "URL på maskinlæringsserveren. Hvis der er angivet mere end én URL, hver server vil blive forsøgt en ad gangen, indtil en reagerer med succes, i rækkefølge fra første til sidste.",
|
||||
"machine_learning_url_description": "URL’en for maskinlæringsserveren. Hvis mere end én URL angives, vil hver server blive forsøgt én ad gangen, indtil en svarer succesfuldt, i rækkefølge fra første til sidste. Servere, der ikke svarer, vil midlertidigt blive ignoreret, indtil de kommer online igen.",
|
||||
"manage_concurrency": "Administrer antallet af samtidige opgaver",
|
||||
"manage_log_settings": "Administrer logindstillinger",
|
||||
"map_dark_style": "Mørk tema",
|
||||
@@ -242,7 +243,7 @@
|
||||
"storage_template_hash_verification_enabled_description": "Slår hash-verifikation til, slå ikke dette fra med mindre du er sikker på dets konsekvenser",
|
||||
"storage_template_migration": "Lagringsskabelonmigration",
|
||||
"storage_template_migration_description": "Anvend den nuværende <link>{template}</link> på tidligere uploadede mediefiler",
|
||||
"storage_template_migration_info": "Skabelonændringer vil kun gælde for nye mediefiler. For at anvende skabelonen retroaktivt på tidligere uploadede mediefiler skal du køre <link>{job}</link>.",
|
||||
"storage_template_migration_info": "Lager-skabelonen vil konvertere alle filendelser til små bogstaver. Skabelonændringer vil kun gælde for nye mediefiler. For at anvende skabelonen retroaktivt på tidligere uploadede mediefiler skal du køre <link>{job}</link>.",
|
||||
"storage_template_migration_job": "Lager Skabelon Migreringsjob",
|
||||
"storage_template_more_details": "For flere detaljer om denne funktion, referer til <template-link>Lager Skabelonen</template-link> og dens <implications-link>implikationer</implications-link>",
|
||||
"storage_template_onboarding_description": "Når denne funktion er aktiveret, vil den automatisk organisere filer baseret på en brugerdefineret skabelon. På grund af stabilitetsproblemer er funktionen som standard slået fra. For mere information, se <link>dokumentation</link>.",
|
||||
@@ -393,6 +394,7 @@
|
||||
"allow_edits": "Tillad redigeringer",
|
||||
"allow_public_user_to_download": "Tillad offentlige brugere til at hente",
|
||||
"allow_public_user_to_upload": "Tillad offentlige brugere til at uploade",
|
||||
"alt_text_qr_code": "QR-kode billede",
|
||||
"anti_clockwise": "Mod uret",
|
||||
"api_key": "API-nøgle",
|
||||
"api_key_description": "Denne værdi vises kun én gang. Venligst kopiér den før du lukker vinduet.",
|
||||
@@ -889,6 +891,7 @@
|
||||
"month": "Måned",
|
||||
"more": "Mere",
|
||||
"moved_to_trash": "Flyttet til skraldespand",
|
||||
"mute_memories": "Dæmp minder",
|
||||
"my_albums": "Mine albummer",
|
||||
"name": "Navn",
|
||||
"name_or_nickname": "Navn eller kælenavn",
|
||||
@@ -984,6 +987,7 @@
|
||||
"permanently_deleted_asset": "Permanent slettet medie",
|
||||
"permanently_deleted_assets_count": "{count, plural, one {# aktiv} other {# aktiver}} permanent slettet",
|
||||
"person": "Person",
|
||||
"person_birthdate": "Født den {date}",
|
||||
"person_hidden": "{name}{hidden, select, true { (skjult)} other {}}",
|
||||
"photo_shared_all_users": "Det ser ud til, at du har delt dine billeder med alle brugere, eller også har du ikke nogen bruger at dele med.",
|
||||
"photos": "Billeder",
|
||||
@@ -1075,6 +1079,8 @@
|
||||
"remove_from_album": "Fjern fra album",
|
||||
"remove_from_favorites": "Fjern fra favoritter",
|
||||
"remove_from_shared_link": "Fjern fra delt link",
|
||||
"remove_memory": "Fjern minde",
|
||||
"remove_photo_from_memory": "Fjern foto fra dette minde",
|
||||
"remove_url": "Fjern URL",
|
||||
"remove_user": "Fjern bruger",
|
||||
"removed_api_key": "Fjernede API-nøgle: {name}",
|
||||
@@ -1145,6 +1151,7 @@
|
||||
"searching_locales": "Søger lokaler...",
|
||||
"second": "Sekund",
|
||||
"see_all_people": "Se alle personer",
|
||||
"select": "Vælg",
|
||||
"select_album_cover": "Vælg albumcover",
|
||||
"select_all": "Vælg alle",
|
||||
"select_all_duplicates": "Vælg alle dubletter",
|
||||
@@ -1300,6 +1307,7 @@
|
||||
"unlink_motion_video": "Fjern link til bevægelsesvideo",
|
||||
"unlink_oauth": "Frakobl OAuth",
|
||||
"unlinked_oauth_account": "Frakoblede OAuth-konto",
|
||||
"unmute_memories": "Ophæv dæmpning af minder",
|
||||
"unnamed_album": "Unavngivet album",
|
||||
"unnamed_album_delete_confirmation": "Er du sikker på, at du vil slette dette album?",
|
||||
"unnamed_share": "Unavngivet deling",
|
||||
@@ -1370,4 +1378,4 @@
|
||||
"yes": "Ja",
|
||||
"you_dont_have_any_shared_links": "Du har ikke nogen delte links",
|
||||
"zoom_image": "Zoom billede"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1079,6 +1079,8 @@
|
||||
"remove_from_album": "Aus Album entfernen",
|
||||
"remove_from_favorites": "Aus Favoriten entfernen",
|
||||
"remove_from_shared_link": "Aus geteiltem Link entfernen",
|
||||
"remove_memory": "Erinnerung entfernen",
|
||||
"remove_photo_from_memory": "Foto aus dieser Erinnerung entfernen",
|
||||
"remove_url": "URL entfernen",
|
||||
"remove_user": "Nutzer entfernen",
|
||||
"removed_api_key": "API-Schlüssel {name} wurde entfernt",
|
||||
@@ -1149,6 +1151,7 @@
|
||||
"searching_locales": "Suche nach Orten...",
|
||||
"second": "Sekunde",
|
||||
"see_all_people": "Alle Personen anzeigen",
|
||||
"select": "Auswählen",
|
||||
"select_album_cover": "Album-Cover auswählen",
|
||||
"select_all": "Alles auswählen",
|
||||
"select_all_duplicates": "Alle Duplikate auswählen",
|
||||
@@ -1375,4 +1378,4 @@
|
||||
"yes": "Ja",
|
||||
"you_dont_have_any_shared_links": "Du hast keine geteilten Links",
|
||||
"zoom_image": "Bild vergrößern"
|
||||
}
|
||||
}
|
||||
|
||||
11
i18n/el.json
11
i18n/el.json
@@ -41,6 +41,7 @@
|
||||
"backup_settings": "Ρυθμίσεις Αντιγράφων Ασφαλείας",
|
||||
"backup_settings_description": "Διαχείρηση ρυθμίσεων των αντιγράφων ασφαλείας της βάσης δεδομένων",
|
||||
"check_all": "Έλεγχος Όλων",
|
||||
"cleanup": "Εκκαθάριση",
|
||||
"cleared_jobs": "Εκκαθαρίστηκαν οι εργασίες για: {job}",
|
||||
"config_set_by_file": "Η παραμετροποίηση γίνεται, προς το παρόν, μέσω ενός αρχείου παραμέτρων",
|
||||
"confirm_delete_library": "Είστε βέβαιοι ότι θέλετε να διαγράψετε τη βιβλιοθήκη {library};",
|
||||
@@ -393,6 +394,7 @@
|
||||
"allow_edits": "Επιτρέψτε τις τροποποιήσεις",
|
||||
"allow_public_user_to_download": "Επιτρέψτε σε δημόσιο χρήστη να κατεβάσει",
|
||||
"allow_public_user_to_upload": "Επιτρέψτε στον δημόσιο χρήστη να ανεβάσει",
|
||||
"alt_text_qr_code": "Εικόνα κωδικού QR",
|
||||
"anti_clockwise": "Αντίθετα με τη φορά του ρολογιού",
|
||||
"api_key": "Κλειδί API",
|
||||
"api_key_description": "Αυτή η τιμή θα εμφανιστεί μόνο μία φορά. Παρακαλώ βεβαιωθείτε ότι την έχετε αντιγράψει πριν κλείσετε το παράθυρο.",
|
||||
@@ -889,6 +891,7 @@
|
||||
"month": "Μήνας",
|
||||
"more": "Περισσότερα",
|
||||
"moved_to_trash": "Μετακινήθηκε στον κάδο απορριμμάτων",
|
||||
"mute_memories": "Σίγαση Αναμνήσεων",
|
||||
"my_albums": "Τα άλμπουμ μου",
|
||||
"name": "Όνομα",
|
||||
"name_or_nickname": "Όνομα ή ψευδώνυμο",
|
||||
@@ -984,6 +987,7 @@
|
||||
"permanently_deleted_asset": "Οριστικά διαγραμμένο στοιχείο",
|
||||
"permanently_deleted_assets_count": "Οριστική διαγραφή {count, plural, one {# στοιχείου} other {# στοιχείων}}",
|
||||
"person": "Άτομο",
|
||||
"person_birthdate": "Γεννηθείς στις {date}",
|
||||
"person_hidden": "{name}{hidden, select, true { (κρυφό)} other {}}",
|
||||
"photo_shared_all_users": "Φαίνεται ότι μοιραστήκατε τις φωτογραφίες σας με όλους τους χρήστες ή δεν έχετε κανέναν χρήστη για κοινή χρήση.",
|
||||
"photos": "Φωτογραφίες",
|
||||
@@ -1075,6 +1079,8 @@
|
||||
"remove_from_album": "Αφαίρεση από το άλμπουμ",
|
||||
"remove_from_favorites": "Αφαίρεση από τα αγαπημένα",
|
||||
"remove_from_shared_link": "Αφαίρεση από τον κοινόχρηστο σύνδεσμο",
|
||||
"remove_memory": "Αφαίρεση ανάμνησης",
|
||||
"remove_photo_from_memory": "Αφαίρεση φωτογραφίας από την ανάμνηση",
|
||||
"remove_url": "Αφαίρεση Συνδέσμου",
|
||||
"remove_user": "Αφαίρεση χρήστη",
|
||||
"removed_api_key": "Αφαιρέθηκε το API Key: {name}",
|
||||
@@ -1091,6 +1097,7 @@
|
||||
"repository": "Αποθετήριο",
|
||||
"require_password": "Απαιτείται κωδικός πρόσβασης",
|
||||
"require_user_to_change_password_on_first_login": "Ο χρήστης απαιτείται να αλλάξει τον κωδικό πρόσβασής του κατά την πρώτη σύνδεση",
|
||||
"rescan": "Εκ νέου σάρωση",
|
||||
"reset": "Επαναφορά",
|
||||
"reset_password": "Επαναφορά κωδικού πρόσβασης",
|
||||
"reset_people_visibility": "Επαναφορά προβολής ατόμων",
|
||||
@@ -1144,6 +1151,7 @@
|
||||
"searching_locales": "Αναζήτηση τοποθεσιών...",
|
||||
"second": "Δευτερόλεπτο",
|
||||
"see_all_people": "Προβολή όλων των ατόμων",
|
||||
"select": "Επιλογή",
|
||||
"select_album_cover": "Επιλέξτε εξώφυλλο άλμπουμ",
|
||||
"select_all": "Επιλογή όλων",
|
||||
"select_all_duplicates": "Επιλογή όλων των διπλότυπων",
|
||||
@@ -1352,6 +1360,7 @@
|
||||
"view_all": "Προβολή Όλων",
|
||||
"view_all_users": "Προβολή όλων των χρηστών",
|
||||
"view_in_timeline": "Προβολή στο χρονοδιάγραμμα",
|
||||
"view_link": "Προβολή σύνδεσμου",
|
||||
"view_links": "Προβολή συνδέσμων",
|
||||
"view_name": "Προβολή",
|
||||
"view_next_asset": "Προβολή επόμενου στοιχείου",
|
||||
@@ -1368,4 +1377,4 @@
|
||||
"yes": "Ναι",
|
||||
"you_dont_have_any_shared_links": "Δεν έχετε κοινόχρηστους συνδέσμους",
|
||||
"zoom_image": "Ζουμ Εικόνας"
|
||||
}
|
||||
}
|
||||
|
||||
10
i18n/en.json
10
i18n/en.json
@@ -65,8 +65,13 @@
|
||||
"forcing_refresh_library_files": "Forcing refresh of all library files",
|
||||
"image_format": "Format",
|
||||
"image_format_description": "WebP produces smaller files than JPEG, but is slower to encode.",
|
||||
"image_fullsize_enabled": "Enable full-size image generation",
|
||||
"image_fullsize_enabled_description": "Generate full-size image for non-web-friendly formats. When \"Prefer embedded preview\" is enabled, embedded previews are used directly without conversion. Does not affect web-friendly formats like JPEG.",
|
||||
"image_fullsize_quality_description": "Full-size image quality from 1-100. Higher is better, but produces larger files.",
|
||||
"image_fullsize_title": "Full-size Image Settings",
|
||||
"image_fullsize_description": "Full-size image with stripped metadata, used when zoomed in",
|
||||
"image_prefer_embedded_preview": "Prefer embedded preview",
|
||||
"image_prefer_embedded_preview_setting_description": "Use embedded previews in RAW photos as the input to image processing when available. This can produce more accurate colors for some images, but the quality of the preview is camera-dependent and the image may have more compression artifacts.",
|
||||
"image_prefer_embedded_preview_setting_description": "Use embedded previews in RAW photos as the input to image processing and when available. This can produce more accurate colors for some images, but the quality of the preview is camera-dependent and the image may have more compression artifacts.",
|
||||
"image_prefer_wide_gamut": "Prefer wide gamut",
|
||||
"image_prefer_wide_gamut_setting_description": "Use Display P3 for thumbnails. This better preserves the vibrance of images with wide colorspaces, but images may appear differently on old devices with an old browser version. sRGB images are kept as sRGB to avoid color shifts.",
|
||||
"image_preview_description": "Medium-size image with stripped metadata, used when viewing a single asset and for machine learning",
|
||||
@@ -859,6 +864,7 @@
|
||||
"loop_videos": "Loop videos",
|
||||
"loop_videos_description": "Enable to automatically loop a video in the detail viewer.",
|
||||
"main_branch_warning": "You’re using a development version; we strongly recommend using a release version!",
|
||||
"main_menu": "Main menu",
|
||||
"make": "Make",
|
||||
"manage_shared_links": "Manage shared links",
|
||||
"manage_sharing_with_partners": "Manage sharing with partners",
|
||||
@@ -1082,7 +1088,9 @@
|
||||
"remove_url": "Remove URL",
|
||||
"remove_user": "Remove user",
|
||||
"removed_api_key": "Removed API Key: {name}",
|
||||
"remove_memory": "Remove memory",
|
||||
"removed_memory": "Removed memory",
|
||||
"remove_photo_from_memory": "Remove photo from this memory",
|
||||
"removed_photo_from_memory": "Removed photo from memory",
|
||||
"removed_from_archive": "Removed from archive",
|
||||
"removed_from_favorites": "Removed from favorites",
|
||||
|
||||
@@ -1079,6 +1079,8 @@
|
||||
"remove_from_album": "Eliminar del álbum",
|
||||
"remove_from_favorites": "Quitar de favoritos",
|
||||
"remove_from_shared_link": "Eliminar desde enlace compartido",
|
||||
"remove_memory": "Quitar memoria",
|
||||
"remove_photo_from_memory": "Quitar foto de esta memoria",
|
||||
"remove_url": "Eliminar URL",
|
||||
"remove_user": "Eliminar usuario",
|
||||
"removed_api_key": "Clave API eliminada: {name}",
|
||||
@@ -1149,6 +1151,7 @@
|
||||
"searching_locales": "Buscando sitios...",
|
||||
"second": "Segundo",
|
||||
"see_all_people": "Ver todas las personas",
|
||||
"select": "Selecciona",
|
||||
"select_album_cover": "Seleccionar portada del álbum",
|
||||
"select_all": "Seleccionar todo",
|
||||
"select_all_duplicates": "Seleccionar todos los duplicados",
|
||||
@@ -1375,4 +1378,4 @@
|
||||
"yes": "Sí",
|
||||
"you_dont_have_any_shared_links": "No tienes ningún enlace compartido",
|
||||
"zoom_image": "Acercar Imagen"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1079,6 +1079,8 @@
|
||||
"remove_from_album": "Eemalda albumist",
|
||||
"remove_from_favorites": "Eemalda lemmikutest",
|
||||
"remove_from_shared_link": "Eemalda jagatud lingist",
|
||||
"remove_memory": "Eemalda mälestus",
|
||||
"remove_photo_from_memory": "Eemalda foto sellest mälestusest",
|
||||
"remove_url": "Eemalda URL",
|
||||
"remove_user": "Eemalda kasutaja",
|
||||
"removed_api_key": "API võti eemaldatud: {name}",
|
||||
@@ -1149,6 +1151,7 @@
|
||||
"searching_locales": "Lokaatide otsimine...",
|
||||
"second": "Sekund",
|
||||
"see_all_people": "Vaata kõiki isikuid",
|
||||
"select": "Vali",
|
||||
"select_album_cover": "Vali albumi kaanepilt",
|
||||
"select_all": "Vali kõik",
|
||||
"select_all_duplicates": "Vali kõik duplikaadid",
|
||||
@@ -1375,4 +1378,4 @@
|
||||
"yes": "Jah",
|
||||
"you_dont_have_any_shared_links": "Sul pole ühtegi jagatud linki",
|
||||
"zoom_image": "Suumi pilti"
|
||||
}
|
||||
}
|
||||
|
||||
1
i18n/eu.json
Normal file
1
i18n/eu.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -987,6 +987,7 @@
|
||||
"permanently_deleted_asset": "Média supprimé définitivement",
|
||||
"permanently_deleted_assets_count": "{count, plural, one {# média définitivement supprimé} other {# médias définitivement supprimés}}",
|
||||
"person": "Personne",
|
||||
"person_birthdate": "Né(e) le {date}",
|
||||
"person_hidden": "{name}{hidden, select, true { (caché)} other {}}",
|
||||
"photo_shared_all_users": "Il semble que vous ayez partagé vos photos avec tous les utilisateurs ou que vous n'ayez aucun utilisateur avec qui les partager.",
|
||||
"photos": "Photos",
|
||||
@@ -1078,6 +1079,8 @@
|
||||
"remove_from_album": "Supprimer de l'album",
|
||||
"remove_from_favorites": "Supprimer des favoris",
|
||||
"remove_from_shared_link": "Supprimer des liens partagés",
|
||||
"remove_memory": "Supprimer le souvenir",
|
||||
"remove_photo_from_memory": "Supprimer la photo de ce souvenir",
|
||||
"remove_url": "Supprimer l'URL",
|
||||
"remove_user": "Supprimer l'utilisateur",
|
||||
"removed_api_key": "Clé API supprimée : {name}",
|
||||
@@ -1148,6 +1151,7 @@
|
||||
"searching_locales": "Recherche des paramètres régionaux...",
|
||||
"second": "Seconde",
|
||||
"see_all_people": "Voir toutes les personnes",
|
||||
"select": "Sélectionner",
|
||||
"select_album_cover": "Sélectionner la couverture d'album",
|
||||
"select_all": "Tout sélectionner",
|
||||
"select_all_duplicates": "Sélectionner tous les doublons",
|
||||
@@ -1374,4 +1378,4 @@
|
||||
"yes": "Oui",
|
||||
"you_dont_have_any_shared_links": "Vous n'avez aucun lien partagé",
|
||||
"zoom_image": "Zoomer"
|
||||
}
|
||||
}
|
||||
|
||||
1
i18n/gl.json
Normal file
1
i18n/gl.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -987,6 +987,7 @@
|
||||
"permanently_deleted_asset": "נכס נמחק לצמיתות",
|
||||
"permanently_deleted_assets_count": "{count, plural, one {נכס # נמחק} other {# נכסים נמחקו}} לצמיתות",
|
||||
"person": "אדם",
|
||||
"person_birthdate": "נולד בתאריך {date}",
|
||||
"person_hidden": "{name}{hidden, select, true { (מוסתר)} other {}}",
|
||||
"photo_shared_all_users": "נראה שאת/ה שיתפת את התמונות שלך עם כל המשתמשים או שאין לך אף משתמש לשתף איתו.",
|
||||
"photos": "תמונות",
|
||||
@@ -1078,6 +1079,8 @@
|
||||
"remove_from_album": "הסר מאלבום",
|
||||
"remove_from_favorites": "הסר מהמועדפים",
|
||||
"remove_from_shared_link": "הסר מקישור משותף",
|
||||
"remove_memory": "הסר זיכרון",
|
||||
"remove_photo_from_memory": "הסר תמונה מזיכרון זה",
|
||||
"remove_url": "הסר URL",
|
||||
"remove_user": "הסר משתמש",
|
||||
"removed_api_key": "מפתח API הוסר: {name}",
|
||||
@@ -1148,6 +1151,7 @@
|
||||
"searching_locales": "מחפש אזורי שפה...",
|
||||
"second": "שנייה",
|
||||
"see_all_people": "ראה את כל האנשים",
|
||||
"select": "בחר",
|
||||
"select_album_cover": "בחר עטיפת אלבום",
|
||||
"select_all": "בחר הכל",
|
||||
"select_all_duplicates": "בחר את כל הכפילויות",
|
||||
@@ -1374,4 +1378,4 @@
|
||||
"yes": "כן",
|
||||
"you_dont_have_any_shared_links": "אין לך קישורים משותפים",
|
||||
"zoom_image": "זום לתמונה"
|
||||
}
|
||||
}
|
||||
|
||||
13
i18n/hi.json
13
i18n/hi.json
@@ -29,11 +29,17 @@
|
||||
"added_to_favorites_count": "पसंदीदा में {count, number} जोड़ा गया",
|
||||
"admin": {
|
||||
"add_exclusion_pattern_description": "बहिष्करण पैटर्न जोड़ें. *, **, और ? का उपयोग करके ग्लोबिंग करना समर्थित है। \"Raw\" नामक किसी भी निर्देशिका की सभी फ़ाइलों को अनदेखा करने के लिए, \"**/Raw/**\" का उपयोग करें। \".tif\" से समाप्त होने वाली सभी फ़ाइलों को अनदेखा करने के लिए, \"**/*.tif\" का उपयोग करें। किसी पूर्ण पथ को अनदेखा करने के लिए, \"/path/to/ignore/**\" का उपयोग करें।",
|
||||
"asset_offline_description": "यह बाहरी लाइब्रेरी एसेट अब डिस्क पर मौजूद नहीं है और इसे ट्रैश में डाल दिया गया है। यदि फ़ाइल को लाइब्रेरी के भीतर कहीं ले जाया गया था, तो नई संबंधित एसेट के लिए अपनी टाइमलाइन देखें। इस एसेट को वापस पाने के लिए, कृपया सुनिश्चित करें कि नीचे दिए गए फ़ाइल पथ को इम्मिच द्वारा एक्सेस किया जा सकता है और फिर लाइब्रेरी को स्कैन करें।",
|
||||
"authentication_settings": "प्रमाणीकरण सेटिंग्स",
|
||||
"authentication_settings_description": "पासवर्ड, OAuth और अन्य प्रमाणीकरण सेटिंग्स प्रबंधित करें",
|
||||
"authentication_settings_disable_all": "क्या आप वाकई सभी लॉगिन विधियों को अक्षम करना चाहते हैं? लॉगिन पूरी तरह से अक्षम कर दिया जाएगा।",
|
||||
"authentication_settings_reenable": "पुनः सक्षम करने के लिए, <link>Server Command</link> का प्रयोग करे।",
|
||||
"background_task_job": "पृष्ठभूमि कार्य",
|
||||
"backup_database": "बैकअप डाटाबेस",
|
||||
"backup_database_enable_description": "बैकअप डेटाबेस सक्रिय करें",
|
||||
"backup_keep_last_amount": "पूर्व बैकअप क्षमता",
|
||||
"backup_settings": "बैकअप सेटिंग्स",
|
||||
"backup_settings_description": "डेटाबेस बैकअप सेटिंग्स प्रबंधन",
|
||||
"check_all": "सभी चेक करें",
|
||||
"cleared_jobs": "{job}: के लिए कार्य साफ़ कर दिए गए",
|
||||
"config_set_by_file": "Config वर्तमान में एक config फ़ाइल द्वारा सेट किया गया है",
|
||||
@@ -42,6 +48,9 @@
|
||||
"confirm_email_below": "पुष्टि करने के लिए नीचे \"{email}\" टाइप करें",
|
||||
"confirm_reprocess_all_faces": "क्या आप वाकई सभी चेहरों को दोबारा संसाधित करना चाहते हैं? इससे नामित लोग भी साफ हो जायेंगे।",
|
||||
"confirm_user_password_reset": "क्या आप वाकई {user} का पासवर्ड रीसेट करना चाहते हैं?",
|
||||
"create_job": "जॉब बनाएँ",
|
||||
"cron_expression": "क्रॉन अभिव्यक्ति",
|
||||
"cron_expression_description": "क्रॉन प्रारूप का उपयोग करके स्कैनिंग अंतराल सेट करें। अधिक जानकारी के लिए कृपया <link>क्रोनटैब गुरु</link> देखें",
|
||||
"disable_login": "लॉगिन अक्षम करें",
|
||||
"duplicate_detection_job_description": "समान छवियों का पता लगाने के लिए संपत्तियों पर मशीन लर्निंग चलाएं। यह कार्यक्षमता स्मार्ट खोज पर निर्भर करती है",
|
||||
"exclusion_pattern_description": "Exclusion पैटर्न आपको अपनी लाइब्रेरी को स्कैन करते समय फ़ाइलों और फ़ोल्डरों को अनदेखा करने देता है। यह उपयोगी है यदि आपके पास ऐसे फ़ोल्डर हैं जिनमें ऐसी फ़ाइलें हैं जिन्हें आप आयात नहीं करना चाहते हैं, जैसे RAW फ़ाइलें।",
|
||||
@@ -53,11 +62,14 @@
|
||||
"failed_job_command": "कार्य {job} के लिए आदेश {command} विफल",
|
||||
"force_delete_user_warning": "चेतावनी: इससे उपयोगकर्ता और सारा डेटा तुरंत हट जाएगा। इसे पूर्ववत नहीं किया जा सकता और फ़ाइलें पुनर्प्राप्त नहीं की जा सकतीं।",
|
||||
"forcing_refresh_library_files": "सभी लाइब्रेरी फ़ाइलों को जबरन सामयिक करें",
|
||||
"image_format": "प्रारूप",
|
||||
"image_format_description": "वेबपी, जेपीईजी की तुलना में छोटी फ़ाइलें बनाता है, लेकिन एनकोड करने में धीमा है।",
|
||||
"image_prefer_embedded_preview": "एम्बेडेड पूर्वावलोकन को प्राथमिकता दें",
|
||||
"image_prefer_embedded_preview_setting_description": "जब उपलब्ध हो तो RAW फ़ोटो में एम्बेडेड पूर्वावलोकन का उपयोग इमेज प्रोसेसिंग के इनपुट के रूप में करें। यह कुछ छवियों के लिए अधिक सटीक रंग उत्पन्न कर सकता है, लेकिन पूर्वावलोकन की गुणवत्ता कैमरे पर निर्भर करती है और छवि में अधिक संपीड़न कलाकृतियाँ हो सकती हैं।",
|
||||
"image_prefer_wide_gamut": "विस्तृत सरगम को प्राथमिकता दें",
|
||||
"image_prefer_wide_gamut_setting_description": "थंबनेल के लिए डिस्प्ले P3 का उपयोग करें। यह विस्तृत कलरस्पेस वाली छवियों की जीवंतता को बेहतर ढंग से संरक्षित करता है, लेकिन पुराने ब्राउज़र संस्करण वाले पुराने डिवाइस पर छवियां अलग-अलग दिखाई दे सकती हैं। रंग परिवर्तन से बचने के लिए sRGB छवियों को sRGB के रूप में रखा जाता है।",
|
||||
"image_preview_description": "मेटाडेटा रहित मध्यम आकार की छवि, जिसका उपयोग एकल संपत्ति देखने और मशीन लर्निंग के लिए होता है",
|
||||
"image_preview_title": "पूर्वदर्शन सेटिंग्स",
|
||||
"image_quality": "गुणवत्ता",
|
||||
"image_settings": "छवि सेटिंग्स",
|
||||
"image_settings_description": "उत्पन्न छवियों की गुणवत्ता और रिज़ॉल्यूशन प्रबंधित करें",
|
||||
@@ -1093,6 +1105,7 @@
|
||||
"view_album": "एल्बम देखें",
|
||||
"view_all": "सभी को देखें",
|
||||
"view_all_users": "सभी उपयोगकर्ताओं को देखें",
|
||||
"view_in_timeline": "टाइमलाइन में देखें",
|
||||
"view_links": "लिंक देखें",
|
||||
"view_next_asset": "अगली संपत्ति देखें",
|
||||
"view_previous_asset": "पिछली संपत्ति देखें",
|
||||
|
||||
12
i18n/hu.json
12
i18n/hu.json
@@ -35,7 +35,7 @@
|
||||
"authentication_settings_disable_all": "Biztosan letiltod az összes bejelentkezési módot? A bejelentkezés teljesen le lesz tiltva.",
|
||||
"authentication_settings_reenable": "Az újbóli engedélyezéshez használj egy<link>Szerver Parancsot</link>.",
|
||||
"background_task_job": "Háttérfeladatok",
|
||||
"backup_database": "Tartalék Adatbázis",
|
||||
"backup_database": "Adatbázis Biztonsági Mentése",
|
||||
"backup_database_enable_description": "Adatbázis biztonsági mentések engedélyezése",
|
||||
"backup_keep_last_amount": "Megőrizendő korábbi biztonsági mentések száma",
|
||||
"backup_settings": "Biztonsági mentés beállításai",
|
||||
@@ -149,7 +149,7 @@
|
||||
"map_settings_description": "Térkép beállítások kezelése",
|
||||
"map_style_description": "Egy style.json térképtémára mutató URL cím",
|
||||
"memory_cleanup_job": "Memória takarítás",
|
||||
"memory_generate_job": "Emlék létrehozása",
|
||||
"memory_generate_job": "Emlék generálálsa",
|
||||
"metadata_extraction_job": "Metaadatok kinyerése",
|
||||
"metadata_extraction_job_description": "Metaadat információk (pl. GPS, arcok és felbontás) kinyerése minden elemből",
|
||||
"metadata_faces_import_setting": "Arc importálás engedélyezése",
|
||||
@@ -243,7 +243,7 @@
|
||||
"storage_template_hash_verification_enabled_description": "Engedélyezi a hash-érték ellenőrzést - csak akkor kapcsold ki, ha tisztában vagy a következményekkel",
|
||||
"storage_template_migration": "Tárhely sablon migrálása",
|
||||
"storage_template_migration_description": "A jelenlegi <link>{template}</link> alkalmazása a már feltöltött elemekre",
|
||||
"storage_template_migration_info": "A megváltozott sablon csak az újonnan feltöltött elemekre vonatkozik. A korábbi elemek visszamenőleges áthelyezéséhez ezt futtasd: <link>{job}</link>.",
|
||||
"storage_template_migration_info": "A sablon az összes kiterjesztést kisbetűssé alakítja át. A megváltozott sablon csak az újonnan feltöltött elemekre vonatkozik. A korábbi elemek visszamenőleges áthelyezéséhez ezt futtasd: <link>{job}</link>.",
|
||||
"storage_template_migration_job": "Tárhely Sablon Migrációja",
|
||||
"storage_template_more_details": "További részletekért erről a funkcióról lásd a <template-link>Tárhely Sablon</template-link> és annak <implications-link>következményeit</implications-link> a dokumentációban",
|
||||
"storage_template_onboarding_description": "Ha ez a funkció engedélyezve van, akkor a fájlokat automatikusan az egyéni sablon alapján rendszerezi el. Stabilitási problémák miatt a funkció alapértelmezés szerint ki van kapcsolva. További információkért lásd a <link>dokumentációt</link>.",
|
||||
@@ -987,6 +987,7 @@
|
||||
"permanently_deleted_asset": "Elem véglegesen törölve",
|
||||
"permanently_deleted_assets_count": "{count, plural, other {# elem}} véglegesen törölve",
|
||||
"person": "Személy",
|
||||
"person_birthdate": "Született: {date}",
|
||||
"person_hidden": "{name}{hidden, select, true { (rejtett)} other {}}",
|
||||
"photo_shared_all_users": "Úgy tűnik, hogy már mindenkivel megosztottad a fényképeidet, vagy nincs senki, akivel meg tudnád osztani.",
|
||||
"photos": "Fényképek",
|
||||
@@ -1078,6 +1079,8 @@
|
||||
"remove_from_album": "Eltávolítás az albumból",
|
||||
"remove_from_favorites": "Eltávolítás a kedvencekből",
|
||||
"remove_from_shared_link": "Eltávolítás a megosztott linkből",
|
||||
"remove_memory": "Emlék eltávolítása",
|
||||
"remove_photo_from_memory": "Kép eltávolítása az emlékből",
|
||||
"remove_url": "URL eltávolítása",
|
||||
"remove_user": "Felhasználó eltávolítása",
|
||||
"removed_api_key": "API Kulcs eltávolítva: {name}",
|
||||
@@ -1148,6 +1151,7 @@
|
||||
"searching_locales": "Helyszín keresése...",
|
||||
"second": "Másodperc",
|
||||
"see_all_people": "Minden személy megtekintése",
|
||||
"select": "Kiválsztás",
|
||||
"select_album_cover": "Albumborító kiválasztása",
|
||||
"select_all": "Összes kijelölése",
|
||||
"select_all_duplicates": "Minden duplikátum kijelölése",
|
||||
@@ -1374,4 +1378,4 @@
|
||||
"yes": "Igen",
|
||||
"you_dont_have_any_shared_links": "Nincsenek megosztott linkjeid",
|
||||
"zoom_image": "Kép Nagyítása"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -987,6 +987,7 @@
|
||||
"permanently_deleted_asset": "Aset dihapus secara permanen",
|
||||
"permanently_deleted_assets_count": "{count, plural, one {# aset} other {# aset}} dihapus secara permanen",
|
||||
"person": "Orang",
|
||||
"person_birthdate": "Lahir pada {date}",
|
||||
"person_hidden": "{name}{hidden, select, true { (tersembunyi)} other {}}",
|
||||
"photo_shared_all_users": "Sepertinya Anda membagikan foto Anda dengan semua pengguna atau Anda tidak memiliki pengguna siapa pun untuk dibagikan.",
|
||||
"photos": "Foto",
|
||||
@@ -1078,6 +1079,8 @@
|
||||
"remove_from_album": "Hapus dari album",
|
||||
"remove_from_favorites": "Hapus dari favorit",
|
||||
"remove_from_shared_link": "Hapus dari tautan terbagi",
|
||||
"remove_memory": "Hapus kenangan",
|
||||
"remove_photo_from_memory": "Hapus foto dari kenangan ini",
|
||||
"remove_url": "Hapus URL",
|
||||
"remove_user": "Keluarkan pengguna",
|
||||
"removed_api_key": "Kunci API Dihapus: {name}",
|
||||
@@ -1148,6 +1151,7 @@
|
||||
"searching_locales": "Mencari lokal...",
|
||||
"second": "Detik",
|
||||
"see_all_people": "Lihat semua orang",
|
||||
"select": "Pilih",
|
||||
"select_album_cover": "Pilih kover album",
|
||||
"select_all": "Pilih semua",
|
||||
"select_all_duplicates": "Pilih semua duplikat",
|
||||
@@ -1374,4 +1378,4 @@
|
||||
"yes": "Ya",
|
||||
"you_dont_have_any_shared_links": "Anda tidak memiliki tautan terbagi",
|
||||
"zoom_image": "Perbesar Gambar"
|
||||
}
|
||||
}
|
||||
|
||||
12
i18n/it.json
12
i18n/it.json
@@ -886,7 +886,7 @@
|
||||
"merged_people_count": "{count, plural, one {Unita # persona} other {Unite # persone}}",
|
||||
"minimize": "Minimizza",
|
||||
"minute": "Minuto",
|
||||
"missing": "Mancante",
|
||||
"missing": "Mancanti",
|
||||
"model": "Modello",
|
||||
"month": "Mese",
|
||||
"more": "Di più",
|
||||
@@ -987,6 +987,7 @@
|
||||
"permanently_deleted_asset": "Asset eliminato definitivamente",
|
||||
"permanently_deleted_assets_count": "Cancellati {count, plural, one {# asset} other {# assets}} definitivamente",
|
||||
"person": "Persona",
|
||||
"person_birthdate": "Nato il {date}",
|
||||
"person_hidden": "{name}{hidden, select, true { (nascosto)} other {}}",
|
||||
"photo_shared_all_users": "Sembra che tu abbia condiviso le foto con tutti gli utenti, oppure che non ci siano utenti con i quali condividerle.",
|
||||
"photos": "Foto",
|
||||
@@ -997,7 +998,7 @@
|
||||
"place": "Posizione",
|
||||
"places": "Luoghi",
|
||||
"places_count": "{count, plural, one {{count, number} Luogo} other {{count, number} Places}}",
|
||||
"play": "Avvia",
|
||||
"play": "Riproduci",
|
||||
"play_memories": "Avvia ricordi",
|
||||
"play_motion_photo": "Avvia Foto in movimento",
|
||||
"play_or_pause_video": "Avvia o metti in pausa il video",
|
||||
@@ -1078,6 +1079,8 @@
|
||||
"remove_from_album": "Rimuovere dall'album",
|
||||
"remove_from_favorites": "Rimuovi dai preferiti",
|
||||
"remove_from_shared_link": "Rimuovi dal link condiviso",
|
||||
"remove_memory": "Rimuovi ricordo",
|
||||
"remove_photo_from_memory": "Rimuovi foto da questo ricordo",
|
||||
"remove_url": "Rimuovi URL",
|
||||
"remove_user": "Rimuovi utente",
|
||||
"removed_api_key": "Rimossa chiave API: {name}",
|
||||
@@ -1148,6 +1151,7 @@
|
||||
"searching_locales": "Cerca localizzazioni...",
|
||||
"second": "Secondo",
|
||||
"see_all_people": "Vedi tutte le persone",
|
||||
"select": "Seleziona",
|
||||
"select_album_cover": "Seleziona copertina album",
|
||||
"select_all": "Seleziona tutto",
|
||||
"select_all_duplicates": "Seleziona tutti i duplicati",
|
||||
@@ -1238,7 +1242,7 @@
|
||||
"stack_selected_photos": "Impila foto selezionate",
|
||||
"stacked_assets_count": "{count, plural, one {Raggruppato # asset} other {Raggruppati # asset}}",
|
||||
"stacktrace": "Traccia dell'errore",
|
||||
"start": "Inizio",
|
||||
"start": "Avvia",
|
||||
"start_date": "Data di inizio",
|
||||
"state": "Provincia",
|
||||
"status": "Stato",
|
||||
@@ -1374,4 +1378,4 @@
|
||||
"yes": "Si",
|
||||
"you_dont_have_any_shared_links": "Non è presente alcun link condiviso",
|
||||
"zoom_image": "Ingrandisci immagine"
|
||||
}
|
||||
}
|
||||
|
||||
145
i18n/ja.json
145
i18n/ja.json
@@ -7,7 +7,7 @@
|
||||
"actions": "アクション",
|
||||
"active": "アクティブ",
|
||||
"activity": "アクティビティ",
|
||||
"activity_changed": "アクティビティは{enabled, select, true {有効化} other {無効化}}されました",
|
||||
"activity_changed": "アクティビティは{enabled, select, true {有効} other {無効}}になりました",
|
||||
"add": "追加",
|
||||
"add_a_description": "説明を追加",
|
||||
"add_a_location": "場所を追加",
|
||||
@@ -20,20 +20,28 @@
|
||||
"add_partner": "パートナーを追加",
|
||||
"add_path": "パスを追加",
|
||||
"add_photos": "写真を追加",
|
||||
"add_to": "追加先...",
|
||||
"add_to": "追加先…",
|
||||
"add_to_album": "アルバムに追加",
|
||||
"add_to_shared_album": "共有アルバムに追加",
|
||||
"add_url": "URLを追加",
|
||||
"added_to_archive": "アーカイブに追加済",
|
||||
"added_to_favorites": "お気に入りに追加済",
|
||||
"added_to_favorites_count": "{count, number} 枚の画像をお気に入りに追加済",
|
||||
"admin": {
|
||||
"add_exclusion_pattern_description": "除外パターンを追加します。ワイルドカード「*」「**」「?」を使用できます。すべてのディレクトリで「Raw」と名前が付いたファイルを無視するには、「**/Raw/**」を使用します。また、「.tif」で終わるファイルをすべて無視するには、「**/*.tif」を使用します。さらに、絶対パスを無視するには「/path/to/ignore/**」を使用します。",
|
||||
"asset_offline_description": "この外部ライブラリのアセットはディスク上に見つからなくなってゴミ箱に移動されました。ファイルがライブラリの中で移動された場合はタイムラインで新しい対応するアセットを確認してください。このアセットを復元するには以下のファイルパスがImmichからアクセスできるか確認してライブラリをスキャンしてください。",
|
||||
"authentication_settings": "認証設定",
|
||||
"authentication_settings_description": "認証設定の管理(パスワード、OAuth、その他)",
|
||||
"authentication_settings_disable_all": "本当に全てのログイン方法を無効にしますか? ログインは完全に無効になります。",
|
||||
"authentication_settings_reenable": "再び有効にするには、<link>サーバーコマンド</link>を使用してください。",
|
||||
"background_task_job": "バックグラウンドタスク",
|
||||
"backup_database": "データベースのバックアップ",
|
||||
"backup_database_enable_description": "データベースのバックアップを有効にする",
|
||||
"backup_keep_last_amount": "過去のバックアップの保持数",
|
||||
"backup_settings": "バックアップ設定",
|
||||
"backup_settings_description": "データベースのバックアップ設定の管理",
|
||||
"check_all": "すべてを選択",
|
||||
"cleanup": "クリーンアップ",
|
||||
"cleared_jobs": "{job}のジョブをクリアしました",
|
||||
"config_set_by_file": "設定は現在 Config File で設定されている",
|
||||
"confirm_delete_library": "本当に {library} を削除しますか?",
|
||||
@@ -41,6 +49,10 @@
|
||||
"confirm_email_below": "確認のため、以下に \"{email}\" と入力してください",
|
||||
"confirm_reprocess_all_faces": "本当にすべての顔を再処理しますか? これにより名前が付けられた人物も消去されます。",
|
||||
"confirm_user_password_reset": "本当に {user} のパスワードをリセットしますか?",
|
||||
"create_job": "ジョブの作成",
|
||||
"cron_expression": "Cron式",
|
||||
"cron_expression_description": "cronのフォーマットを使ってスキャン間隔を設定します。詳しくは<link>Crontab Guru</link>などを参照してください",
|
||||
"cron_expression_presets": "Cron式のプリセット",
|
||||
"disable_login": "ログインを無効にする",
|
||||
"duplicate_detection_job_description": "機械学習を用いて類似画像の検出を行います。(スマートサーチに依存)",
|
||||
"exclusion_pattern_description": "除外パターンを使用すると、ライブラリをスキャンする際にファイルやフォルダを無視することができます。RAWファイルなど、インポートしたくないファイルを含むフォルダがある場合に便利です。",
|
||||
@@ -52,15 +64,25 @@
|
||||
"failed_job_command": "ジョブ {job}のコマンド {command}が失敗しました",
|
||||
"force_delete_user_warning": "警告:この操作を行うと、ユーザーとすべてのアセットが直ちに削除されます。これは元に戻せず、ファイルも復元できません。",
|
||||
"forcing_refresh_library_files": "すべてのライブラリファイルを強制更新",
|
||||
"image_format": "フォーマット",
|
||||
"image_format_description": "WebPはJPEGよりもファイルサイズが小さいですが、エンコードに時間がかかります。",
|
||||
"image_prefer_embedded_preview": "埋め込みプレビューを優先",
|
||||
"image_prefer_embedded_preview_setting_description": "RAW写真の埋め込みプレビューが利用可能な場合に画像処理の入力として使用します。これにより、いくつかの画像でより正確な色を得ることができますが、プレビューの品質はカメラによって異なり、画像により多くの圧縮アーティファクトが含まれる場合があります。",
|
||||
"image_prefer_wide_gamut": "広色域に対応させる",
|
||||
"image_prefer_wide_gamut_setting_description": "サムネイルにはDisplay P3を使用します。これにより、広色域の画像の鮮やかさをよりよく保つことができますが、古いデバイスや古いブラウザバージョンでは画像が異なって見える場合があります。sRGBの画像は、色の変化を避けるためにsRGBのままにします。",
|
||||
"image_preview_description": "単一のアセットを表示する時や機械学習に使われるメタデータを取り除いた中サイズの画像",
|
||||
"image_preview_quality_description": "プレビューの画質は1〜100で設定できます。値が高いほど品質は良くなりますがファイルサイズが大きくなってアプリの応答性が低下するおそれがあります。低い値を設定すると機械学習の品質に影響を与えるおそれがあります。",
|
||||
"image_preview_title": "プレビュー設定",
|
||||
"image_quality": "品質",
|
||||
"image_resolution": "解像度",
|
||||
"image_resolution_description": "解像度を上げるとより精細に保存できますが、エンコードに時間がかかりファイルサイズが大きくなってアプリの応答性が低下するおそれがあります。",
|
||||
"image_settings": "画像設定",
|
||||
"image_settings_description": "生成される画像の品質と解像度の設定",
|
||||
"image_thumbnail_description": "メインのタイムラインのような写真グループで表示する際に使われるメタデータを取り除いた小さなサムネイル",
|
||||
"image_thumbnail_quality_description": "サムネイルの画質を1〜100の間で設定できます。値が大きいほど良い品質ですがファイルサイズが大きくなりアプリの応答性が低下します。",
|
||||
"image_thumbnail_title": "サムネイル設定",
|
||||
"job_concurrency": "{job} の同時実行数",
|
||||
"job_created": "ジョブを作成しました",
|
||||
"job_not_concurrency_safe": "このジョブは安全に同時実行できません。",
|
||||
"job_settings": "ジョブ設定",
|
||||
"job_settings_description": "ジョブの同時実行を管理します",
|
||||
@@ -75,7 +97,7 @@
|
||||
"library_scanning_enable_description": "ライブラリ定期スキャンの有効化",
|
||||
"library_settings": "外部ライブラリ",
|
||||
"library_settings_description": "外部ライブラリ設定を管理します",
|
||||
"library_tasks_description": "ライブラリのタスクを実行する",
|
||||
"library_tasks_description": "アセットが追加または変更された外部ライブラリをスキャンする",
|
||||
"library_watching_enable_description": "外部ライブラリのファイル変更を監視",
|
||||
"library_watching_settings": "ライブラリ監視(実験的)",
|
||||
"library_watching_settings_description": "変更されたファイルを自動的に監視",
|
||||
@@ -110,7 +132,7 @@
|
||||
"machine_learning_smart_search_description": "CLIP埋め込みを使用して画像を意味的に検索します",
|
||||
"machine_learning_smart_search_enabled": "スマートサーチを有効にします",
|
||||
"machine_learning_smart_search_enabled_description": "無効にすると、画像はスマートサーチ用にエンコードされません。",
|
||||
"machine_learning_url_description": "機械学習サーバーのURL",
|
||||
"machine_learning_url_description": "機械学習サーバーのURL。複数のURLが設定された場合は1つずつサーバーが正常に応答するまで接続を試みます。応答のないサーバーはオンラインになるまで一時的に無視されます。",
|
||||
"manage_concurrency": "同時実行数の管理",
|
||||
"manage_log_settings": "ログ設定を管理します",
|
||||
"map_dark_style": "ダークモード",
|
||||
@@ -126,8 +148,14 @@
|
||||
"map_settings": "地図",
|
||||
"map_settings_description": "地図設定",
|
||||
"map_style_description": "マップテーマ(style.json)の参照先URL",
|
||||
"memory_cleanup_job": "メモリーのクリーンアップ",
|
||||
"memory_generate_job": "メモリーの生成",
|
||||
"metadata_extraction_job": "メタデータの展開",
|
||||
"metadata_extraction_job_description": "GPSや解像度などのメタデータを各アセットから抽出",
|
||||
"metadata_faces_import_setting": "顔のインポートを有効にする",
|
||||
"metadata_faces_import_setting_description": "画像のEXIFデータとサイドカーファイルから顔をインポート",
|
||||
"metadata_settings": "メタデータ設定",
|
||||
"metadata_settings_description": "メタデータの設定を管理します",
|
||||
"migration_job": "マイグレーション",
|
||||
"migration_job_description": "アセットおよび顔のサムネイルを最新のフォルダ構造に移行します",
|
||||
"no_paths_added": "パスが追加されていません",
|
||||
@@ -182,6 +210,7 @@
|
||||
"password_settings": "パスワード ログイン",
|
||||
"password_settings_description": "パスワード ログイン設定を管理します",
|
||||
"paths_validated_successfully": "すべてのパスが正常に検証されました",
|
||||
"person_cleanup_job": "人物のクリーンアップ",
|
||||
"quota_size_gib": "割り当て容量 (GiB)",
|
||||
"refreshing_all_libraries": "すべてのライブラリを更新",
|
||||
"registration": "管理者登録",
|
||||
@@ -192,9 +221,13 @@
|
||||
"require_password_change_on_login": "初回ログイン時にパスワード変更を要求する",
|
||||
"reset_settings_to_default": "設定をデフォルトにリセットします",
|
||||
"reset_settings_to_recent_saved": "前回の設定値に戻す",
|
||||
"scanning_library": "ライブラリのスキャン",
|
||||
"search_jobs": "ジョブを検索…",
|
||||
"send_welcome_email": "ウェルカム メール を送信します",
|
||||
"server_external_domain_settings": "外部ドメイン",
|
||||
"server_external_domain_settings_description": "公開共有リンク用のドメイン( http(s):// を含める)",
|
||||
"server_public_users": "公開ユーザー",
|
||||
"server_public_users_description": "共有アルバムにユーザーを追加するとすべてのユーザー (名前とメールアドレス) がリスト化されます。無効にするとユーザーリストは管理者のみ利用可能になります。",
|
||||
"server_settings": "サーバー設定",
|
||||
"server_settings_description": "サーバー設定を管理します",
|
||||
"server_welcome_message": "ウェルカム メッセージ",
|
||||
@@ -210,7 +243,7 @@
|
||||
"storage_template_hash_verification_enabled_description": "ハッシュ検証の有効化(よくわからなければ、有効にしてください)",
|
||||
"storage_template_migration": "ストレージ テンプレート の移行",
|
||||
"storage_template_migration_description": "現在の<link>{template}</link>を以前にアップロードされたアセットに適用",
|
||||
"storage_template_migration_info": "テンプレートの変更は新しいアセットにのみ適用されます。 以前にアップロードしたアセットにテンプレートを遡って適用するには、<link>{job}</link> を実行してください。",
|
||||
"storage_template_migration_info": "ストレージテンプレートは全ての拡張子を小文字に変換します。テンプレートの変更は新しいアセットにのみ適用されます。 以前にアップロードしたアセットにテンプレートを遡って適用するには、<link>{job}</link> を実行してください。",
|
||||
"storage_template_migration_job": "ストレージテンプレート移行ジョブ",
|
||||
"storage_template_more_details": "この機能の詳細については、<template-link>ストレージテンプレート</template-link>とその<implications-link>影響</implications-link>を参照してください",
|
||||
"storage_template_onboarding_description": "この機能を有効にすると、ユーザー定義のテンプレートに基づいてファイルが自動で整理されます。 安定性の問題のため、この機能はデフォルトでオフになっています。 詳細については、<link>ドキュメント</link>を参照してください。",
|
||||
@@ -219,6 +252,17 @@
|
||||
"storage_template_settings_description": "アップロードしたアセットのフォルダ構造とファイル名を管理します",
|
||||
"storage_template_user_label": "<code>{label}</code>はユーザーのストレージラベルです",
|
||||
"system_settings": "システム設定",
|
||||
"tag_cleanup_job": "タグのクリーンアップ",
|
||||
"template_email_available_tags": "テンプレートで次の変数を使えます: {tags}",
|
||||
"template_email_if_empty": "テンプレートが空の場合はデフォルトのメールが使われます。",
|
||||
"template_email_invite_album": "アルバム招待のテンプレート",
|
||||
"template_email_preview": "プレビュー",
|
||||
"template_email_settings": "メールテンプレート",
|
||||
"template_email_settings_description": "通知のメールテンプレートのカスタムを管理します",
|
||||
"template_email_update_album": "アルバム更新のテンプレート",
|
||||
"template_email_welcome": "ウェルカムメールのテンプレート",
|
||||
"template_settings": "通知テンプレート",
|
||||
"template_settings_description": "通知のためのカスタムテンプレートを管理します。",
|
||||
"theme_custom_css_settings": "カスタムCSS",
|
||||
"theme_custom_css_settings_description": "CSS を使って Immich のデザインをカスタマイズできます。",
|
||||
"theme_settings": "テーマ設定",
|
||||
@@ -248,6 +292,8 @@
|
||||
"transcoding_constant_rate_factor": "CRF値 (-crf)",
|
||||
"transcoding_constant_rate_factor_description": "出力動画の品質レベル。H.264の場合は23、HEVCの場合は28、VP9の場合は31、AV1の場合は35が一般的な値です。値が低いほど品質が良くなりますが、ファイルサイズが大きくなります。",
|
||||
"transcoding_disabled_description": "動画をトランスコードしない設定にしますが、これにより一部のクライアントで再生ができなくなる可能性があります",
|
||||
"transcoding_encoding_options": "エンコードオプション",
|
||||
"transcoding_encoding_options_description": "エンコードされた動画のコーデック、解像度、画質、その他オプションの設定します",
|
||||
"transcoding_hardware_acceleration": "ハードウェアアクセラレーション",
|
||||
"transcoding_hardware_acceleration_description": "より高速ですが、同じビットレートではより低品質になります(実験的)",
|
||||
"transcoding_hardware_decoding": "ハードウェアデコード",
|
||||
@@ -260,6 +306,8 @@
|
||||
"transcoding_max_keyframe_interval": "最大キーフレーム間隔",
|
||||
"transcoding_max_keyframe_interval_description": "キーフレーム間の最大フレーム間隔を設定します。値を低くすると圧縮効率が悪化しますが、シーク時間が改善され、動きの速いシーンの品質が向上する場合があります。\"0\" に設定すると、この値が自動的に設定されます。",
|
||||
"transcoding_optimal_description": "設定解像度を超える動画、または容認されていない形式の動画",
|
||||
"transcoding_policy": "トランスコードポリシー",
|
||||
"transcoding_policy_description": "動画がいつトランスコードされるかを設定します",
|
||||
"transcoding_preferred_hardware_device": "推奨ハードウェアデバイス",
|
||||
"transcoding_preferred_hardware_device_description": "VAAPI と QSV のみに適用されます。 ハードウェアトランスコードに使用されるdriノードを設定します。",
|
||||
"transcoding_preset_preset": "プリセット (-preset)",
|
||||
@@ -268,7 +316,7 @@
|
||||
"transcoding_reference_frames_description": "特定のフレームを圧縮するときに参照するフレームの数。より高い値は圧縮効率を改善しますが、エンコードが遅くなります。\"0\" に設定すると、この値が自動的に設定されます。",
|
||||
"transcoding_required_description": "許容されていない動画形式のみ",
|
||||
"transcoding_settings": "動画トランスコード設定",
|
||||
"transcoding_settings_description": "動画ファイルの解像度とエンコード情報を管理します",
|
||||
"transcoding_settings_description": "トランスコードする動画とその処理方法を管理します",
|
||||
"transcoding_target_resolution": "解像度",
|
||||
"transcoding_target_resolution_description": "解像度を高くすると細かなディテールを保持できますが、エンコードに時間がかかり、ファイルサイズが大きくなり、アプリの応答性が低下する可能性があります。",
|
||||
"transcoding_temporal_aq": "適応的量子化(Temporal AQ)",
|
||||
@@ -290,6 +338,7 @@
|
||||
"trash_settings_description": "ごみ箱の設定を管理します",
|
||||
"untracked_files": "追跡されていないファイル",
|
||||
"untracked_files_description": "これらのファイルはアプリケーションによって追跡されていません。これらは移動の失敗、アップロードの中断、またはバグにより取り残されたものである可能性があります",
|
||||
"user_cleanup_job": "ユーザーのクリーンアップ",
|
||||
"user_delete_delay": "<b>{user}</b>のアカウントとアセットは{delay, plural, one {#日} other {#日}}後に完全に削除されるように予定されます。",
|
||||
"user_delete_delay_settings": "遅延削除",
|
||||
"user_delete_delay_settings_description": "削除実行後、ユーザーのアカウントとアセットが完全に削除されるまでの日数。 ユーザー削除ジョブは深夜に実行され、削除の準備ができているユーザーを確認します。 この設定への変更は、次回の実行時に反映されます。",
|
||||
@@ -345,6 +394,7 @@
|
||||
"allow_edits": "編集を許可",
|
||||
"allow_public_user_to_download": "一般ユーザーによるダウンロードを許可",
|
||||
"allow_public_user_to_upload": "一般ユーザーによるアップロードを許可",
|
||||
"alt_text_qr_code": "QRコード画像",
|
||||
"anti_clockwise": "反時計回り",
|
||||
"api_key": "APIキー",
|
||||
"api_key_description": "この値は一回のみ表示されます。 ウィンドウを閉じる前に必ずコピーしてください。",
|
||||
@@ -368,8 +418,9 @@
|
||||
"asset_offline": "アセットはオフラインです",
|
||||
"asset_offline_description": "このアセットはオフラインです。 Immichはファイルの場所にアクセスできません。 アセットが利用可能であることを確認しライブラリを再スキャンしてください。",
|
||||
"asset_skipped": "スキップ済",
|
||||
"asset_skipped_in_trash": "ゴミ箱の中",
|
||||
"asset_uploaded": "アップロード済",
|
||||
"asset_uploading": "アップロード中...",
|
||||
"asset_uploading": "アップロード中…",
|
||||
"assets": "アセット",
|
||||
"assets_added_count": "{count, plural, one {#個} other {#個}}のアセットを追加しました",
|
||||
"assets_added_to_album_count": "{count, plural, one {#個} other {#個}}のアセットをアルバムに追加しました",
|
||||
@@ -378,7 +429,7 @@
|
||||
"assets_moved_to_trash_count": "{count, plural, one {#個} other {#個}}のアセットをごみ箱に移動しました",
|
||||
"assets_permanently_deleted_count": "{count, plural, one {#個} other {#個}}のアセットを完全に削除しました",
|
||||
"assets_removed_count": "{count, plural, one {#個} other {#個}}のアセットを削除しました",
|
||||
"assets_restore_confirmation": "ごみ箱のアセットをすべて復元してもよろしいですか? この操作を元に戻すことはできません!",
|
||||
"assets_restore_confirmation": "ごみ箱のアセットをすべて復元してもよろしいですか? この操作を元に戻すことはできません! オフラインのアセットはこの方法では復元できません。",
|
||||
"assets_restored_count": "{count, plural, one {#個} other {#個}}のアセットを復元しました",
|
||||
"assets_trashed_count": "{count, plural, one {#個} other {#個}}のアセットをごみ箱に移動しました",
|
||||
"assets_were_part_of_album_count": "{count, plural, one {個} other {個}}のアセットは既にアルバムの一部です",
|
||||
@@ -389,6 +440,7 @@
|
||||
"birthdate_saved": "生年月日が正常に保存されました",
|
||||
"birthdate_set_description": "生年月日は、写真撮影時のこの人物の年齢を計算するために使用されます。",
|
||||
"blurred_background": "ぼやけた背景",
|
||||
"bugs_and_feature_requests": "バグと機能のリクエスト",
|
||||
"build": "ビルド",
|
||||
"build_image": "ビルドイメージ",
|
||||
"bulk_delete_duplicates_confirmation": "本当に {count, plural, one {#個} other {#個}}の重複したアセットを一括削除しますか?これにより各重複中の最大のアセットが保持され、他の全ての重複が削除されます。この操作を元に戻すことはできません!",
|
||||
@@ -433,7 +485,9 @@
|
||||
"comments_are_disabled": "コメントは無効化されています",
|
||||
"confirm": "確認",
|
||||
"confirm_admin_password": "管理者パスワードを確認",
|
||||
"confirm_delete_face": "本当に『{name}』の顔をアセットから削除しますか?",
|
||||
"confirm_delete_shared_link": "本当にこの共有リンクを削除しますか?",
|
||||
"confirm_keep_this_delete_others": "このアセット以外のアセットがスタックから削除されます。本当に削除しますか?",
|
||||
"confirm_password": "確認",
|
||||
"contain": "収める",
|
||||
"context": "状況",
|
||||
@@ -474,25 +528,33 @@
|
||||
"date_range": "日付",
|
||||
"day": "ライトモード",
|
||||
"deduplicate_all": "全て重複排除",
|
||||
"deduplication_criteria_1": "バイト単位の画像サイズ",
|
||||
"deduplication_criteria_2": "EXIFデータ数",
|
||||
"deduplication_info": "重複排除情報",
|
||||
"deduplication_info_description": "アセットを自動的に選択して重複を一括で削除するには次のようにします:",
|
||||
"default_locale": "デフォルトのロケール",
|
||||
"default_locale_description": "ブラウザのロケールに基づいて日付と数値をフォーマットします",
|
||||
"delete": "削除",
|
||||
"delete_album": "アルバムを削除",
|
||||
"delete_api_key_prompt": "本当にこのAPI キーを削除しますか?",
|
||||
"delete_duplicates_confirmation": "本当にこれらの重複を完全に削除しますか?",
|
||||
"delete_face": "顔の削除",
|
||||
"delete_key": "キーを削除",
|
||||
"delete_library": "ライブラリを削除",
|
||||
"delete_link": "リンクを削除",
|
||||
"delete_others": "ほかを削除",
|
||||
"delete_shared_link": "共有リンクを消す",
|
||||
"delete_tag": "タグを削除する",
|
||||
"delete_tag_confirmation_prompt": "本当に{tagName}タグを削除しますか?",
|
||||
"delete_user": "ユーザーを削除",
|
||||
"deleted_shared_link": "共有リンクを削除",
|
||||
"deletes_missing_assets": "ディスクからなくなったアセットを削除する",
|
||||
"description": "概要欄",
|
||||
"details": "詳細",
|
||||
"direction": "方向",
|
||||
"disabled": "無効",
|
||||
"disallow_edits": "編集を許可しない",
|
||||
"discord": "Discord",
|
||||
"discover": "探索",
|
||||
"dismiss_all_errors": "全てのエラーを無視",
|
||||
"dismiss_error": "エラーを無視",
|
||||
@@ -501,6 +563,7 @@
|
||||
"display_original_photos": "オリジナルの写真を表示",
|
||||
"display_original_photos_setting_description": "オリジナルのアセットが Web 互換である場合は、アセットを表示するときにサムネイルではなく元の写真を優先して表示します。これにより写真の表示速度が遅くなる可能性があります。",
|
||||
"do_not_show_again": "このメッセージを再び表示しない",
|
||||
"documentation": "ドキュメント",
|
||||
"done": "完了",
|
||||
"download": "ダウンロード",
|
||||
"download_include_embedded_motion_videos": "埋め込まれた動画",
|
||||
@@ -543,6 +606,7 @@
|
||||
"enabled": "有効",
|
||||
"end_date": "終了日",
|
||||
"error": "エラー",
|
||||
"error_delete_face": "アセットから顔の削除ができませんでした",
|
||||
"error_loading_image": "画像の読み込みエラー",
|
||||
"error_title": "エラー - 問題が発生しました",
|
||||
"errors": {
|
||||
@@ -570,6 +634,7 @@
|
||||
"failed_to_create_shared_link": "共有リンクを作成できませんでした",
|
||||
"failed_to_edit_shared_link": "共有リンクを編集できませんでした",
|
||||
"failed_to_get_people": "人物を取得できませんでした",
|
||||
"failed_to_keep_this_delete_others": "ほかのアセットを削除できませんでした",
|
||||
"failed_to_load_asset": "アセットを読み込めませんでした",
|
||||
"failed_to_load_assets": "アセットを読み込めませんでした",
|
||||
"failed_to_load_people": "人物を読み込めませんでした",
|
||||
@@ -621,6 +686,7 @@
|
||||
"unable_to_get_comments_number": "コメント数を取得できません",
|
||||
"unable_to_get_shared_link": "共有リンクの取得に失敗しました",
|
||||
"unable_to_hide_person": "人物を非表示にできません",
|
||||
"unable_to_link_motion_video": "モーションビデオをリンクできません",
|
||||
"unable_to_link_oauth_account": "OAuth アカウントをリンクできません",
|
||||
"unable_to_load_album": "アルバムを読み込めません",
|
||||
"unable_to_load_asset_activity": "アセットのアクティビティを読み込めません",
|
||||
@@ -659,6 +725,7 @@
|
||||
"unable_to_submit_job": "ジョブを送信できません",
|
||||
"unable_to_trash_asset": "アセットをゴミ箱に移動できません",
|
||||
"unable_to_unlink_account": "アカウントのリンクを解除できません",
|
||||
"unable_to_unlink_motion_video": "モーションビデオのリンクを解除できません",
|
||||
"unable_to_update_album_cover": "アルバムカバーを更新できません",
|
||||
"unable_to_update_album_info": "アルバム情報を更新できません",
|
||||
"unable_to_update_library": "ライブラリを更新できません",
|
||||
@@ -682,6 +749,7 @@
|
||||
"external": "外部",
|
||||
"external_libraries": "外部ライブラリ",
|
||||
"face_unassigned": "未割り当て",
|
||||
"failed_to_load_assets": "アセットのロードに失敗しました",
|
||||
"favorite": "お気に入り",
|
||||
"favorite_or_unfavorite_photo": "写真をお気に入りまたはお気に入り解除",
|
||||
"favorites": "お気に入り",
|
||||
@@ -702,10 +770,13 @@
|
||||
"get_help": "助けを求める",
|
||||
"getting_started": "はじめる",
|
||||
"go_back": "戻る",
|
||||
"go_to_folder": "フォルダへ",
|
||||
"go_to_search": "検索へ",
|
||||
"group_albums_by": "これでアルバムをグループ化…",
|
||||
"group_country": "国でグループ化",
|
||||
"group_no": "グループ化なし",
|
||||
"group_owner": "所有者でグループ化",
|
||||
"group_places_by": "グループ分け...",
|
||||
"group_year": "年でグループ化",
|
||||
"has_quota": "クォータ有り",
|
||||
"hi_user": "こんにちは、{name}( {email})さん",
|
||||
@@ -738,6 +809,7 @@
|
||||
"include_shared_albums": "共有アルバムを含める",
|
||||
"include_shared_partner_assets": "パートナーがシェアしたアセットを含める",
|
||||
"individual_share": "1枚の共有",
|
||||
"individual_shares": "個人の共有",
|
||||
"info": "情報",
|
||||
"interval": {
|
||||
"day_at_onepm": "毎日午後1時",
|
||||
@@ -751,6 +823,8 @@
|
||||
"jobs": "ジョブ",
|
||||
"keep": "保持",
|
||||
"keep_all": "全て保持",
|
||||
"keep_this_delete_others": "これを残してほかを削除する",
|
||||
"kept_this_deleted_others": "このアセットを残して{count, plural, other {#件のアセット}}を削除する",
|
||||
"keyboard_shortcuts": "キーボードショートカット",
|
||||
"language": "言語",
|
||||
"language_setting_description": "優先言語を選択してください",
|
||||
@@ -758,12 +832,14 @@
|
||||
"latest_version": "最新バージョン",
|
||||
"latitude": "緯度",
|
||||
"leave": "標高",
|
||||
"lens_model": "レンズモデル",
|
||||
"let_others_respond": "他のユーザーの返信を許可する",
|
||||
"level": "レベル",
|
||||
"library": "ライブラリ",
|
||||
"library_options": "ライブラリ設定",
|
||||
"light": "ライトモード",
|
||||
"like_deleted": "いいねが削除されました",
|
||||
"link_motion_video": "モーションビデオのリンク",
|
||||
"link_options": "リンクのオプション",
|
||||
"link_to_oauth": "OAuthへリンクする",
|
||||
"linked_oauth_account": "リンクされたOAuthアカウント",
|
||||
@@ -782,6 +858,7 @@
|
||||
"look": "見た目",
|
||||
"loop_videos": "動画をループ",
|
||||
"loop_videos_description": "有効にすると詳細表示で自動的に動画がループします。",
|
||||
"main_branch_warning": "開発版を使っているようです。リリース版の使用を強く推奨します!",
|
||||
"make": "メーカー",
|
||||
"manage_shared_links": "共有済みのリンクを管理",
|
||||
"manage_sharing_with_partners": "パートナーとの共有を管理します",
|
||||
@@ -814,6 +891,7 @@
|
||||
"month": "月",
|
||||
"more": "もっと表示",
|
||||
"moved_to_trash": "ゴミ箱に移動しました",
|
||||
"mute_memories": "メモリーのミュート",
|
||||
"my_albums": "私のアルバム",
|
||||
"name": "名前",
|
||||
"name_or_nickname": "名前またはニックネーム",
|
||||
@@ -843,7 +921,7 @@
|
||||
"no_results": "結果がありません",
|
||||
"no_results_description": "同義語やより一般的なキーワードを試してください",
|
||||
"no_shared_albums_message": "アルバムを作成して写真や動画を共有しましょう",
|
||||
"not_in_any_album": "どのアルバムにも入っていません",
|
||||
"not_in_any_album": "どのアルバムにも入っていない",
|
||||
"note_apply_storage_label_to_previously_uploaded assets": "注意: 以前にアップロードしたアセットにストレージラベルを適用するには以下を実行してください",
|
||||
"note_unlimited_quota": "注: 容量を無制限にするには0を入力してください",
|
||||
"notes": "注意",
|
||||
@@ -851,6 +929,7 @@
|
||||
"notifications": "通知",
|
||||
"notifications_setting_description": "通知を管理します",
|
||||
"oauth": "OAuth",
|
||||
"official_immich_resources": "公式Immichリソース",
|
||||
"offline": "オフライン",
|
||||
"offline_paths": "オフラインのパス",
|
||||
"offline_paths_description": "これらの結果は、外部ライブラリの一部ではないファイルを手動で削除したことが原因である可能性があります。",
|
||||
@@ -908,6 +987,7 @@
|
||||
"permanently_deleted_asset": "アセットを完全に削除しました",
|
||||
"permanently_deleted_assets_count": "{count, plural, one {#個} other {#個}}のアセットを完全に削除しました",
|
||||
"person": "人物",
|
||||
"person_birthdate": "{date}生まれ",
|
||||
"person_hidden": "{name}{hidden, select, true { (非表示)} other {}}",
|
||||
"photo_shared_all_users": "写真をすべてのユーザーと共有したか、共有するユーザーがいないようです。",
|
||||
"photos": "写真",
|
||||
@@ -917,6 +997,7 @@
|
||||
"pick_a_location": "場所を選択",
|
||||
"place": "場所",
|
||||
"places": "撮影場所",
|
||||
"places_count": "{count, plural, other {{count, number}箇所}}",
|
||||
"play": "再生",
|
||||
"play_memories": "メモリーを再生",
|
||||
"play_motion_photo": "モーションビデオを再生",
|
||||
@@ -976,14 +1057,17 @@
|
||||
"reassigned_assets_to_new_person": "{count, plural, one {#個} other {#個}}のアセットを新しい人物に割り当てました",
|
||||
"reassing_hint": "選択されたアセットを既存の人物に割り当て",
|
||||
"recent": "最近",
|
||||
"recent-albums": "最近のアルバム",
|
||||
"recent_searches": "最近の検索",
|
||||
"refresh": "更新",
|
||||
"refresh_encoded_videos": "エンコードされた動画を更新",
|
||||
"refresh_faces": "顔認識を更新",
|
||||
"refresh_metadata": "メタデータを更新",
|
||||
"refresh_thumbnails": "サムネイルを更新",
|
||||
"refreshed": "更新済",
|
||||
"refreshes_every_file": "すべてのファイルを更新",
|
||||
"refreshing_encoded_video": "エンコードされた動画を更新中",
|
||||
"refreshing_faces": "顔認識を更新中",
|
||||
"refreshing_metadata": "メタデータを更新中",
|
||||
"regenerating_thumbnails": "サムネイルを再生成中",
|
||||
"remove": "削除",
|
||||
@@ -995,11 +1079,16 @@
|
||||
"remove_from_album": "アルバムから削除",
|
||||
"remove_from_favorites": "お気に入りから削除",
|
||||
"remove_from_shared_link": "共有リンクから削除",
|
||||
"remove_memory": "メモリーの削除",
|
||||
"remove_photo_from_memory": "メモリーから写真を削除",
|
||||
"remove_url": "URLの削除",
|
||||
"remove_user": "ユーザーを削除",
|
||||
"removed_api_key": "削除されたAPI キー: {name}",
|
||||
"removed_from_archive": "アーカイブから削除されました",
|
||||
"removed_from_favorites": "お気に入りから削除しました",
|
||||
"removed_from_favorites_count": "{count, plural, other {#項目}}お気に入りから削除しました",
|
||||
"removed_memory": "削除されたメモリー",
|
||||
"removed_photo_from_memory": "メモリーから削除された写真",
|
||||
"removed_tagged_assets": "{count, plural, one {#個のアセット} other {#個のアセット}}からタグを削除しました",
|
||||
"rename": "リネーム",
|
||||
"repair": "修復",
|
||||
@@ -1008,6 +1097,7 @@
|
||||
"repository": "リポジトリ",
|
||||
"require_password": "パスワードを要求",
|
||||
"require_user_to_change_password_on_first_login": "ユーザーに初回ログイン時にパスワードの変更を要求する",
|
||||
"rescan": "再スキャン",
|
||||
"reset": "リセット",
|
||||
"reset_password": "パスワードをリセット",
|
||||
"reset_people_visibility": "人物の非表示設定をリセット",
|
||||
@@ -1030,22 +1120,29 @@
|
||||
"saved_settings": "設定を保存しました",
|
||||
"say_something": "何か書き込みましょう",
|
||||
"scan_all_libraries": "全てのライブラリをスキャン",
|
||||
"scan_library": "スキャン",
|
||||
"scan_settings": "スキャン設定",
|
||||
"scanning_for_album": "アルバムをスキャン中…",
|
||||
"search": "検索",
|
||||
"search_albums": "アルバムを検索",
|
||||
"search_by_context": "状況で検索",
|
||||
"search_by_description": "概要で検索",
|
||||
"search_by_description_example": "サパでハイキングした日",
|
||||
"search_by_filename": "ファイル名もしくは拡張子で検索",
|
||||
"search_by_filename_example": "例: IMG_1234.JPG もしくは PNG",
|
||||
"search_camera_make": "カメラメーカーを検索…",
|
||||
"search_camera_model": "カメラのモデルを検索…",
|
||||
"search_city": "市町村を検索…",
|
||||
"search_country": "国を検索…",
|
||||
"search_for": "検索",
|
||||
"search_for_existing_person": "既存の人物を検索",
|
||||
"search_no_people": "人物がいません",
|
||||
"search_no_people_named": "「{name}」という名前の人物がいません",
|
||||
"search_options": "検索オプション",
|
||||
"search_people": "人物を検索",
|
||||
"search_places": "場所を検索",
|
||||
"search_rating": "レートで検索...",
|
||||
"search_settings": "検索設定",
|
||||
"search_state": "都道府県を検索…",
|
||||
"search_tags": "タグを検索...",
|
||||
"search_timezone": "タイムゾーンを検索…",
|
||||
@@ -1054,6 +1151,7 @@
|
||||
"searching_locales": "ロケールを検索…",
|
||||
"second": "秒",
|
||||
"see_all_people": "全ての人物を見る",
|
||||
"select": "選択",
|
||||
"select_album_cover": "アルバムカバーを選択",
|
||||
"select_all": "全て選択",
|
||||
"select_all_duplicates": "全ての重複を選択",
|
||||
@@ -1076,6 +1174,7 @@
|
||||
"server_version": "サーバーバージョン",
|
||||
"set": "設定",
|
||||
"set_as_album_cover": "アルバムカバーとして設定",
|
||||
"set_as_featured_photo": "人物写真に設定",
|
||||
"set_as_profile_picture": "プロフィール画像として設定",
|
||||
"set_date_of_birth": "生年月日を設定",
|
||||
"set_profile_picture": "プロフィール画像を設定",
|
||||
@@ -1090,6 +1189,7 @@
|
||||
"shared_from_partner": "{partner} による写真",
|
||||
"shared_link_options": "共有リンクのオプション",
|
||||
"shared_links": "共有リンク",
|
||||
"shared_links_description": "写真や動画をリンクで共有",
|
||||
"shared_photos_and_videos_count": "{assetCount, plural, other {#個の共有された写真と動画}}",
|
||||
"shared_with_partner": "{partner} と共有しました",
|
||||
"sharing": "共有",
|
||||
@@ -1112,6 +1212,8 @@
|
||||
"show_person_options": "人物設定を表示",
|
||||
"show_progress_bar": "プログレスバーを表示",
|
||||
"show_search_options": "検索オプションを表示",
|
||||
"show_shared_links": "共有リンクを表示",
|
||||
"show_slideshow_transition": "スライドショーのトランジションを表示",
|
||||
"show_supporter_badge": "サポーターバッジ",
|
||||
"show_supporter_badge_description": "サポーターバッジを表示",
|
||||
"shuffle": "ランダム",
|
||||
@@ -1121,6 +1223,8 @@
|
||||
"sign_up": "登録",
|
||||
"size": "サイズ",
|
||||
"skip_to_content": "コンテンツへスキップ",
|
||||
"skip_to_folders": "フォルダへスキップ",
|
||||
"skip_to_tags": "タグへスキップ",
|
||||
"slideshow": "スライドショー",
|
||||
"slideshow_settings": "スライドショー設定",
|
||||
"sort_albums_by": "この順序でアルバムをソート…",
|
||||
@@ -1128,6 +1232,7 @@
|
||||
"sort_items": "アイテムの数",
|
||||
"sort_modified": "変更日",
|
||||
"sort_oldest": "古い写真",
|
||||
"sort_people_by_similarity": "似ている順に人物を並び替える",
|
||||
"sort_recent": "最新の写真",
|
||||
"sort_title": "タイトル",
|
||||
"source": "ソース",
|
||||
@@ -1151,12 +1256,17 @@
|
||||
"submit": "送信",
|
||||
"suggestions": "ユーザーリスト",
|
||||
"sunrise_on_the_beach": "海岸の日の出",
|
||||
"support": "サポート",
|
||||
"support_and_feedback": "サポートとフィードバック",
|
||||
"support_third_party_description": "Immichのインストールはサードパーティーによってパッケージ化されています。遭遇した問題はそのパッケージに起因している可能性があるので以下のリンクを使って最初にそのパッケージに問題を提起してください。",
|
||||
"swap_merge_direction": "統合する方向を入れ替え",
|
||||
"sync": "同期",
|
||||
"tag": "タグ付けする",
|
||||
"tag_assets": "アセットにタグ付けする",
|
||||
"tag_created": "タグ: {tag} を作成しました",
|
||||
"tag_feature_description": "意味を持たせたタグトでグループ化して写真と動画を閲覧する",
|
||||
"tag_not_found_question": "タグが見つかりませんか? <link>こちら</link>からタグを作成できます",
|
||||
"tag_people": "人物タグ",
|
||||
"tag_updated": "タグ: {tag} を更新しました",
|
||||
"tagged_assets": "{count, plural, one {#個のアセット} other {#個のアセット}}をタグ付けしました",
|
||||
"tags": "タグ",
|
||||
@@ -1165,15 +1275,19 @@
|
||||
"theme_selection": "テーマ選択",
|
||||
"theme_selection_description": "ブラウザのシステム設定に基づいてテーマを明色または暗色に自動的に設定します",
|
||||
"they_will_be_merged_together": "これらは一緒に統合されます",
|
||||
"third_party_resources": "サードパーティーリソース",
|
||||
"time_based_memories": "時間によるメモリー",
|
||||
"timeline": "タイムライン",
|
||||
"timezone": "タイムゾーン",
|
||||
"to_archive": "アーカイブ",
|
||||
"to_change_password": "パスワードを変更",
|
||||
"to_favorite": "お気に入り",
|
||||
"to_login": "ログイン",
|
||||
"to_parent": "上位の階層へ",
|
||||
"to_trash": "ゴミ箱",
|
||||
"toggle_settings": "設定をトグル",
|
||||
"toggle_theme": "ダークテーマを切り替え",
|
||||
"total": "合計",
|
||||
"total_usage": "総使用量",
|
||||
"trash": "ゴミ箱",
|
||||
"trash_all": "全て削除",
|
||||
@@ -1187,10 +1301,13 @@
|
||||
"unfavorite": "お気に入りから外す",
|
||||
"unhide_person": "人物の非表示を解除",
|
||||
"unknown": "不明",
|
||||
"unknown_country": "不明な国",
|
||||
"unknown_year": "不明な年",
|
||||
"unlimited": "無制限",
|
||||
"unlink_motion_video": "モーションビデオのリンクを解除",
|
||||
"unlink_oauth": "OAuthのリンクを解除",
|
||||
"unlinked_oauth_account": "リンクが解除されたOAuthアカウント",
|
||||
"unmute_memories": "メモリーのミュートを解除",
|
||||
"unnamed_album": "無名のアルバム",
|
||||
"unnamed_album_delete_confirmation": "本当にこのアルバムを削除しますか?",
|
||||
"unnamed_share": "無名の共有",
|
||||
@@ -1231,7 +1348,9 @@
|
||||
"variables": "変数",
|
||||
"version": "バージョン",
|
||||
"version_announcement_closing": "あなたの友人、Alex",
|
||||
"version_announcement_message": "こんにちは、親愛なる皆様へ。アプリの新しいバージョンがありますので、構成の不整合を防ぐために<link>リリースノート</link>にアクセスし、<code>docker-compose.yml</code>、及び<code>.cnv</code>の設定が最新か確認してください。特に自動的にアプリの更新を制御するWatchTowerやその他システムを利用している場合に当てはまります。",
|
||||
"version_announcement_message": "こんにちは! 新しいバージョンのImmichがリリースされました。特にWatchTowerやImmichインスタンスを自動的に更新する仕組みを設けている場合は<link>リリースノート</link>をよく読んで設定が最新のものになっているか確認してください。",
|
||||
"version_history": "バージョン履歴",
|
||||
"version_history_item": "{date}に{version}をインストール",
|
||||
"video": "動画",
|
||||
"video_hover_setting": "ホバー時にサムネイルで動画を再生",
|
||||
"video_hover_setting_description": "マウスが項目の上にあるときに動画のサムネイルを再生します。無効時でも再生アイコンにカーソルを合わせると再生を開始できます。",
|
||||
@@ -1242,7 +1361,9 @@
|
||||
"view_all": "すべて見る",
|
||||
"view_all_users": "全てのユーザーを確認する",
|
||||
"view_in_timeline": "タイムラインで見る",
|
||||
"view_link": "リンクを見る",
|
||||
"view_links": "リンクを確認する",
|
||||
"view_name": "分類",
|
||||
"view_next_asset": "次のアセットを見る",
|
||||
"view_previous_asset": "前のアセットを見る",
|
||||
"view_stack": "ビュースタック",
|
||||
@@ -1251,10 +1372,10 @@
|
||||
"warning": "警告",
|
||||
"week": "週",
|
||||
"welcome": "ようこそ",
|
||||
"welcome_to_immich": "immichにようこそ",
|
||||
"welcome_to_immich": "Immichにようこそ",
|
||||
"year": "年",
|
||||
"years_ago": "{years, plural, one {#年} other {#年}}前",
|
||||
"yes": "はい",
|
||||
"you_dont_have_any_shared_links": "共有リンクはありません",
|
||||
"zoom_image": "画像を拡大"
|
||||
}
|
||||
}
|
||||
|
||||
1
i18n/ka.json
Normal file
1
i18n/ka.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
1
i18n/kk.json
Normal file
1
i18n/kk.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
1
i18n/kn.json
Normal file
1
i18n/kn.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
73
i18n/ko.json
73
i18n/ko.json
@@ -41,6 +41,7 @@
|
||||
"backup_settings": "백업 설정",
|
||||
"backup_settings_description": "데이터베이스 백업 설정 관리",
|
||||
"check_all": "모두 확인",
|
||||
"cleanup": "정리",
|
||||
"cleared_jobs": "작업 중단: {job}",
|
||||
"config_set_by_file": "현재 설정은 구성 파일에 의해 관리됩니다.",
|
||||
"confirm_delete_library": "{library} 라이브러리를 삭제하시겠습니까?",
|
||||
@@ -96,7 +97,7 @@
|
||||
"library_scanning_enable_description": "주기적인 라이브러리 스캔 활성화",
|
||||
"library_settings": "외부 라이브러리",
|
||||
"library_settings_description": "외부 라이브러리 설정 관리",
|
||||
"library_tasks_description": "라이브러리 구성 및 확인 작업 수행",
|
||||
"library_tasks_description": "외부 라이브러리에서 새 자산 및/또는 변경된 자산을 검색합니다",
|
||||
"library_watching_enable_description": "외부 라이브러리의 파일 변경 감시",
|
||||
"library_watching_settings": "라이브러리 감시 (실험 기능)",
|
||||
"library_watching_settings_description": "파일 변겅을 자동으로 감지",
|
||||
@@ -147,6 +148,8 @@
|
||||
"map_settings": "지도",
|
||||
"map_settings_description": "지도 설정 관리",
|
||||
"map_style_description": "지도 테마 style.json URL",
|
||||
"memory_cleanup_job": "메모리 정리",
|
||||
"memory_generate_job": "메모리 생성",
|
||||
"metadata_extraction_job": "메타데이터 추출",
|
||||
"metadata_extraction_job_description": "각 항목에서 GPS, 인물 및 해상도 등의 메타데이터 정보 추출",
|
||||
"metadata_faces_import_setting": "얼굴 가져오기 활성화",
|
||||
@@ -240,7 +243,7 @@
|
||||
"storage_template_hash_verification_enabled_description": "해시 검증을 활성화합니다. 이 설정의 결과를 확실히 이해하지 않는 한 비활성화하지 마세요.",
|
||||
"storage_template_migration": "스토리지 템플릿 마이그레이션",
|
||||
"storage_template_migration_description": "이전에 업로드된 항목에 현재 <link>{template}</link> 적용",
|
||||
"storage_template_migration_info": "템플릿 변경 사항은 새 업로드 항목부터 적용됩니다. 기존 항목에도 적용하려면 <link>{job}</link>을 실행하세요.",
|
||||
"storage_template_migration_info": "저장소 템플릿은 모든 확장자를 소문자로 변환합니다. 템플릿 변경 사항은 새 자산에만 적용됩니다. 이전에 업로드한 자산에 템플릿을 적용하려면 <link>{job}</link>를 실행하세요.",
|
||||
"storage_template_migration_job": "스토리지 템플릿 마이그레이션 작업",
|
||||
"storage_template_more_details": "이 기능에 대한 자세한 내용은 <template-link>스토리지 템플릿</template-link> 및 <implications-link>설명</implications-link>을 참조하세요.",
|
||||
"storage_template_onboarding_description": "이 기능을 활성화하면 사용자 정의 템플릿을 사용하여 파일을 자동으로 정리할 수 있습니다. 안정성 문제로 인해 해당 기능은 기본적으로 비활성화되어 있습니다. 자세한 내용은 <link>문서</link>를 참조하세요.",
|
||||
@@ -250,10 +253,16 @@
|
||||
"storage_template_user_label": "사용자의 스토리지 레이블: <code>{label}</code>",
|
||||
"system_settings": "시스템 설정",
|
||||
"tag_cleanup_job": "태그 정리",
|
||||
"template_email_available_tags": "템플릿에서 다음 변수를 사용할 수 있습니다: {tags}",
|
||||
"template_email_if_empty": "비어 있는 경우 기본 템플릿이 사용됩니다.",
|
||||
"template_email_invite_album": "앨범 템플릿 초대",
|
||||
"template_email_preview": "미리보기",
|
||||
"template_email_settings": "이메일 템플릿",
|
||||
"template_email_settings_description": "사용자 정의 이메일 템플릿 관리",
|
||||
"template_email_update_album": "앨범 템플릿 업데이트",
|
||||
"template_email_welcome": "이메일 템플릿에 오신것을 환영합니다",
|
||||
"template_settings": "알림 템플릿",
|
||||
"template_settings_description": "알림을 위한 사용자 지정 템플릿을 관리합니다.",
|
||||
"theme_custom_css_settings": "사용자 정의 CSS",
|
||||
"theme_custom_css_settings_description": "Immich에 적용할 사용자 정의 CSS(Cascading Style Sheets) 설정",
|
||||
"theme_settings": "테마 설정",
|
||||
@@ -278,11 +287,13 @@
|
||||
"transcoding_audio_codec_description": "Opus는 가장 좋은 품질의 옵션이지만 기기 및 소프트웨어가 오래된 경우 호환되지 않을 수 있습니다.",
|
||||
"transcoding_bitrate_description": "최대 비트레이트를 초과하는 동영상 또는 허용되지 않는 형식의 동영상",
|
||||
"transcoding_codecs_learn_more": "여기에서 사용되는 용어에 대한 자세한 내용은 FFmpeg 문서의 <h264-link>H.264 코덱</h264-link>, <hevc-link>HEVC 코덱</hevc-link> 및 <vp9-link>VP9 코덱</vp9-link> 항목을 참조하세요.",
|
||||
"transcoding_constant_quality_mode": "Constant quality mode",
|
||||
"transcoding_constant_quality_mode": "고정 품질 모드",
|
||||
"transcoding_constant_quality_mode_description": "ICQ는 CQP보다 나은 성능을 보이나 일부 기기의 하드웨어 가속에서 지원되지 않을 수 있습니다. 이 옵션을 설정하면 품질 기반 인코딩 시 지정된 모드를 우선적으로 사용합니다. NVENC에서는 ICQ를 지원하지 않아 이 설정이 적용되지 않습니다.",
|
||||
"transcoding_constant_rate_factor": "Constant rate factor (-crf)",
|
||||
"transcoding_constant_rate_factor": "상수 비율 계수(-CRF)",
|
||||
"transcoding_constant_rate_factor_description": "일반적으로 H.264는 23, HEVC는 28, VP9는 31, AV1는 35를 사용합니다. 값이 낮으면 품질이 향상되지만 파일 크기가 증가합니다.",
|
||||
"transcoding_disabled_description": "동영상을 트랜스코딩하지 않음. 일부 기기에서 재생이 불가능할 수 있습니다.",
|
||||
"transcoding_encoding_options": "인코딩 옵션",
|
||||
"transcoding_encoding_options_description": "인코딩된 동영상의 코덱, 해상도, 품질 및 기타 옵션을 설정합니다",
|
||||
"transcoding_hardware_acceleration": "하드웨어 가속",
|
||||
"transcoding_hardware_acceleration_description": "실험적인 기능입니다. 속도가 향상되지만 동일 비트레이트에서 품질이 상대적으로 낮을 수 있습니다.",
|
||||
"transcoding_hardware_decoding": "하드웨어 디코딩",
|
||||
@@ -295,6 +306,8 @@
|
||||
"transcoding_max_keyframe_interval": "최대 키프레임 간격",
|
||||
"transcoding_max_keyframe_interval_description": "키프레임 사이 최대 프레임 거리를 설정합니다. 값이 낮으면 압축 효율이 저하되지만 검색 시간이 개선되고 빠른 움직임이 있는 장면에서 품질이 향상됩니다. 0을 입력한 경우 자동으로 설정합니다.",
|
||||
"transcoding_optimal_description": "목표 해상도보다 높은 동영상 또는 허용되지 않는 형식의 동영상",
|
||||
"transcoding_policy": "트랜스코드 정책",
|
||||
"transcoding_policy_description": "동영상 트랜스코딩 시기 설정하기",
|
||||
"transcoding_preferred_hardware_device": "선호하는 하드웨어 기기",
|
||||
"transcoding_preferred_hardware_device_description": "하드웨어 트랜스코딩에 사용할 dri 노드를 설정합니다. (VAAPI와 QSV만 해당)",
|
||||
"transcoding_preset_preset": "프리셋 (-preset)",
|
||||
@@ -303,10 +316,10 @@
|
||||
"transcoding_reference_frames_description": "특정 프레임을 압축할 때 참조하는 프레임 수를 설정합니다. 값이 높으면 압축 효율이 향상되나 인코딩 속도가 저하됩니다. 0을 입력한 경우 자동으로 설정합니다.",
|
||||
"transcoding_required_description": "허용된 형식이 아닌 동영상만",
|
||||
"transcoding_settings": "동영상 트랜스코딩 설정",
|
||||
"transcoding_settings_description": "동영상 파일의 해상도 및 인코딩 정보 관리",
|
||||
"transcoding_settings_description": "트랜스코딩할 동영상과 처리 방법 관리하기",
|
||||
"transcoding_target_resolution": "목표 해상도",
|
||||
"transcoding_target_resolution_description": "높은 해상도를 선택한 경우 세부 묘사의 손실을 최소화할 수 있지만, 인코딩 시간과 파일 크기가 증가하여 앱의 반응 속도가 느려질 수 있습니다.",
|
||||
"transcoding_temporal_aq": "Temporal AQ",
|
||||
"transcoding_temporal_aq": "일시적 AQ",
|
||||
"transcoding_temporal_aq_description": "세부 묘사가 많고 움직임이 적은 장면의 품질이 향상됩니다. 오래된 기기와 호환되지 않을 수 있습니다. (NVENC만 해당)",
|
||||
"transcoding_threads": "스레드",
|
||||
"transcoding_threads_description": "값이 높으면 인코딩 속도가 향상되지만 리소스 사용량이 증가합니다. 값은 CPU 코어 수보다 작아야 하며, 설정하지 않으려면 0을 입력합니다.",
|
||||
@@ -381,6 +394,7 @@
|
||||
"allow_edits": "편집자로 설정",
|
||||
"allow_public_user_to_download": "모든 사용자의 다운로드 허용",
|
||||
"allow_public_user_to_upload": "모든 사용자의 업로드 허용",
|
||||
"alt_text_qr_code": "QR코드 이미지",
|
||||
"anti_clockwise": "반시계 방향",
|
||||
"api_key": "API 키",
|
||||
"api_key_description": "이 값은 한 번만 표시됩니다. 창을 닫기 전 반드시 복사해주세요.",
|
||||
@@ -471,7 +485,9 @@
|
||||
"comments_are_disabled": "댓글이 비활성화되었습니다.",
|
||||
"confirm": "확인",
|
||||
"confirm_admin_password": "관리자 비밀번호 확인",
|
||||
"confirm_delete_face": "에셋에서 {name} 얼굴을 삭제하시겠습니까?",
|
||||
"confirm_delete_shared_link": "이 공유 링크를 삭제하시겠습니까?",
|
||||
"confirm_keep_this_delete_others": "이 에셋을 제외한 스택의 다른 모든 에셋이 삭제됩니다. 계속하시겠습니까?",
|
||||
"confirm_password": "비밀번호 확인",
|
||||
"contain": "맞춤",
|
||||
"context": "내용",
|
||||
@@ -512,15 +528,21 @@
|
||||
"date_range": "날짜 범위",
|
||||
"day": "일",
|
||||
"deduplicate_all": "모두 삭제",
|
||||
"deduplication_criteria_1": "이미지 크기(바이트)",
|
||||
"deduplication_criteria_2": "EXIF 데이터 개수",
|
||||
"deduplication_info": "중복 제거 정보",
|
||||
"deduplication_info_description": "자산을 자동으로 미리 선택하고 일괄적으로 중복을 제거하려면 다음을 살펴보세요:",
|
||||
"default_locale": "기본 로케일",
|
||||
"default_locale_description": "브라우저 로케일에 따른 날짜 및 숫자 형식 지정",
|
||||
"delete": "삭제",
|
||||
"delete_album": "앨범 삭제",
|
||||
"delete_api_key_prompt": "API 키를 삭제하시겠습니까?",
|
||||
"delete_duplicates_confirmation": "비슷한 항목들을 영구적으로 삭제하시겠습니까?",
|
||||
"delete_face": "얼굴 삭제",
|
||||
"delete_key": "키 삭제",
|
||||
"delete_library": "라이브러리 삭제",
|
||||
"delete_link": "링크 삭제",
|
||||
"delete_others": "다른 사람 삭제",
|
||||
"delete_shared_link": "공유 링크 삭제",
|
||||
"delete_tag": "태그 삭제",
|
||||
"delete_tag_confirmation_prompt": "{tagName} 태그를 삭제하시겠습니까?",
|
||||
@@ -532,7 +554,7 @@
|
||||
"direction": "방향",
|
||||
"disabled": "비활성화됨",
|
||||
"disallow_edits": "뷰어로 설정",
|
||||
"discord": "Discord",
|
||||
"discord": "디스코드",
|
||||
"discover": "탐색",
|
||||
"dismiss_all_errors": "모든 오류 무시",
|
||||
"dismiss_error": "오류 무시",
|
||||
@@ -579,11 +601,12 @@
|
||||
"editor_crop_tool_h2_rotation": "회전",
|
||||
"email": "이메일",
|
||||
"empty_trash": "휴지통 비우기",
|
||||
"empty_trash_confirmation": "휴지통을 비우시겠습니까? 휴지통에 있는 모든 항목이 Immich에서 영구적으로 삭제됩니다. 이 작업은 되돌릴 수 없습니다!",
|
||||
"empty_trash_confirmation": "휴지통을 비우시겠습니까? 휴지통에 있는 모든 항목이 Immich에서 영구적으로 삭제됩니다.\n이 작업은 되돌릴 수 없습니다!",
|
||||
"enable": "활성화",
|
||||
"enabled": "활성화됨",
|
||||
"end_date": "종료일",
|
||||
"error": "오류",
|
||||
"error_delete_face": "에셋에서 얼굴 삭제 오류",
|
||||
"error_loading_image": "이미지 로드 오류",
|
||||
"error_title": "오류 - 문제가 발생했습니다",
|
||||
"errors": {
|
||||
@@ -611,6 +634,7 @@
|
||||
"failed_to_create_shared_link": "공유 링크를 생성하지 못했습니다.",
|
||||
"failed_to_edit_shared_link": "공유 링크를 수정하지 못했습니다.",
|
||||
"failed_to_get_people": "인물 로드 실패",
|
||||
"failed_to_keep_this_delete_others": "이 자산을 유지하고 다른 자산을 삭제하지 못했습니다",
|
||||
"failed_to_load_asset": "항목 로드 실패",
|
||||
"failed_to_load_assets": "항목 로드 실패",
|
||||
"failed_to_load_people": "인물 로드 실패",
|
||||
@@ -725,6 +749,7 @@
|
||||
"external": "외부",
|
||||
"external_libraries": "외부 라이브러리",
|
||||
"face_unassigned": "알 수 없음",
|
||||
"failed_to_load_assets": "에셋 로드에 실패했습니다",
|
||||
"favorite": "즐겨찾기",
|
||||
"favorite_or_unfavorite_photo": "즐겨찾기 추가/제거",
|
||||
"favorites": "즐겨찾기",
|
||||
@@ -745,10 +770,13 @@
|
||||
"get_help": "도움 요청",
|
||||
"getting_started": "시작하기",
|
||||
"go_back": "뒤로",
|
||||
"go_to_folder": "폴더로 이동",
|
||||
"go_to_search": "검색으로 이동",
|
||||
"group_albums_by": "다음으로 앨범 그룹화...",
|
||||
"group_country": "국가별 그룹화",
|
||||
"group_no": "그룹화 없음",
|
||||
"group_owner": "소유자로 그룹화",
|
||||
"group_places_by": "장소 그룹화 기준...",
|
||||
"group_year": "연도로 그룹화",
|
||||
"has_quota": "할당량",
|
||||
"hi_user": "안녕하세요 {name}님, ({email})",
|
||||
@@ -781,6 +809,7 @@
|
||||
"include_shared_albums": "공유 앨범 포함",
|
||||
"include_shared_partner_assets": "파트너가 공유한 항목 포함",
|
||||
"individual_share": "개인 공유",
|
||||
"individual_shares": "개별 공유",
|
||||
"info": "정보",
|
||||
"interval": {
|
||||
"day_at_onepm": "매일 오후 1시",
|
||||
@@ -794,6 +823,8 @@
|
||||
"jobs": "작업",
|
||||
"keep": "유지",
|
||||
"keep_all": "모두 유지",
|
||||
"keep_this_delete_others": "이 항목은 보관하고 다른 항목은 삭제",
|
||||
"kept_this_deleted_others": "이 자산을 유지하고 {count, plural, one {# asset} other {# assets}}을 삭제했습니다",
|
||||
"keyboard_shortcuts": "키보드 단축키",
|
||||
"language": "언어",
|
||||
"language_setting_description": "선호하는 언어 선택",
|
||||
@@ -801,6 +832,7 @@
|
||||
"latest_version": "최신 버전",
|
||||
"latitude": "위도",
|
||||
"leave": "나가기",
|
||||
"lens_model": "카메라 렌즈 모델",
|
||||
"let_others_respond": "다른 사용자의 반응 허용",
|
||||
"level": "레벨",
|
||||
"library": "라이브러리",
|
||||
@@ -859,6 +891,7 @@
|
||||
"month": "월",
|
||||
"more": "더보기",
|
||||
"moved_to_trash": "휴지통으로 이동되었습니다.",
|
||||
"mute_memories": "추억 음소거",
|
||||
"my_albums": "내 앨범",
|
||||
"name": "이름",
|
||||
"name_or_nickname": "이름 또는 닉네임",
|
||||
@@ -954,6 +987,7 @@
|
||||
"permanently_deleted_asset": "항목이 영구적으로 삭제되었습니다.",
|
||||
"permanently_deleted_assets_count": "항목 {count, plural, one {#개} other {#개}}가 영구적으로 삭제되었습니다.",
|
||||
"person": "인물",
|
||||
"person_birthdate": "{date} 출생",
|
||||
"person_hidden": "{name}{hidden, select, true { (숨김)} other {}}",
|
||||
"photo_shared_all_users": "이미 모든 사용자와 사진을 공유 중이거나 다른 사용자가 없는 것 같습니다.",
|
||||
"photos": "사진",
|
||||
@@ -963,6 +997,7 @@
|
||||
"pick_a_location": "위치 선택",
|
||||
"place": "장소",
|
||||
"places": "장소",
|
||||
"places_count": "{count, plural, one {{count, number} 장소} other {{count, number} 장소}}",
|
||||
"play": "재생",
|
||||
"play_memories": "추억 재생",
|
||||
"play_motion_photo": "모션 포토 재생",
|
||||
@@ -1022,6 +1057,7 @@
|
||||
"reassigned_assets_to_new_person": "항목 {count, plural, one {#개} other {#개}}가 새 인물에 할당되었습니다.",
|
||||
"reassing_hint": "기존 인물에 선택한 항목 할당",
|
||||
"recent": "최근",
|
||||
"recent-albums": "최근 앨범",
|
||||
"recent_searches": "최근 검색",
|
||||
"refresh": "새로고침",
|
||||
"refresh_encoded_videos": "동영상 재인코딩",
|
||||
@@ -1043,11 +1079,16 @@
|
||||
"remove_from_album": "앨범에서 제거",
|
||||
"remove_from_favorites": "즐겨찾기에서 제거",
|
||||
"remove_from_shared_link": "공유 링크에서 제거",
|
||||
"remove_memory": "추억 제거",
|
||||
"remove_photo_from_memory": "이 추억에서 사진 제거",
|
||||
"remove_url": "URL 제거",
|
||||
"remove_user": "사용자 삭제",
|
||||
"removed_api_key": "API 키 삭제: {name}",
|
||||
"removed_from_archive": "보관함에서 제거되었습니다.",
|
||||
"removed_from_favorites": "즐겨찾기에서 제거되었습니다.",
|
||||
"removed_from_favorites_count": "즐겨찾기에서 항목 {count, plural, other {#개}} 제거됨",
|
||||
"removed_memory": "추억 제거",
|
||||
"removed_photo_from_memory": "이 추억에서 사진 제거",
|
||||
"removed_tagged_assets": "항목 {count, plural, one {#개} other {#개}}에서 태그를 제거함",
|
||||
"rename": "이름 바꾸기",
|
||||
"repair": "수리",
|
||||
@@ -1056,6 +1097,7 @@
|
||||
"repository": "리포지터리",
|
||||
"require_password": "비밀번호 필요",
|
||||
"require_user_to_change_password_on_first_login": "사용자가 처음 로그인할 때 비밀번호를 변경하도록 요구",
|
||||
"rescan": "재검색",
|
||||
"reset": "초기화",
|
||||
"reset_password": "비밀번호 재설정",
|
||||
"reset_people_visibility": "인물 표시 여부 초기화",
|
||||
@@ -1092,12 +1134,14 @@
|
||||
"search_camera_model": "카메라 모델명 검색...",
|
||||
"search_city": "도시 검색...",
|
||||
"search_country": "국가 검색...",
|
||||
"search_for": "검색",
|
||||
"search_for_existing_person": "존재하는 인물 검색",
|
||||
"search_no_people": "인물이 없습니다.",
|
||||
"search_no_people_named": "\"{name}\" 인물을 찾을 수 없음",
|
||||
"search_options": "검색 옵션",
|
||||
"search_people": "인물 검색",
|
||||
"search_places": "장소 검색",
|
||||
"search_rating": "등급으로 검색...",
|
||||
"search_settings": "설정 검색",
|
||||
"search_state": "지역 검색...",
|
||||
"search_tags": "태그로 검색...",
|
||||
@@ -1107,6 +1151,7 @@
|
||||
"searching_locales": "로케일 검색...",
|
||||
"second": "초",
|
||||
"see_all_people": "모든 인물 보기",
|
||||
"select": "선택",
|
||||
"select_album_cover": "앨범 커버 변경",
|
||||
"select_all": "모두 선택",
|
||||
"select_all_duplicates": "모두 선택",
|
||||
@@ -1129,6 +1174,7 @@
|
||||
"server_version": "서버 버전",
|
||||
"set": "설정",
|
||||
"set_as_album_cover": "앨범 커버로 설정",
|
||||
"set_as_featured_photo": "추천 사진으로 설정",
|
||||
"set_as_profile_picture": "프로필 사진으로 설정",
|
||||
"set_date_of_birth": "생년월일 설정",
|
||||
"set_profile_picture": "프로필 사진으로 설정",
|
||||
@@ -1143,6 +1189,7 @@
|
||||
"shared_from_partner": "{partner}님의 사진",
|
||||
"shared_link_options": "공유 링크 옵션",
|
||||
"shared_links": "공유 링크",
|
||||
"shared_links_description": "링크를 통해 사진 및 동영상 공유",
|
||||
"shared_photos_and_videos_count": "사진 및 동영상 {assetCount, plural, other {#개를 공유했습니다.}}",
|
||||
"shared_with_partner": "{partner}님과 공유함",
|
||||
"sharing": "공유",
|
||||
@@ -1165,6 +1212,7 @@
|
||||
"show_person_options": "인물 옵션 표시",
|
||||
"show_progress_bar": "진행 표시줄 표시",
|
||||
"show_search_options": "검색 옵션 표시",
|
||||
"show_shared_links": "공유 링크 표시",
|
||||
"show_slideshow_transition": "슬라이드 전환 표시",
|
||||
"show_supporter_badge": "서포터 배지",
|
||||
"show_supporter_badge_description": "서포터 배지 표시",
|
||||
@@ -1184,6 +1232,7 @@
|
||||
"sort_items": "항목 수",
|
||||
"sort_modified": "수정된 날짜",
|
||||
"sort_oldest": "오래된 사진",
|
||||
"sort_people_by_similarity": "유사성을 기준으로 사람 정렬",
|
||||
"sort_recent": "최근 사진",
|
||||
"sort_title": "제목",
|
||||
"source": "소스",
|
||||
@@ -1217,6 +1266,7 @@
|
||||
"tag_created": "태그 생성됨: {tag}",
|
||||
"tag_feature_description": "사진 및 동영상을 주제별 그룹화된 태그로 탐색",
|
||||
"tag_not_found_question": "태그를 찾을 수 없나요? <link>새 태그를 생성하세요.</link>",
|
||||
"tag_people": "사람 태그",
|
||||
"tag_updated": "태그 업데이트됨: {tag}",
|
||||
"tagged_assets": "항목 {count, plural, one {#개} other {#개}}에 태그를 적용함",
|
||||
"tags": "태그",
|
||||
@@ -1237,6 +1287,7 @@
|
||||
"to_trash": "삭제",
|
||||
"toggle_settings": "설정 변경",
|
||||
"toggle_theme": "다크 모드 사용",
|
||||
"total": "합계",
|
||||
"total_usage": "총 사용량",
|
||||
"trash": "휴지통",
|
||||
"trash_all": "모두 삭제",
|
||||
@@ -1256,6 +1307,7 @@
|
||||
"unlink_motion_video": "모션 비디오 링크 해제",
|
||||
"unlink_oauth": "OAuth 연결 해제",
|
||||
"unlinked_oauth_account": "OAuth 계정 연결이 해제되었습니다.",
|
||||
"unmute_memories": "추억 음소거 해제",
|
||||
"unnamed_album": "이름 없는 앨범",
|
||||
"unnamed_album_delete_confirmation": "선텍한 앨범을 삭제하시겠습니까?",
|
||||
"unnamed_share": "이름 없는 공유",
|
||||
@@ -1287,6 +1339,7 @@
|
||||
"user_purchase_settings_description": "구매 및 제품 키 관리",
|
||||
"user_role_set": "{user}님에게 {role} 역할을 설정했습니다.",
|
||||
"user_usage_detail": "사용자 사용량 상세",
|
||||
"user_usage_stats": "계정 사용량 통계",
|
||||
"user_usage_stats_description": "계정 사용량 통계 보기",
|
||||
"username": "계정명",
|
||||
"users": "사용자",
|
||||
@@ -1308,7 +1361,9 @@
|
||||
"view_all": "모두 보기",
|
||||
"view_all_users": "모든 사용자 보기",
|
||||
"view_in_timeline": "타임라인에서 보기",
|
||||
"view_link": "링크 보기",
|
||||
"view_links": "링크 확인",
|
||||
"view_name": "보기",
|
||||
"view_next_asset": "다음 항목 보기",
|
||||
"view_previous_asset": "이전 항목 보기",
|
||||
"view_stack": "스택 보기",
|
||||
@@ -1323,4 +1378,4 @@
|
||||
"yes": "네",
|
||||
"you_dont_have_any_shared_links": "생성한 공유 링크가 없습니다.",
|
||||
"zoom_image": "이미지 확대"
|
||||
}
|
||||
}
|
||||
|
||||
76
i18n/lv.json
76
i18n/lv.json
@@ -13,7 +13,7 @@
|
||||
"add_a_location": "Pievienot atrašanās vietu",
|
||||
"add_a_name": "Pievienot vārdu",
|
||||
"add_a_title": "Pievienot virsrakstu",
|
||||
"add_exclusion_pattern": "Pievienot izņēmuma šablonu",
|
||||
"add_exclusion_pattern": "Pievienot izslēgšanas šablonu",
|
||||
"add_import_path": "Pievienot importa ceļu",
|
||||
"add_location": "Pievienot lokāciju",
|
||||
"add_more_users": "Pievienot vēl lietotājus",
|
||||
@@ -29,11 +29,13 @@
|
||||
"added_to_favorites_count": "Pievienots {count, number} izlasei",
|
||||
"admin": {
|
||||
"add_exclusion_pattern_description": "Pievienojiet izlaišanas shēmas. Aizstājējzīmju izmantoša *, **, un ? tiek atbalstīta. Lai ignorētu visus failus jebkurā direktorijā ar nosaukumu “RAW”, izmantojiet “**/RAW/**”. Lai ignorētu visus failus, kas beidzas ar “. tif”, izmantojiet “**/*. tif”. Lai ignorētu absolūto ceļu, izmantojiet “/path/to/ignore/**”.",
|
||||
"asset_offline_description": "Šis ārējās bibliotēkas resurss vairs nav atrodams diskā un ir pārvietots uz atkritumu grozu. Ja fails tika pārvietots bibliotēkas ietvaros, pārbaudiet, vai jūsu hronoloģijā ir jauns atbilstošais resurss. Lai atjaunotu šo resursu, pārliecinieties, vai Immich var piekļūt tālāk norādītajam faila ceļam un skenēt bibliotēku.",
|
||||
"authentication_settings": "Autentifikācijas iestatījumi",
|
||||
"authentication_settings_description": "Pārvaldīt paroles, OAuth un citus autentifikācijas iestatījumus",
|
||||
"authentication_settings_description": "Paroļu, OAuth un citu autentifikācijas iestatījumu pārvaldība",
|
||||
"authentication_settings_disable_all": "Vai tiešām vēlaties atspējot visas pieteikšanās metodes? Pieteikšanās tiks pilnībā atspējota.",
|
||||
"authentication_settings_reenable": "Lai atkārtoti iespējotu, izmantojiet <link>Servera Komandu</link>.",
|
||||
"background_task_job": "Fona Uzdevumi",
|
||||
"backup_settings_description": "Datubāzes dublēšanas iestatījumu pārvaldība",
|
||||
"check_all": "Pārbaudīt Visu",
|
||||
"cleared_jobs": "Notīrīti uzdevumi priekš: {job}",
|
||||
"config_set_by_file": "Konfigurāciju pašlaik iestata konfigurācijas fails",
|
||||
@@ -61,14 +63,14 @@
|
||||
"image_thumbnail_title": "Sīktēlu iestatījumi",
|
||||
"job_created": "Uzdevums izveidots",
|
||||
"job_settings": "Uzdevumu iestatījumi",
|
||||
"job_settings_description": "Pārvaldīt uzdevumu izpildes vienlaicīgumu",
|
||||
"job_settings_description": "Uzdevumu izpildes vienlaicīguma pārvaldība",
|
||||
"job_status": "Uzdevumu statuss",
|
||||
"library_deleted": "Bibliotēka dzēsta",
|
||||
"library_scanning": "",
|
||||
"library_scanning_description": "",
|
||||
"library_scanning_enable_description": "",
|
||||
"library_settings": "",
|
||||
"library_settings_description": "",
|
||||
"library_settings_description": "Ārējo bibliotēku iestatījumu pārvaldība",
|
||||
"library_tasks_description": "",
|
||||
"library_watching_enable_description": "",
|
||||
"library_watching_settings": "",
|
||||
@@ -95,28 +97,33 @@
|
||||
"machine_learning_min_recognized_faces": "",
|
||||
"machine_learning_min_recognized_faces_description": "",
|
||||
"machine_learning_settings": "Mašīnmācīšanās iestatījumi",
|
||||
"machine_learning_settings_description": "",
|
||||
"machine_learning_settings_description": "Mašīnmācīšanās funkciju un iestatījumu pārvaldība",
|
||||
"machine_learning_smart_search": "Viedā meklēšana",
|
||||
"machine_learning_smart_search_description": "",
|
||||
"machine_learning_smart_search_enabled_description": "",
|
||||
"machine_learning_url_description": "Mašīnmācīšanās servera URL",
|
||||
"manage_log_settings": "",
|
||||
"manage_concurrency": "Vienlaicīgas darbības pārvaldība",
|
||||
"manage_log_settings": "Žurnāla iestatījumu pārvaldība",
|
||||
"map_dark_style": "",
|
||||
"map_enable_description": "",
|
||||
"map_gps_settings": "Kartes un GPS iestatījumi",
|
||||
"map_gps_settings_description": "Pārvaldīt karšu un GPS (apgrieztās ģeokodēšanas) iestatījumus",
|
||||
"map_gps_settings_description": "Karšu un GPS (apgrieztās ģeokodēšanas) iestatījumu pārvaldība",
|
||||
"map_light_style": "",
|
||||
"map_manage_reverse_geocoding_settings": "<link>Reversās ģeokodēšanas</link> iestatījumu pārvaldība",
|
||||
"map_reverse_geocoding": "",
|
||||
"map_reverse_geocoding_enable_description": "",
|
||||
"map_reverse_geocoding_settings": "",
|
||||
"map_settings": "Karte",
|
||||
"map_settings_description": "",
|
||||
"map_settings_description": "Kartes iestatījumu pārvaldība",
|
||||
"map_style_description": "",
|
||||
"metadata_extraction_job": "Metadatu iegūšana",
|
||||
"metadata_extraction_job_description": "",
|
||||
"metadata_settings": "Metadatu iestatījumi",
|
||||
"metadata_settings_description": "Metadatu iestatījumu pārvaldība",
|
||||
"migration_job": "Migrācija",
|
||||
"migration_job_description": "",
|
||||
"no_paths_added": "Nav pievienots neviens ceļš",
|
||||
"no_pattern_added": "Nav pievienots neviens izslēgšanas šablons",
|
||||
"note_cannot_be_changed_later": "PIEZĪME: Vēlāk to vairs nevar mainīt!",
|
||||
"notification_email_from_address": "No adreses",
|
||||
"notification_email_from_address_description": "Sūtītāja e-pasta adrese, piemēram: “Immich foto serveris <noreply@example.com>”",
|
||||
@@ -133,7 +140,7 @@
|
||||
"notification_email_username_description": "",
|
||||
"notification_enable_email_notifications": "",
|
||||
"notification_settings": "Paziņojumu iestatījumi",
|
||||
"notification_settings_description": "",
|
||||
"notification_settings_description": "Paziņojumu iestatījumu, tostarp e-pasta, pārvaldība",
|
||||
"oauth_auto_launch": "",
|
||||
"oauth_auto_launch_description": "",
|
||||
"oauth_auto_register": "",
|
||||
@@ -150,17 +157,17 @@
|
||||
"oauth_profile_signing_algorithm_description": "Lietotāja profila parakstīšanai izmantotais algoritms.",
|
||||
"oauth_scope": "",
|
||||
"oauth_settings": "OAuth",
|
||||
"oauth_settings_description": "",
|
||||
"oauth_settings_description": "OAuth pieteikšanās iestatījumu pārvaldība",
|
||||
"oauth_signing_algorithm": "Parakstīšanas algoritms",
|
||||
"oauth_storage_label_claim": "",
|
||||
"oauth_storage_label_claim_description": "",
|
||||
"oauth_storage_quota_claim": "",
|
||||
"oauth_storage_quota_claim_description": "",
|
||||
"oauth_storage_quota_default": "",
|
||||
"oauth_storage_quota_default": "Noklusējuma krātuves kvota (GiB)",
|
||||
"oauth_storage_quota_default_description": "",
|
||||
"password_enable_description": "Pieteikšanās ar e-pasta adresi un paroli",
|
||||
"password_settings": "Pieteikšanās ar paroli",
|
||||
"password_settings_description": "Pārvaldīt pieteikšanās ar paroli iestatījumus",
|
||||
"password_settings_description": "Pieteikšanās ar paroli iestatījumu pārvaldība",
|
||||
"person_cleanup_job": "Personu tīrīšana",
|
||||
"quota_size_gib": "Kvotas izmērs (GiB)",
|
||||
"registration": "Administratora reģistrācija",
|
||||
@@ -171,23 +178,27 @@
|
||||
"server_external_domain_settings": "",
|
||||
"server_external_domain_settings_description": "",
|
||||
"server_settings": "Servera iestatījumi",
|
||||
"server_settings_description": "Pārvaldīt servera iestatījumus",
|
||||
"server_settings_description": "Servera iestatījumu pārvaldība",
|
||||
"server_welcome_message": "",
|
||||
"server_welcome_message_description": "",
|
||||
"sidecar_job_description": "",
|
||||
"slideshow_duration_description": "",
|
||||
"smart_search_job_description": "",
|
||||
"storage_template_date_time_sample": "Laika paraugs {date}",
|
||||
"storage_template_enable_description": "",
|
||||
"storage_template_hash_verification_enabled": "",
|
||||
"storage_template_hash_verification_enabled_description": "",
|
||||
"storage_template_migration_job": "",
|
||||
"storage_template_settings": "",
|
||||
"storage_template_migration": "Krātuves veidņu migrācija",
|
||||
"storage_template_migration_job": "Krātuves veidņu migrācijas uzdevums",
|
||||
"storage_template_settings": "Krātuves veidne",
|
||||
"storage_template_settings_description": "",
|
||||
"system_settings": "Sistēmas iestatījumi",
|
||||
"template_email_settings_description": "Pielāgotu e-pasta paziņojumu veidņu pārvaldība",
|
||||
"template_settings_description": "Pielāgotu paziņojumu veidņu pārvaldība",
|
||||
"theme_custom_css_settings": "Pielāgots CSS",
|
||||
"theme_custom_css_settings_description": "",
|
||||
"theme_settings": "",
|
||||
"theme_settings_description": "",
|
||||
"theme_settings_description": "Immich tīmekļa saskarnes pielāgojumu pārvaldība",
|
||||
"thumbnail_generation_job_description": "",
|
||||
"transcoding_acceleration_api": "",
|
||||
"transcoding_acceleration_api_description": "",
|
||||
@@ -246,14 +257,14 @@
|
||||
"trash_number_of_days": "Dienu skaits",
|
||||
"trash_number_of_days_description": "",
|
||||
"trash_settings": "",
|
||||
"trash_settings_description": "",
|
||||
"trash_settings_description": "Atkritnes iestatījumu pārvaldība",
|
||||
"user_delete_delay_settings": "",
|
||||
"user_delete_delay_settings_description": "",
|
||||
"user_management": "Lietotāju pārvaldība",
|
||||
"user_password_has_been_reset": "Lietotāja parole ir atiestatīta:",
|
||||
"user_restore_description": "<b>{user}</b> konts tiks atjaunots.",
|
||||
"user_settings": "",
|
||||
"user_settings_description": "",
|
||||
"user_settings_description": "Lietotāju iestatījumu pārvaldība",
|
||||
"version_check_enabled_description": "Ieslēgt versijas pārbaudi",
|
||||
"version_check_implications": "Versiju pārbaudes funkcija ir atkarīga no periodiskas saziņas ar github.com",
|
||||
"version_check_settings": "Versijas pārbaude",
|
||||
@@ -306,6 +317,8 @@
|
||||
"birthdate_set_description": "Dzimšanas datums tiek izmantots, lai aprēķinātu šīs personas vecumu fotogrāfijas uzņemšanas brīdī.",
|
||||
"blurred_background": "",
|
||||
"bugs_and_feature_requests": "Kļūdas un funkciju pieprasījumi",
|
||||
"build": "Būvējums",
|
||||
"build_image": "Būvējuma attēls",
|
||||
"camera": "",
|
||||
"camera_brand": "",
|
||||
"camera_model": "",
|
||||
@@ -398,6 +411,7 @@
|
||||
"done": "Gatavs",
|
||||
"download": "Lejupielādēt",
|
||||
"download_settings": "Lejupielāde",
|
||||
"download_settings_description": "Ar failu lejupielādi saistīto iestatījumu pārvaldība",
|
||||
"downloading": "",
|
||||
"duplicates": "Dublikāti",
|
||||
"duration": "",
|
||||
@@ -490,6 +504,7 @@
|
||||
"favorite_or_unfavorite_photo": "",
|
||||
"favorites": "Izlase",
|
||||
"feature_photo_updated": "",
|
||||
"features_setting_description": "Lietotnes funkciju pārvaldība",
|
||||
"file_name": "",
|
||||
"file_name_or_extension": "",
|
||||
"filename": "",
|
||||
@@ -559,13 +574,13 @@
|
||||
"loop_videos": "",
|
||||
"loop_videos_description": "Iespējot, lai automātiski videoklips tiktu cikliski palaists detaļu skatītājā.",
|
||||
"make": "Firma",
|
||||
"manage_shared_links": "Pārvaldīt Kopīgotās saites",
|
||||
"manage_sharing_with_partners": "",
|
||||
"manage_the_app_settings": "",
|
||||
"manage_your_account": "",
|
||||
"manage_your_api_keys": "",
|
||||
"manage_your_devices": "",
|
||||
"manage_your_oauth_connection": "",
|
||||
"manage_shared_links": "Kopīgoto saišu pārvaldība",
|
||||
"manage_sharing_with_partners": "Koplietošanas ar partneriem pārvaldība",
|
||||
"manage_the_app_settings": "Lietotnes iestatījumu pārvaldība",
|
||||
"manage_your_account": "Sava konta pārvaldība",
|
||||
"manage_your_api_keys": "API atslēgu pārvaldība",
|
||||
"manage_your_devices": "Pieslēgto ierīču pārvaldība",
|
||||
"manage_your_oauth_connection": "OAuth savienojumu pārvaldība",
|
||||
"map": "Karte",
|
||||
"map_marker_for_images": "Kartes marķieris attēliem, kas uzņemti {city}, {country}",
|
||||
"map_marker_with_image": "Kartes marķieris ar attēlu",
|
||||
@@ -587,7 +602,7 @@
|
||||
"model": "Modelis",
|
||||
"month": "Mēnesis",
|
||||
"more": "Vairāk",
|
||||
"moved_to_trash": "",
|
||||
"moved_to_trash": "Pārvietots uz atkritni",
|
||||
"my_albums": "Mani albumi",
|
||||
"name": "Vārds",
|
||||
"name_or_nickname": "Vārds vai iesauka",
|
||||
@@ -619,7 +634,7 @@
|
||||
"notes": "Piezīmes",
|
||||
"notification_toggle_setting_description": "Ieslēgt e-pasta paziņojumus",
|
||||
"notifications": "Paziņojumi",
|
||||
"notifications_setting_description": "",
|
||||
"notifications_setting_description": "Paziņojumu pārvaldība",
|
||||
"oauth": "OAuth",
|
||||
"official_immich_resources": "Oficiālie Immich resursi",
|
||||
"offline": "Bezsaistē",
|
||||
@@ -689,6 +704,7 @@
|
||||
"purchase_server_description_1": "Visam serverim",
|
||||
"purchase_server_description_2": "Atbalstītāja statuss",
|
||||
"purchase_server_title": "Serveris",
|
||||
"purchase_settings_server_activated": "Servera produkta atslēgu pārvalda administrators",
|
||||
"reaction_options": "",
|
||||
"read_changelog": "Lasīt izmaiņu sarakstu",
|
||||
"recent": "",
|
||||
@@ -811,7 +827,7 @@
|
||||
"sort_oldest": "Vecākā fotogrāfija",
|
||||
"sort_recent": "Nesenākā fotogrāfija",
|
||||
"sort_title": "Nosaukums",
|
||||
"source": "Avots",
|
||||
"source": "Pirmkods",
|
||||
"stack": "Apvienot kaudzē",
|
||||
"stack_selected_photos": "",
|
||||
"stacktrace": "",
|
||||
@@ -820,7 +836,7 @@
|
||||
"status": "Statuss",
|
||||
"stop_motion_photo": "",
|
||||
"stop_photo_sharing": "Beigt kopīgot jūsu fotogrāfijas?",
|
||||
"storage": "Uzglabāšanas vieta",
|
||||
"storage": "Vieta krātuvē",
|
||||
"storage_label": "",
|
||||
"storage_usage": "{used} no {available} izmantoti",
|
||||
"submit": "Iesniegt",
|
||||
@@ -870,6 +886,7 @@
|
||||
"usage": "Lietojums",
|
||||
"user": "Lietotājs",
|
||||
"user_id": "Lietotāja ID",
|
||||
"user_purchase_settings_description": "Pirkuma pārvaldība",
|
||||
"user_usage_detail": "Informācija par lietotāju lietojumu",
|
||||
"username": "Lietotājvārds",
|
||||
"users": "Lietotāji",
|
||||
@@ -879,6 +896,7 @@
|
||||
"version": "Versija",
|
||||
"version_announcement_message": "Sveiki! Ir pieejama jauna Immich versija. Lūdzu, veltiet laiku, lai izlasītu <link>laidiena piezīmes</link> un pārliecinātos, ka jūsu iestatījumi ir atjaunināti, lai novērstu jebkādu nepareizu konfigurāciju, jo īpaši, ja izmantojat WatchTower vai citu mehānismu, kas automātiski atjaunina jūsu Immich instanci.",
|
||||
"version_history": "Versiju vēsture",
|
||||
"version_history_item": "{version} uzstādīta {date}",
|
||||
"video": "Videoklips",
|
||||
"video_hover_setting_description": "",
|
||||
"videos": "Videoklipi",
|
||||
|
||||
@@ -987,6 +987,7 @@
|
||||
"permanently_deleted_asset": "Filen har blitt permanent slettet",
|
||||
"permanently_deleted_assets_count": "Permanent slett {count, plural, one {# asset} other {# assets}}",
|
||||
"person": "Person",
|
||||
"person_birthdate": "Født den {date}",
|
||||
"person_hidden": "{name}{hidden, select, true { (skjult)} other {}}",
|
||||
"photo_shared_all_users": "Det ser ut som om du deler bildene med alle brukere eller det er ingen brukere å dele med.",
|
||||
"photos": "Bilder",
|
||||
@@ -1078,6 +1079,8 @@
|
||||
"remove_from_album": "Fjern fra album",
|
||||
"remove_from_favorites": "Fjern fra favoritter",
|
||||
"remove_from_shared_link": "Fjern fra delt lenke",
|
||||
"remove_memory": "Slett minne",
|
||||
"remove_photo_from_memory": "Slett bilde fra dette minne",
|
||||
"remove_url": "Fjern URL",
|
||||
"remove_user": "Fjern bruker",
|
||||
"removed_api_key": "Fjernet API-nøkkel: {name}",
|
||||
@@ -1148,6 +1151,7 @@
|
||||
"searching_locales": "Søker lokaler...",
|
||||
"second": "Sekund",
|
||||
"see_all_people": "Vis alle mennesker",
|
||||
"select": "Velg",
|
||||
"select_album_cover": "Velg albumomslag",
|
||||
"select_all": "Velg alle",
|
||||
"select_all_duplicates": "Velg alle duplikater",
|
||||
@@ -1374,4 +1378,4 @@
|
||||
"yes": "Ja",
|
||||
"you_dont_have_any_shared_links": "Du har ingen delte lenker",
|
||||
"zoom_image": "Zoom Bilde"
|
||||
}
|
||||
}
|
||||
|
||||
10
i18n/nl.json
10
i18n/nl.json
@@ -987,6 +987,7 @@
|
||||
"permanently_deleted_asset": "Asset permanent verwijderd",
|
||||
"permanently_deleted_assets_count": "{count, plural, one {# asset} other {# assets}} permanent verwijderd",
|
||||
"person": "Persoon",
|
||||
"person_birthdate": "Geboren op {date}",
|
||||
"person_hidden": "{name}{hidden, select, true { (verborgen)} other {}}",
|
||||
"photo_shared_all_users": "Het lijkt erop dat je foto's met alle gebruikers zijn gedeeld, of dat je geen gebruikers hebt om mee te delen.",
|
||||
"photos": "Foto's",
|
||||
@@ -1078,14 +1079,16 @@
|
||||
"remove_from_album": "Verwijder uit album",
|
||||
"remove_from_favorites": "Verwijderen uit favorieten",
|
||||
"remove_from_shared_link": "Verwijderen uit gedeelde link",
|
||||
"remove_memory": "Herinnering verwijderen",
|
||||
"remove_photo_from_memory": "Foto uit deze herinnering verwijderen",
|
||||
"remove_url": "Verwijder URL",
|
||||
"remove_user": "Gebruiker verwijderen",
|
||||
"removed_api_key": "API sleutel verwijderd: {name}",
|
||||
"removed_from_archive": "Verwijderd uit archief",
|
||||
"removed_from_favorites": "Verwijderd uit favorieten",
|
||||
"removed_from_favorites_count": "{count, plural, other {# verwijderd}} uit favorieten",
|
||||
"removed_memory": "Geheugen verwijderd",
|
||||
"removed_photo_from_memory": "Foto verwijderd uit geheugen",
|
||||
"removed_memory": "Herinnering verwijderd",
|
||||
"removed_photo_from_memory": "Foto verwijderd uit herinnering",
|
||||
"removed_tagged_assets": "Tag verwijderd van {count, plural, one {# asset} other {# assets}}",
|
||||
"rename": "Hernoemen",
|
||||
"repair": "Repareren",
|
||||
@@ -1148,6 +1151,7 @@
|
||||
"searching_locales": "Zoeken naar landinstellingen...",
|
||||
"second": "Seconde",
|
||||
"see_all_people": "Bekijk alle mensen",
|
||||
"select": "Selecteer",
|
||||
"select_album_cover": "Selecteer album cover",
|
||||
"select_all": "Alles selecteren",
|
||||
"select_all_duplicates": "Selecteer alle duplicaten",
|
||||
@@ -1374,4 +1378,4 @@
|
||||
"yes": "Ja",
|
||||
"you_dont_have_any_shared_links": "Je hebt geen gedeelde links",
|
||||
"zoom_image": "Inzoomen"
|
||||
}
|
||||
}
|
||||
|
||||
1
i18n/pa.json
Normal file
1
i18n/pa.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
12
i18n/pl.json
12
i18n/pl.json
@@ -243,7 +243,7 @@
|
||||
"storage_template_hash_verification_enabled_description": "Włącza weryfikację sumy kontrolnej. Nie wyłączaj tej opcji, jeśli nie jesteś pewien konsekwencji",
|
||||
"storage_template_migration": "Migracja szablonu magazynu",
|
||||
"storage_template_migration_description": "Zastosuj aktualny szablon <link>{template}</link> do wcześniej przesłanych zasobów",
|
||||
"storage_template_migration_info": "Zmiany w szablonie zostaną zastosowane tylko do nowych zasobów. Aby wstecznie zastosować szablon do wcześniej przesłanych zasobów, uruchom zadanie <link>{job}</link>.",
|
||||
"storage_template_migration_info": "Szablon Magazynu przekonwertuje wszystkie rozszerzenia na pisane małą literą. Zmiany w szablonie zostaną zastosowane tylko do nowych zasobów. Aby wstecznie zastosować szablon do wcześniej przesłanych zasobów, uruchom zadanie <link>{job}</link>.",
|
||||
"storage_template_migration_job": "Zadanie migracji szablonu przechowywania",
|
||||
"storage_template_more_details": "Aby uzyskać więcej szczegółów na temat tej funkcji, odwiedź <template-link>Szablon Przechowywania</template-link> oraz jego <implications-link>implikacje</implications-link>",
|
||||
"storage_template_onboarding_description": "Po włączeniu tej funkcji pliki będą organizowane automatycznie na podstawie szablonu zdefiniowanego przez użytkownika. Obecnie domyślnie wyłączona przez problemy ze stabilnością. Więcej informacji znajdziesz w <link>dokumentacji</link>.",
|
||||
@@ -829,7 +829,7 @@
|
||||
"language": "Język",
|
||||
"language_setting_description": "Wybierz swój preferowany język",
|
||||
"last_seen": "Ostatnio widziane",
|
||||
"latest_version": "Ostatnia Wersja",
|
||||
"latest_version": "Najnowsza Wersja",
|
||||
"latitude": "Szerokość geograficzna",
|
||||
"leave": "Opuść",
|
||||
"lens_model": "Model obiektywu",
|
||||
@@ -987,6 +987,7 @@
|
||||
"permanently_deleted_asset": "Pomyślnie trwale usunięto zasób",
|
||||
"permanently_deleted_assets_count": "Trwale usunięto {count, plural, one {# zasób} other {# zasobów}}",
|
||||
"person": "Osoba",
|
||||
"person_birthdate": "Urodzony {date}",
|
||||
"person_hidden": "{name}{hidden, select, true { (ukryty)} other {}}",
|
||||
"photo_shared_all_users": "Wygląda na to, że udostępniłeś swoje zdjęcia wszystkim użytkownikom lub nie masz żadnego użytkownika, z którym można by było je udostępnić.",
|
||||
"photos": "Zdjęcia",
|
||||
@@ -1148,6 +1149,7 @@
|
||||
"searching_locales": "Wyszukaj region...",
|
||||
"second": "Sekunda",
|
||||
"see_all_people": "Zobacz wszystkie osoby",
|
||||
"select": "Wybierz",
|
||||
"select_album_cover": "Wybierz okładkę albumu",
|
||||
"select_all": "Zaznacz wszystko",
|
||||
"select_all_duplicates": "Wybierz wszystkie duplikaty",
|
||||
@@ -1318,13 +1320,13 @@
|
||||
"updated_password": "Pomyślnie zaktualizowano hasło",
|
||||
"upload": "Prześlij",
|
||||
"upload_concurrency": "Współbieżność wysyłania",
|
||||
"upload_errors": "Przesyłanie zakończone z {count, plural, one {# błąd} other {# błędy}}. Odśwież stronę, aby zobaczyć nowe przesłane zasoby.",
|
||||
"upload_errors": "Przesyłanie zakończone z {count, plural, one {# błąd} other {# błędy}}. Odśwież stronę, aby zobaczyć nowo przesłane zasoby.",
|
||||
"upload_progress": "Pozostałe {remaining, number} - Przetworzone {processed, number}/{total, number}",
|
||||
"upload_skipped_duplicates": "Pominięte {count, plural, one {# zduplikowany zasób} other {# zduplikowane zasoby}}",
|
||||
"upload_status_duplicates": "Duplikaty",
|
||||
"upload_status_errors": "Błędy",
|
||||
"upload_status_uploaded": "Przesłano",
|
||||
"upload_success": "Przesyłanie powiodło się, odśwież stronę, aby zobaczyć nowe przesłane zasoby.",
|
||||
"upload_success": "Przesyłanie powiodło się, odśwież stronę, aby zobaczyć nowo przesłane zasoby.",
|
||||
"url": "URL",
|
||||
"usage": "Użycie",
|
||||
"use_custom_date_range": "Zamiast tego użyj niestandardowego zakresu dat",
|
||||
@@ -1374,4 +1376,4 @@
|
||||
"yes": "Tak",
|
||||
"you_dont_have_any_shared_links": "Nie masz żadnych udostępnionych linków",
|
||||
"zoom_image": "Powiększ obraz"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -302,7 +302,7 @@
|
||||
"transcoding_max_b_frames": "Máximo de quadros B",
|
||||
"transcoding_max_b_frames_description": "Valores mais altos melhoram a eficiência da compressão, mas tornam a codificação mais lenta. Pode não ser compatível com aceleração de hardware em dispositivos mais antigos. 0 desativa os quadros B, enquanto -1 define esse valor automaticamente.",
|
||||
"transcoding_max_bitrate": "Taxa de bits máxima",
|
||||
"transcoding_max_bitrate_description": "Definir uma taxa de bits máxima pode tornar os tamanhos dos ficheiros mais previsíveis com um custo menor de qualidade. Em 720p, os valores típicos são 2.600k para VP9 ou HEVC, ou 4.500k para H.264. Desativado se definido como 0.",
|
||||
"transcoding_max_bitrate_description": "Definir uma taxa de bits máxima pode tornar os tamanhos dos ficheiros mais previsíveis com um custo menor de qualidade. Em 720p, os valores típicos são 2600 kbit/s para VP9 ou HEVC, ou 4500 kbit/s para H.264. Desativado se definido como 0.",
|
||||
"transcoding_max_keyframe_interval": "Intervalo máximo de quadro-chave",
|
||||
"transcoding_max_keyframe_interval_description": "Define a distância máxima do quadro entre os quadros-chave. Valores mais baixos pioram a eficiência da compressão, mas melhoram os tempos de procura e podem melhorar a qualidade em cenas com movimento rápido. 0 define esse valor automaticamente.",
|
||||
"transcoding_optimal_description": "Vídeos com resolução superior à desejada ou num formato não aceite",
|
||||
@@ -987,6 +987,7 @@
|
||||
"permanently_deleted_asset": "Ficheiro eliminado permanentemente",
|
||||
"permanently_deleted_assets_count": "{count, plural, one {# Ficheiro eliminado} other {# Ficheiros eliminados}} permanentemente",
|
||||
"person": "Pessoa",
|
||||
"person_birthdate": "Nasceu a {date}",
|
||||
"person_hidden": "{name}{hidden, select, true { (oculto)} other {}}",
|
||||
"photo_shared_all_users": "Parece que partilhou as suas fotos com todos os utilizadores ou não tem nenhum utilizador para partilhar.",
|
||||
"photos": "Fotos",
|
||||
@@ -1078,6 +1079,8 @@
|
||||
"remove_from_album": "Remover do álbum",
|
||||
"remove_from_favorites": "Remover dos favoritos",
|
||||
"remove_from_shared_link": "Remover do link partilhado",
|
||||
"remove_memory": "Remover memória",
|
||||
"remove_photo_from_memory": "Remover foto desta memória",
|
||||
"remove_url": "Remover URL",
|
||||
"remove_user": "Remover utilizador",
|
||||
"removed_api_key": "Foi removida a Chave de API: {name}",
|
||||
@@ -1094,7 +1097,7 @@
|
||||
"repository": "Repositório",
|
||||
"require_password": "Proteger com palavra-passe",
|
||||
"require_user_to_change_password_on_first_login": "Obrigar utilizador a alterar a palavra-passe após o primeiro início de sessão",
|
||||
"rescan": "Reescanear",
|
||||
"rescan": "Reanalisar",
|
||||
"reset": "Redefinir",
|
||||
"reset_password": "Redefinir palavra-passe",
|
||||
"reset_people_visibility": "Redefinir pessoas ocultas",
|
||||
@@ -1148,6 +1151,7 @@
|
||||
"searching_locales": "A pesquisar Lugares....",
|
||||
"second": "Segundo",
|
||||
"see_all_people": "Ver todas as pessoas",
|
||||
"select": "Selecionar",
|
||||
"select_album_cover": "Escolher capa do álbum",
|
||||
"select_all": "Selecionar todos",
|
||||
"select_all_duplicates": "Selecionar todos os itens duplicados",
|
||||
|
||||
@@ -252,7 +252,7 @@
|
||||
"storage_template_settings_description": "Gerencie a estrutura de pasta e o nome do arquivo carregado",
|
||||
"storage_template_user_label": "<code>{label}</code> é o Rótulo de Armazenamento do usuário",
|
||||
"system_settings": "Configurações do Sistema",
|
||||
"tag_cleanup_job": "Limpeza de tags",
|
||||
"tag_cleanup_job": "Limpeza de marcadores",
|
||||
"template_email_available_tags": "Você pode usar as seguintes variáveis no modelo: {tags}",
|
||||
"template_email_if_empty": "Se o modelo estiver em branco, o modelo de e-mail padrão será usado.",
|
||||
"template_email_invite_album": "Modelo do e-mail de convite para álbum",
|
||||
@@ -302,7 +302,7 @@
|
||||
"transcoding_max_b_frames": "Máximo de quadros B",
|
||||
"transcoding_max_b_frames_description": "Valores mais altos melhoram a eficiência da compactação, mas retardam a codificação. Pode não ser compatível com aceleração de hardware em dispositivos mais antigos. 0 desativa os quadros B, enquanto -1 define esse valor automaticamente.",
|
||||
"transcoding_max_bitrate": "Taxa de bits máxima",
|
||||
"transcoding_max_bitrate_description": "Definir uma taxa de bits máxima pode tornar os tamanhos dos arquivos mais previsíveis com um custo menor de qualidade. Em 720p, os valores típicos são 2.600k para VP9 ou HEVC, ou 4.500k para H.264. Desativado se definido como 0.",
|
||||
"transcoding_max_bitrate_description": "Definir uma taxa de bits máxima pode tornar os tamanhos dos arquivos mais previsíveis com um custo menor de qualidade. Em 720p, os valores típicos são 2.600 kbit/s para VP9 ou HEVC, ou 4.500 kbit/s para H.264. Desativado se definido como 0.",
|
||||
"transcoding_max_keyframe_interval": "Intervalo máximo de quadro-chave",
|
||||
"transcoding_max_keyframe_interval_description": "Define a distância máxima do quadro entre os quadros-chave. Valores mais baixos pioram a eficiência da compressão, mas melhoram os tempos de busca e podem melhorar a qualidade em cenas com movimento rápido. 0 define esse valor automaticamente.",
|
||||
"transcoding_optimal_description": "Vídeos com resolução superior à desejada ou em formato não aceito",
|
||||
@@ -513,8 +513,8 @@
|
||||
"create_new_person": "Criar nova pessoa",
|
||||
"create_new_person_hint": "Atribuir arquivos selecionados a uma nova pessoa",
|
||||
"create_new_user": "Criar novo usuário",
|
||||
"create_tag": "Criar tag",
|
||||
"create_tag_description": "Crie uma nova tag. Para tags compostas, digite o caminho completo da tag, inclusive as barras.",
|
||||
"create_tag": "Criar marcador",
|
||||
"create_tag_description": "Cria um novo marcador. Para marcadores multi nível, digite o caminho completo do marcador, inclusive as barras.",
|
||||
"create_user": "Criar usuário",
|
||||
"created": "Criado",
|
||||
"current_device": "Dispositivo atual",
|
||||
@@ -544,8 +544,8 @@
|
||||
"delete_link": "Excluir link",
|
||||
"delete_others": "Excluir restante",
|
||||
"delete_shared_link": "Excluir link de compartilhamento",
|
||||
"delete_tag": "Remover tag",
|
||||
"delete_tag_confirmation_prompt": "Tem certeza que deseja excluir a tag {tagName} ?",
|
||||
"delete_tag": "Remover marcador",
|
||||
"delete_tag_confirmation_prompt": "Tem certeza que deseja excluir o marcador {tagName} ?",
|
||||
"delete_user": "Excluir usuário",
|
||||
"deleted_shared_link": "Link de compartilhamento excluído",
|
||||
"deletes_missing_assets": "Excluir arquivos não encontrados",
|
||||
@@ -590,7 +590,7 @@
|
||||
"edit_location": "Editar Localização",
|
||||
"edit_name": "Editar nome",
|
||||
"edit_people": "Editar pessoas",
|
||||
"edit_tag": "Editar tag",
|
||||
"edit_tag": "Editar marcador",
|
||||
"edit_title": "Editar Título",
|
||||
"edit_user": "Editar usuário",
|
||||
"edited": "Editado",
|
||||
@@ -778,7 +778,7 @@
|
||||
"group_owner": "Agrupar por dono",
|
||||
"group_places_by": "Agrupar lugares por...",
|
||||
"group_year": "Agrupar por ano",
|
||||
"has_quota": "Há cota",
|
||||
"has_quota": "Cota",
|
||||
"hi_user": "Olá {name} ({email})",
|
||||
"hide_all_people": "Esconder todas as pessoas",
|
||||
"hide_gallery": "Ocultar galeria",
|
||||
@@ -987,6 +987,7 @@
|
||||
"permanently_deleted_asset": "Arquivo deletado permanentemente",
|
||||
"permanently_deleted_assets_count": "{count, plural, one {# arquivo permanentemente excluído} other {# arquivos permanentemente excluídos}}",
|
||||
"person": "Pessoa",
|
||||
"person_birthdate": "Nasceu em {date}",
|
||||
"person_hidden": "{name}{hidden, select, true { (oculto)} other {}}",
|
||||
"photo_shared_all_users": "Parece que você compartilhou suas fotos com todos os usuários ou não tem nenhum usuário com quem compartilhar.",
|
||||
"photos": "Fotos",
|
||||
@@ -1078,6 +1079,8 @@
|
||||
"remove_from_album": "Remover do álbum",
|
||||
"remove_from_favorites": "Remover dos favoritos",
|
||||
"remove_from_shared_link": "Remover do link compartilhado",
|
||||
"remove_memory": "Remover memória",
|
||||
"remove_photo_from_memory": "Remover foto desta memória",
|
||||
"remove_url": "Remover URL",
|
||||
"remove_user": "Remover usuário",
|
||||
"removed_api_key": "Removido a Chave de API: {name}",
|
||||
@@ -1086,7 +1089,7 @@
|
||||
"removed_from_favorites_count": "{count, plural, one {# Removido} other {# Removidos}} dos favoritos",
|
||||
"removed_memory": "Memória removida",
|
||||
"removed_photo_from_memory": "Foto removida da memória",
|
||||
"removed_tagged_assets": "Tag removida de {count, plural, one {# arquivo} other {# arquivos}}",
|
||||
"removed_tagged_assets": "Marcador removido de {count, plural, one {# arquivo} other {# arquivos}}",
|
||||
"rename": "Renomear",
|
||||
"repair": "Reparar",
|
||||
"repair_no_results_message": "Arquivos perdidos ou não rastreados aparecem aqui",
|
||||
@@ -1117,7 +1120,7 @@
|
||||
"saved_settings": "Configurações salvas",
|
||||
"say_something": "Diga algo",
|
||||
"scan_all_libraries": "Escanear Todas Bibliotecas",
|
||||
"scan_library": "Analisar",
|
||||
"scan_library": "Escanear",
|
||||
"scan_settings": "Opções de escanear",
|
||||
"scanning_for_album": "Escaneando por álbum...",
|
||||
"search": "Pesquisar",
|
||||
@@ -1141,13 +1144,14 @@
|
||||
"search_rating": "Pesquisar por classificação...",
|
||||
"search_settings": "Configurações de pesquisa",
|
||||
"search_state": "Pesquisar estado...",
|
||||
"search_tags": "Procurar tags...",
|
||||
"search_tags": "Procurar marcadores...",
|
||||
"search_timezone": "Pesquisar fuso horário...",
|
||||
"search_type": "Pesquisar tipo",
|
||||
"search_your_photos": "Pesquisar fotos",
|
||||
"searching_locales": "Pesquisar Lugares....",
|
||||
"second": "Segundo",
|
||||
"see_all_people": "Ver todas as pessoas",
|
||||
"select": "Selecionar",
|
||||
"select_album_cover": "Escolher capa do álbum",
|
||||
"select_all": "Selecionar todos",
|
||||
"select_all_duplicates": "Selecionar todas as duplicatas",
|
||||
@@ -1220,7 +1224,7 @@
|
||||
"size": "Tamanho",
|
||||
"skip_to_content": "Pular para o conteúdo",
|
||||
"skip_to_folders": "Ir para pastas",
|
||||
"skip_to_tags": "Ir para as tags",
|
||||
"skip_to_tags": "Ir para os marcadores",
|
||||
"slideshow": "Apresentação",
|
||||
"slideshow_settings": "Opções de apresentação",
|
||||
"sort_albums_by": "Ordenar álbuns por...",
|
||||
@@ -1257,15 +1261,15 @@
|
||||
"support_third_party_description": "Sua instalação do Immich é fornecida por terceiros. É possível que problemas sejam causados por eles, por isso, se tiver problemas, procure primeiro ajuda com eles utilizando os links abaixo.",
|
||||
"swap_merge_direction": "Alternar direção da mesclagem",
|
||||
"sync": "Sincronizar",
|
||||
"tag": "Tag",
|
||||
"tag_assets": "Marcar com tag",
|
||||
"tag_created": "Tag foi criada: {tag}",
|
||||
"tag_feature_description": "Visualizar fotos e videos agrupados pelo tópico da tag",
|
||||
"tag_not_found_question": "Não consegue encontrar a tag? <link>Crie uma tag nova aqui.</link>",
|
||||
"tag": "Marcador",
|
||||
"tag_assets": "Marcar arquivos",
|
||||
"tag_created": "Marcador criado: {tag}",
|
||||
"tag_feature_description": "Visualizar fotos e videos agrupados pelo tópico do marcador",
|
||||
"tag_not_found_question": "Não consegue encontrar o marcador? <link>Crie uma novo aqui.</link>",
|
||||
"tag_people": "Marcar pessoas",
|
||||
"tag_updated": "Tag foi atualizada: {tag}",
|
||||
"tagged_assets": "{count, plural, one {# arquivo marcado} other {# arquivos marcados}} com a tag",
|
||||
"tags": "Tags",
|
||||
"tag_updated": "Marcador foi atualizado: {tag}",
|
||||
"tagged_assets": "{count, plural, one {# arquivo marcado} other {# arquivos marcados}}",
|
||||
"tags": "Marcadores",
|
||||
"template": "Modelo",
|
||||
"theme": "Tema",
|
||||
"theme_selection": "Selecionar tema",
|
||||
|
||||
@@ -1079,14 +1079,16 @@
|
||||
"remove_from_album": "Удалить из альбома",
|
||||
"remove_from_favorites": "Удалить из избранного",
|
||||
"remove_from_shared_link": "Удалить из публичной ссылки",
|
||||
"remove_memory": "Удалить воспоминание",
|
||||
"remove_photo_from_memory": "Удалить фото из воспоминания",
|
||||
"remove_url": "Удалить URL",
|
||||
"remove_user": "Удалить пользователя",
|
||||
"removed_api_key": "Удален ключ API: {name}",
|
||||
"removed_from_archive": "Удален из архива",
|
||||
"removed_from_favorites": "Удалено из избранного",
|
||||
"removed_from_favorites_count": "{count, plural, other {Удалено #}} из избранного",
|
||||
"removed_memory": "Удалить воспоминание",
|
||||
"removed_photo_from_memory": "Удалить фото из воспоминания",
|
||||
"removed_memory": "Воспоминание удалено",
|
||||
"removed_photo_from_memory": "Фото удалено из воспоминания",
|
||||
"removed_tagged_assets": "Тег для {count, plural, one {# объекта} other {# объектов}} удален",
|
||||
"rename": "Переименовать",
|
||||
"repair": "Ремонт",
|
||||
@@ -1149,6 +1151,7 @@
|
||||
"searching_locales": "Идет поиск переводов...",
|
||||
"second": "Секунда",
|
||||
"see_all_people": "Посмотреть всех людей",
|
||||
"select": "Выбрать",
|
||||
"select_album_cover": "Выбрать обложку альбома",
|
||||
"select_all": "Выбрать все",
|
||||
"select_all_duplicates": "Выбрать все дубликаты",
|
||||
@@ -1375,4 +1378,4 @@
|
||||
"yes": "Да",
|
||||
"you_dont_have_any_shared_links": "У вас нет публичных ссылок",
|
||||
"zoom_image": "Приблизить"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
"storage_template_hash_verification_enabled_description": "Povolí overenie hash, nezakazujte to, pokiaľ si nie ste istí dôsledkami",
|
||||
"storage_template_migration": "Migrácia šablóny úložiska",
|
||||
"storage_template_migration_description": "Použite aktuálnu <link>{template}</link> na predtým nahrané médiá",
|
||||
"storage_template_migration_info": "Zmeny šablón sa budú vzťahovať iba na nové diela. Ak chcete šablónu spätne použiť na predtým nahrané médiá, spustite <link>{job}</link>.",
|
||||
"storage_template_migration_info": "Šablóna úložiska skonvertuje všetky prípony na malé písmená. Zmeny šablón sa budú vzťahovať iba na nové diela. Ak chcete šablónu spätne použiť na predtým nahrané médiá, spustite <link>{job}</link>.",
|
||||
"storage_template_migration_job": "Úloha migrácie šablóny úložiska",
|
||||
"storage_template_more_details": "Ďalšie podrobnosti o tejto funkcii nájdete v <template-link>Šablóna úložiska</template-link> a jej <implications-link>dôsledky</implications-link>",
|
||||
"storage_template_onboarding_description": "Keď je táto funkcia povolená, automaticky usporiada súbory na základe šablóny definovanej používateľom. Kvôli problémom so stabilitou bola funkcia predvolene vypnutá. Viac informácií nájdete v <link>dokumentácii</link>.",
|
||||
@@ -987,6 +987,7 @@
|
||||
"permanently_deleted_asset": "Navždy odstránená položka",
|
||||
"permanently_deleted_assets_count": "Navždy {count, plural, one {odstránená # položka} other {odstránené # položky}}",
|
||||
"person": "Osoba",
|
||||
"person_birthdate": "Narodený dňa {date}",
|
||||
"person_hidden": "{name}{hidden, select, true { (skryté)} other {}}",
|
||||
"photo_shared_all_users": "Vyzerá, že zdieľate svoje fotky so všetkými používateľmi alebo nemáte žiadnych používateľov.",
|
||||
"photos": "Fotografie",
|
||||
@@ -1078,6 +1079,8 @@
|
||||
"remove_from_album": "Odstrániť z albumu",
|
||||
"remove_from_favorites": "Odstrániť z obľúbených",
|
||||
"remove_from_shared_link": "Odstrániť zo zdieľaného odkazu",
|
||||
"remove_memory": "Odstrániť spomienku",
|
||||
"remove_photo_from_memory": "Odstrániť fotografiu z tejto spomienky",
|
||||
"remove_url": "Odstrániť URL",
|
||||
"remove_user": "Odstrániť používateľa",
|
||||
"removed_api_key": "Odstrániť API kľúč: {name}",
|
||||
@@ -1148,6 +1151,7 @@
|
||||
"searching_locales": "Hľadám lokality...",
|
||||
"second": "Sekundy",
|
||||
"see_all_people": "Pozrieť všetky osoby",
|
||||
"select": "Vybrať",
|
||||
"select_album_cover": "Vyberte obal albumu",
|
||||
"select_all": "Vybrať všetko",
|
||||
"select_all_duplicates": "Vybrať všetky duplikáty",
|
||||
@@ -1374,4 +1378,4 @@
|
||||
"yes": "Áno",
|
||||
"you_dont_have_any_shared_links": "Nemáte žiadne zdielané linky",
|
||||
"zoom_image": "Priblížiť obrázok"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1079,6 +1079,8 @@
|
||||
"remove_from_album": "Odstrani iz albuma",
|
||||
"remove_from_favorites": "Odstrani iz priljubljenih",
|
||||
"remove_from_shared_link": "Odstrani iz skupne povezave",
|
||||
"remove_memory": "Odstrani spomin",
|
||||
"remove_photo_from_memory": "Odstrani fotografijo iz tega spomina",
|
||||
"remove_url": "Odstrani URL",
|
||||
"remove_user": "Odstrani uporabnika",
|
||||
"removed_api_key": "Odstranjen ključ API-ja: {name}",
|
||||
@@ -1149,6 +1151,7 @@
|
||||
"searching_locales": "Iskanje krajev...",
|
||||
"second": "Sekunda",
|
||||
"see_all_people": "Oglejte si vse ljudi",
|
||||
"select": "Izberi",
|
||||
"select_album_cover": "Izberi naslovnico albuma",
|
||||
"select_all": "Izberi vse",
|
||||
"select_all_duplicates": "Izberi vse dvojnike",
|
||||
@@ -1375,4 +1378,4 @@
|
||||
"yes": "Da",
|
||||
"you_dont_have_any_shared_links": "Nimate nobenih skupnih povezav",
|
||||
"zoom_image": "Povečava slike"
|
||||
}
|
||||
}
|
||||
|
||||
1
i18n/sq.json
Normal file
1
i18n/sq.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -302,7 +302,7 @@
|
||||
"transcoding_max_b_frames": "Максимални Б-кадри",
|
||||
"transcoding_max_b_frames_description": "Више вредности побољшавају ефикасност компресије, али успоравају кодирање. Можда није компатибилно са хардверским убрзањем на старијим уређајима. 0 oneмогућава Б-кадре, док -1 аутоматски поставља ову вредност.",
|
||||
"transcoding_max_bitrate": "Максимални битрате",
|
||||
"transcoding_max_bitrate_description": "Подешавање максималног битрате-а може учинити величине датотека предвидљивијим уз мању цену квалитета. При 720п, типичне вредности су 2600к за ВП9 или ХЕВЦ, или 4500к за Х.264. oneмогућено ако је постављено на 0.",
|
||||
"transcoding_max_bitrate_description": "Подешавање максималног битрате-а може учинити величине датотека предвидљивијим уз мању цену квалитета. При 720п, типичне вредности су 2600kbit/s за ВП9 или ХЕВЦ, или 4500kbit/s за Х.264. oneмогућено ако је постављено на 0.",
|
||||
"transcoding_max_keyframe_interval": "Максимални интервал keyframe-a",
|
||||
"transcoding_max_keyframe_interval_description": "Поставља максималну удаљеност кадрова између кључних кадрова. Ниже вредности погоршавају ефикасност компресије, али побољшавају време тражења и могу побољшати квалитет сцена са брзим кретањем. 0 аутоматски поставља ову вредност.",
|
||||
"transcoding_optimal_description": "Видео снимци већи од циљне резолуције или нису у прихваћеном формату",
|
||||
@@ -987,6 +987,7 @@
|
||||
"permanently_deleted_asset": "Трајно избрисана датотека",
|
||||
"permanently_deleted_assets_count": "Трајно избрисано {count, plural, one {# датотека} other {# датотеке}}",
|
||||
"person": "Особа",
|
||||
"person_birthdate": "Рођен(a) {date}",
|
||||
"person_hidden": "{name}{hidden, select, true { (скривено)} other {}}",
|
||||
"photo_shared_all_users": "Изгледа да сте поделили своје фотографије са свим корисницима или да немате ниједног корисника са којим бисте делили.",
|
||||
"photos": "Слике",
|
||||
@@ -1078,6 +1079,8 @@
|
||||
"remove_from_album": "Обриши из албума",
|
||||
"remove_from_favorites": "Уклони из фаворита",
|
||||
"remove_from_shared_link": "Уклоните са дељене везе",
|
||||
"remove_memory": "Уклоните меморију",
|
||||
"remove_photo_from_memory": "Уклоните фотографију из ове меморије",
|
||||
"remove_url": "Уклони URL",
|
||||
"remove_user": "Уклони корисника",
|
||||
"removed_api_key": "Уклоњен АПИ кључ (key): {name}",
|
||||
@@ -1148,6 +1151,7 @@
|
||||
"searching_locales": "Претраживање превода...",
|
||||
"second": "Секунда",
|
||||
"see_all_people": "Види све особе",
|
||||
"select": "Изаберите",
|
||||
"select_album_cover": "Изаберите омот албума",
|
||||
"select_all": "Изабери све",
|
||||
"select_all_duplicates": "Изаберите све дупликате",
|
||||
|
||||
@@ -987,6 +987,7 @@
|
||||
"permanently_deleted_asset": "Trajno izbrisana datoteka",
|
||||
"permanently_deleted_assets_count": "Trajno izbrisano {count, plural, one {# datoteka} other {# datoteke}}",
|
||||
"person": "Osoba",
|
||||
"person_birthdate": "Rođen(a) {date}",
|
||||
"person_hidden": "{name}{hidden, select, true { (skriveno)} other {}}",
|
||||
"photo_shared_all_users": "Izgleda da ste podelili svoje fotografije sa svim korisnicima ili da nemate nijednog korisnika sa kojim biste delili.",
|
||||
"photos": "Slike",
|
||||
@@ -1078,6 +1079,8 @@
|
||||
"remove_from_album": "Obriši iz albuma",
|
||||
"remove_from_favorites": "Ukloni iz favorita",
|
||||
"remove_from_shared_link": "Uklonite sa deljene veze",
|
||||
"remove_memory": "Uklonite memoriju",
|
||||
"remove_photo_from_memory": "Uklonite fotografiju iz ove memorije",
|
||||
"remove_url": "Ukloni URL",
|
||||
"remove_user": "Ukloni korisnika",
|
||||
"removed_api_key": "Uklonjen API ključ (key): {name}",
|
||||
@@ -1148,6 +1151,7 @@
|
||||
"searching_locales": "Pretraživanje prevoda...",
|
||||
"second": "Sekunda",
|
||||
"see_all_people": "Vidi sve osobe",
|
||||
"select": "Izaberite",
|
||||
"select_album_cover": "Izaberite omot albuma",
|
||||
"select_all": "Izaberi sve",
|
||||
"select_all_duplicates": "Izaberite sve duplikate",
|
||||
@@ -1374,4 +1378,4 @@
|
||||
"yes": "Da",
|
||||
"you_dont_have_any_shared_links": "Nemate nijedno deljenje veze",
|
||||
"zoom_image": "Zumiraj sliku"
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user