Compare commits
376 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c0230ccf3b | |||
| 224bb46b4a | |||
| ad0b96a1e5 | |||
| 38226fd240 | |||
| f193c5a53f | |||
| debc35a4d5 | |||
| 5de76dbaee | |||
| d4b110fc47 | |||
| f7acf1886c | |||
| ba0cfb76ed | |||
| cee6bcc5ef | |||
| b2f3bf7079 | |||
| fe416b121c | |||
| 35b62cd016 | |||
| b33e8abcdd | |||
| 0be71c82b3 | |||
| a582d3a03e | |||
| 6609e70fa8 | |||
| 7a0107fc79 | |||
| 0bbeb20595 | |||
| afc4085b55 | |||
| 02569d52f0 | |||
| aaeac2ab73 | |||
| de57fecb69 | |||
| 1e0b4fac04 | |||
| 34339ea69f | |||
| 6da039780e | |||
| 3f2e0780d5 | |||
| 52363cf0fb | |||
| 86df09a0e4 | |||
| e1e24f3d60 | |||
| 33d76fb386 | |||
| 642065f506 | |||
| de897f6069 | |||
| 68f3ed89c5 | |||
| 78516a97b3 | |||
| b8a17c3c26 | |||
| e42886b767 | |||
| d36c26bf97 | |||
| dcbc266b83 | |||
| c37d13691b | |||
| 9ae42106cc | |||
| 28e9892ed3 | |||
| 532ec10d5f | |||
| 2411bf8374 | |||
| 0b60cc8965 | |||
| 2d816e89ad | |||
| eee94207ce | |||
| dfa38ec3ef | |||
| edc0698e2a | |||
| 0e987352bb | |||
| 98ea3847e5 | |||
| 53c67f4d71 | |||
| 20733bd7df | |||
| 11e72a0f35 | |||
| 53a6724039 | |||
| 0b20d1df9f | |||
| 6bb8903b05 | |||
| 26e0cb3eb4 | |||
| a8f683ed15 | |||
| 4dfa011eef | |||
| 0c0bec6ae2 | |||
| 61c3f27fdc | |||
| b2ca208dbb | |||
| 2e945281fc | |||
| 9ac120c772 | |||
| e6e8ae7c74 | |||
| 29fd981587 | |||
| 585b74f233 | |||
| f118bb7e08 | |||
| 1710230d61 | |||
| 2012b07645 | |||
| a88a9a7d5e | |||
| ae539dfdf3 | |||
| 69bb8d834f | |||
| 9693d07a8b | |||
| 453b30069d | |||
| c9daefccc4 | |||
| 6ffd8e679e | |||
| 7fe2f19258 | |||
| dac545496e | |||
| d5b112be53 | |||
| 75322179fd | |||
| 3f4b6a8e7c | |||
| 7ce1d73c20 | |||
| 2bf484c91c | |||
| 4e9bdd5e6c | |||
| f05ef81c4f | |||
| c21860fb97 | |||
| 449368eee7 | |||
| 31e098517d | |||
| b9e2590752 | |||
| 41641ec000 | |||
| 8821c251c3 | |||
| 1d6b98ff86 | |||
| 4d00261bc1 | |||
| df7ea4d8ea | |||
| 1e7cb1165f | |||
| d9ef041b87 | |||
| 87a172ab0c | |||
| 9e0553e0c4 | |||
| a7addfece8 | |||
| fda215f97f | |||
| 5fad1fd899 | |||
| 880f2bc2c5 | |||
| 0f79e0c38e | |||
| 5fb0afb0d0 | |||
| 4f4a50ac11 | |||
| 3d883b27aa | |||
| 01fddd58c6 | |||
| 81eb5ab40d | |||
| 8d849d226d | |||
| a9b82a8e32 | |||
| cc9e07401f | |||
| 9b5f3552c0 | |||
| a52a3247d7 | |||
| c86c957860 | |||
| eb15a2725a | |||
| b394046d2a | |||
| 859b2451bb | |||
| b79a2eb6b9 | |||
| ee96b285f2 | |||
| 77340075f0 | |||
| 5c06ec5e0b | |||
| dcee34095b | |||
| 15f182902f | |||
| b26b452530 | |||
| 2dcb32f7d0 | |||
| 27d2f3efe2 | |||
| d38468439b | |||
| 0166e99d90 | |||
| 71e33e35dc | |||
| a122d4b969 | |||
| dad81af6e3 | |||
| ac6b42e1e8 | |||
| 4059638151 | |||
| 1823a28e59 | |||
| b6bf1852cd | |||
| cdc26f2c7b | |||
| 913b3789cc | |||
| 994a770921 | |||
| 17bbcdf584 | |||
| 23aa661324 | |||
| a10a946d1a | |||
| 04c9531624 | |||
| d84cc450f1 | |||
| 4153848c68 | |||
| f29230c8a6 | |||
| 03af60e8eb | |||
| ae827e1406 | |||
| 7893ac25fb | |||
| 42a03f2556 | |||
| 722a464e23 | |||
| 39c1ebf698 | |||
| ef6e4f4699 | |||
| 0700e61d20 | |||
| 7e6cd48783 | |||
| e524c59560 | |||
| b4c72fb609 | |||
| 74e14b6495 | |||
| 03207a13ec | |||
| 529b8c285d | |||
| 1213f6df10 | |||
| 9e8132c363 | |||
| 2d2673c114 | |||
| 56e5236a39 | |||
| 8529f92ebc | |||
| 761ac074c9 | |||
| 7e377d3e42 | |||
| f7d9215464 | |||
| 9af44fbd69 | |||
| 170306af1a | |||
| 417d3bbf50 | |||
| e239b8d2fa | |||
| 2c7b980eed | |||
| 9a5a3c0a1d | |||
| 027dab1487 | |||
| e18e4c5962 | |||
| 67a8cab286 | |||
| 39eee6a634 | |||
| ee98e69097 | |||
| 41c1d4d44b | |||
| b21084b851 | |||
| 8bf45eb718 | |||
| 9d3ca3ad3f | |||
| 0090b9db4a | |||
| bee0ae430a | |||
| cc08ebdf80 | |||
| 71578b76a7 | |||
| 8e5d52abbb | |||
| e52cc259d5 | |||
| 00c88b2636 | |||
| e95096d14f | |||
| 4c918254b9 | |||
| b97d73d7a7 | |||
| 2801b0953d | |||
| 7a1c45c364 | |||
| 5acd6b70d0 | |||
| edaedca03f | |||
| 7b3e1037b6 | |||
| 27bc8eba7b | |||
| 23fb2e0fae | |||
| 59accbf32a | |||
| 059a0e8aa8 | |||
| 6a55c36762 | |||
| c0bff4b493 | |||
| fd4c2acde8 | |||
| 5acf909235 | |||
| fb1458c720 | |||
| 255dabc239 | |||
| 27751f8fd4 | |||
| 72ffa37dd9 | |||
| 5a7042364b | |||
| db0ea0f3a8 | |||
| 88c0243a20 | |||
| 3a29522df6 | |||
| 50eae23f3a | |||
| 95419750bb | |||
| 5fb858a865 | |||
| 18084a49ec | |||
| f107cb044a | |||
| f4e7ea47a6 | |||
| 8747fc4935 | |||
| 287fa79d75 | |||
| bcfb5bee1f | |||
| 538263dc38 | |||
| 51aec1e93d | |||
| 53825cc3d6 | |||
| 6e7c2817a3 | |||
| 7bd79b551c | |||
| 5fe954b3c9 | |||
| 7f81a5bd6f | |||
| 37a79292c0 | |||
| bf6211776f | |||
| 6c178a04dc | |||
| 036d314cb6 | |||
| 1fc5da398a | |||
| 4d84338086 | |||
| 0ac49b00ee | |||
| e427778a96 | |||
| b82e29fbb4 | |||
| ff19aea4ac | |||
| 28179a3a1d | |||
| af1e18d07e | |||
| 270a0ff986 | |||
| 9d3f10372d | |||
| 2f1385a236 | |||
| 183a285584 | |||
| 5ce946bb5b | |||
| 674faf2e57 | |||
| 4f7702c6bf | |||
| 28edf5664d | |||
| ec2f94cae8 | |||
| 873f7921da | |||
| f06b054087 | |||
| 0df910c0cd | |||
| 5b8d72e91a | |||
| e7b0a47be2 | |||
| 60af3a4003 | |||
| 6a4b6699e3 | |||
| 7d57fd1320 | |||
| bbc1c8186c | |||
| b76d69c0e5 | |||
| fd2b7a344c | |||
| 03dafba522 | |||
| f15376a107 | |||
| 32955915dd | |||
| aacb27ea5f | |||
| d6b8c0926f | |||
| 225af973c1 | |||
| b3372064e0 | |||
| 303307e1ac | |||
| f75c9dfe37 | |||
| f5954f4c9b | |||
| 147accd957 | |||
| 9487241481 | |||
| 460e1d4715 | |||
| b6223af5ca | |||
| 8853079c54 | |||
| 662d44536e | |||
| 80fa5ec198 | |||
| 0df88fc22b | |||
| e78144ea31 | |||
| 227789225a | |||
| 1298a74230 | |||
| a3808c26ce | |||
| e2169f5316 | |||
| f65dabd43a | |||
| a5841a8bf4 | |||
| dc6ac3aaec | |||
| ae104ad7cc | |||
| 868d5f56e2 | |||
| 88072910da | |||
| 25a94bd117 | |||
| 76eaee3657 | |||
| d5fec0edab | |||
| a7821a0b79 | |||
| 73e67ebfea | |||
| 0eaa054218 | |||
| 2024d06cb7 | |||
| 204299d500 | |||
| 70e59c00d5 | |||
| 5405810a38 | |||
| e67265cef2 | |||
| 19c53609e1 | |||
| 0d0bb0e2d9 | |||
| 8f1b505ba0 | |||
| d04675fb41 | |||
| acfd40b77a | |||
| 840e43430c | |||
| a3e0c6cef5 | |||
| 63088b22e0 | |||
| d9d8beb92f | |||
| 38a8a67be9 | |||
| 7531ffcbfb | |||
| d5f3629c49 | |||
| be5b4cb1d1 | |||
| 5fb8d651ec | |||
| c2313f7a99 | |||
| 59627e2b4c | |||
| 530bf059ad | |||
| b44d2a241d | |||
| 1af10ded74 | |||
| 3f1e11afcc | |||
| 28dce2d0df | |||
| 605764f226 | |||
| 44e1c83c84 | |||
| 0729887c9c | |||
| 3bfa8b7575 | |||
| 3138048b96 | |||
| f8b41ea8aa | |||
| 1d33ed6bed | |||
| 2be1a58c5b | |||
| 03e7922589 | |||
| 801af34d9a | |||
| bedaa729e9 | |||
| 13c8a6e61d | |||
| 01edf6533b | |||
| 30d0bea4df | |||
| 571504aa5e | |||
| 65fafcab37 | |||
| 2fe0d17fe1 | |||
| b6a91746d8 | |||
| 89533a858f | |||
| dc5a0f8c33 | |||
| c443ab854c | |||
| 379c73818a | |||
| 73bb05c5f9 | |||
| b69470c69e | |||
| 34255453b1 | |||
| 4e03b06ff7 | |||
| 9bb211f56f | |||
| 6f4f79d8cc | |||
| ed3997d844 | |||
| fb59fa343d | |||
| ab2849781a | |||
| 66c657ca8a | |||
| c245208106 | |||
| 99d6673503 | |||
| 9ff37b6870 | |||
| 0e7816130b | |||
| a1beb0a87d | |||
| c4ac2e345f | |||
| f422b341d1 | |||
| 90538d2535 | |||
| abc7bfa0ba | |||
| 60a809d7b4 | |||
| cda7249a6a | |||
| 47566c1a4a | |||
| f08002d48f | |||
| 7186914531 | |||
| d38ab93484 | |||
| 845b0f2073 | |||
| acb1e513a7 | |||
| 4d4e54967d | |||
| e2dcebfe6c |
@@ -12,7 +12,6 @@ services:
|
|||||||
- server_node_modules:/workspaces/immich/server/node_modules
|
- server_node_modules:/workspaces/immich/server/node_modules
|
||||||
- web_node_modules:/workspaces/immich/web/node_modules
|
- web_node_modules:/workspaces/immich/web/node_modules
|
||||||
- ${UPLOAD_LOCATION}/photos:/data
|
- ${UPLOAD_LOCATION}/photos:/data
|
||||||
- ${UPLOAD_LOCATION}/photos/upload:/data/upload
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
|
||||||
database:
|
database:
|
||||||
|
|||||||
@@ -49,10 +49,11 @@ fix_permissions() {
|
|||||||
|
|
||||||
log "Fixing permissions for ${IMMICH_WORKSPACE}"
|
log "Fixing permissions for ${IMMICH_WORKSPACE}"
|
||||||
|
|
||||||
run_cmd sudo find "${IMMICH_WORKSPACE}/server/upload" -not -path "${IMMICH_WORKSPACE}/server/upload/postgres/*" -not -path "${IMMICH_WORKSPACE}/server/upload/postgres" -exec chown node {} +
|
|
||||||
|
|
||||||
# Change ownership for directories that exist
|
# Change ownership for directories that exist
|
||||||
for dir in "${IMMICH_WORKSPACE}/.vscode" \
|
for dir in "${IMMICH_WORKSPACE}/.vscode" \
|
||||||
|
"${IMMICH_WORKSPACE}/server/upload" \
|
||||||
|
"${IMMICH_WORKSPACE}/.pnpm-store" \
|
||||||
|
"${IMMICH_WORKSPACE}/.github/node_modules" \
|
||||||
"${IMMICH_WORKSPACE}/cli/node_modules" \
|
"${IMMICH_WORKSPACE}/cli/node_modules" \
|
||||||
"${IMMICH_WORKSPACE}/e2e/node_modules" \
|
"${IMMICH_WORKSPACE}/e2e/node_modules" \
|
||||||
"${IMMICH_WORKSPACE}/open-api/typescript-sdk/node_modules" \
|
"${IMMICH_WORKSPACE}/open-api/typescript-sdk/node_modules" \
|
||||||
|
|||||||
@@ -8,21 +8,23 @@ services:
|
|||||||
- IMMICH_SERVER_URL=http://127.0.0.1:2283/
|
- IMMICH_SERVER_URL=http://127.0.0.1:2283/
|
||||||
volumes: !override
|
volumes: !override
|
||||||
- ..:/workspaces/immich
|
- ..:/workspaces/immich
|
||||||
- cli_node_modules:/workspaces/immich/cli/node_modules
|
- ${UPLOAD_LOCATION:-upload-devcontainer-volume}${UPLOAD_LOCATION:+/photos}:/data
|
||||||
- e2e_node_modules:/workspaces/immich/e2e/node_modules
|
|
||||||
- open_api_node_modules:/workspaces/immich/open-api/typescript-sdk/node_modules
|
|
||||||
- server_node_modules:/workspaces/immich/server/node_modules
|
|
||||||
- web_node_modules:/workspaces/immich/web/node_modules
|
|
||||||
- ${UPLOAD_LOCATION:-upload1-devcontainer-volume}${UPLOAD_LOCATION:+/photos}:/data
|
|
||||||
- ${UPLOAD_LOCATION:-upload2-devcontainer-volume}${UPLOAD_LOCATION:+/photos/upload}:/data/upload
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- pnpm-store:/usr/src/app/.pnpm-store
|
||||||
|
- server-node_modules:/usr/src/app/server/node_modules
|
||||||
|
- web-node_modules:/usr/src/app/web/node_modules
|
||||||
|
- github-node_modules:/usr/src/app/.github/node_modules
|
||||||
|
- cli-node_modules:/usr/src/app/cli/node_modules
|
||||||
|
- docs-node_modules:/usr/src/app/docs/node_modules
|
||||||
|
- e2e-node_modules:/usr/src/app/e2e/node_modules
|
||||||
|
- sdk-node_modules:/usr/src/app/open-api/typescript-sdk/node_modules
|
||||||
|
- app-node_modules:/usr/src/app/node_modules
|
||||||
|
- sveltekit:/usr/src/app/web/.svelte-kit
|
||||||
|
- coverage:/usr/src/app/web/coverage
|
||||||
immich-web:
|
immich-web:
|
||||||
env_file: !reset []
|
env_file: !reset []
|
||||||
|
|
||||||
immich-machine-learning:
|
immich-machine-learning:
|
||||||
env_file: !reset []
|
env_file: !reset []
|
||||||
|
|
||||||
database:
|
database:
|
||||||
env_file: !reset []
|
env_file: !reset []
|
||||||
environment: !override
|
environment: !override
|
||||||
@@ -33,17 +35,8 @@ services:
|
|||||||
POSTGRES_HOST_AUTH_METHOD: md5
|
POSTGRES_HOST_AUTH_METHOD: md5
|
||||||
volumes:
|
volumes:
|
||||||
- ${UPLOAD_LOCATION:-postgres-devcontainer-volume}${UPLOAD_LOCATION:+/postgres}:/var/lib/postgresql/data
|
- ${UPLOAD_LOCATION:-postgres-devcontainer-volume}${UPLOAD_LOCATION:+/postgres}:/var/lib/postgresql/data
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
env_file: !reset []
|
env_file: !reset []
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
# Node modules for each service to avoid conflicts and ensure consistent dependencies
|
upload-devcontainer-volume:
|
||||||
cli_node_modules:
|
|
||||||
e2e_node_modules:
|
|
||||||
open_api_node_modules:
|
|
||||||
server_node_modules:
|
|
||||||
web_node_modules:
|
|
||||||
upload1-devcontainer-volume:
|
|
||||||
upload2-devcontainer-volume:
|
|
||||||
postgres-devcontainer-volume:
|
postgres-devcontainer-volume:
|
||||||
|
|||||||
@@ -3,6 +3,11 @@
|
|||||||
# shellcheck disable=SC1091
|
# shellcheck disable=SC1091
|
||||||
source /immich-devcontainer/container-common.sh
|
source /immich-devcontainer/container-common.sh
|
||||||
|
|
||||||
|
log "Preparing Immich Nest API Server"
|
||||||
|
log ""
|
||||||
|
export CI=1
|
||||||
|
run_cmd pnpm --filter immich install
|
||||||
|
|
||||||
log "Starting Nest API Server"
|
log "Starting Nest API Server"
|
||||||
log ""
|
log ""
|
||||||
cd "${IMMICH_WORKSPACE}/server" || (
|
cd "${IMMICH_WORKSPACE}/server" || (
|
||||||
@@ -11,7 +16,7 @@ cd "${IMMICH_WORKSPACE}/server" || (
|
|||||||
)
|
)
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
run_cmd node ./node_modules/.bin/nest start --debug "0.0.0.0:9230" --watch
|
run_cmd pnpm --filter immich exec nest start --debug "0.0.0.0:9230" --watch
|
||||||
log "Nest API Server crashed with exit code $?. Respawning in 3s ..."
|
log "Nest API Server crashed with exit code $?. Respawning in 3s ..."
|
||||||
sleep 3
|
sleep 3
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -3,6 +3,13 @@
|
|||||||
# shellcheck disable=SC1091
|
# shellcheck disable=SC1091
|
||||||
source /immich-devcontainer/container-common.sh
|
source /immich-devcontainer/container-common.sh
|
||||||
|
|
||||||
|
export CI=1
|
||||||
|
log "Preparing Immich Web Frontend"
|
||||||
|
log ""
|
||||||
|
run_cmd pnpm --filter @immich/sdk install
|
||||||
|
run_cmd pnpm --filter @immich/sdk build
|
||||||
|
run_cmd pnpm --filter immich-web install
|
||||||
|
|
||||||
log "Starting Immich Web Frontend"
|
log "Starting Immich Web Frontend"
|
||||||
log ""
|
log ""
|
||||||
cd "${IMMICH_WORKSPACE}/web" || (
|
cd "${IMMICH_WORKSPACE}/web" || (
|
||||||
@@ -16,7 +23,7 @@ until curl --output /dev/null --silent --head --fail "http://127.0.0.1:${IMMICH_
|
|||||||
done
|
done
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
run_cmd node ./node_modules/.bin/vite dev --host 0.0.0.0 --port "${DEV_PORT}"
|
run_cmd pnpm --filter immich-web exec vite dev --host 0.0.0.0 --port "${DEV_PORT}"
|
||||||
log "Web crashed with exit code $?. Respawning in 3s ..."
|
log "Web crashed with exit code $?. Respawning in 3s ..."
|
||||||
sleep 3
|
sleep 3
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -6,9 +6,6 @@ source /immich-devcontainer/container-common.sh
|
|||||||
log "Setting up Immich dev container..."
|
log "Setting up Immich dev container..."
|
||||||
fix_permissions
|
fix_permissions
|
||||||
|
|
||||||
log "Installing npm dependencies (node_modules)..."
|
|
||||||
install_dependencies
|
|
||||||
|
|
||||||
log "Setup complete, please wait while backend and frontend services automatically start"
|
log "Setup complete, please wait while backend and frontend services automatically start"
|
||||||
log
|
log
|
||||||
log "If necessary, the services may be manually started using"
|
log "If necessary, the services may be manually started using"
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
22.18.0
|
22.19.0
|
||||||
|
|||||||
@@ -64,6 +64,11 @@ body:
|
|||||||
- label: Web
|
- label: Web
|
||||||
- label: Mobile
|
- label: Mobile
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
attributes:
|
||||||
|
label: Device make and model
|
||||||
|
placeholder: Samsung S25 Android 16
|
||||||
|
|
||||||
- type: textarea
|
- type: textarea
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ cli:
|
|||||||
documentation:
|
documentation:
|
||||||
- changed-files:
|
- changed-files:
|
||||||
- any-glob-to-any-file:
|
- any-glob-to-any-file:
|
||||||
- docs/blob/**
|
|
||||||
- docs/docs/**
|
- docs/docs/**
|
||||||
- docs/src/**
|
- docs/src/**
|
||||||
- docs/static/**
|
- docs/static/**
|
||||||
|
|||||||
Generated
-28
@@ -1,28 +0,0 @@
|
|||||||
{
|
|
||||||
"name": ".github",
|
|
||||||
"lockfileVersion": 3,
|
|
||||||
"requires": true,
|
|
||||||
"packages": {
|
|
||||||
"": {
|
|
||||||
"devDependencies": {
|
|
||||||
"prettier": "^3.5.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/prettier": {
|
|
||||||
"version": "3.6.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz",
|
|
||||||
"integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"bin": {
|
|
||||||
"prettier": "bin/prettier.cjs"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=14"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/prettier/prettier?sponsor=1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -34,3 +34,7 @@ The `/api/something` endpoint is now `/api/something-else`
|
|||||||
- [ ] I have followed naming conventions/patterns in the surrounding code
|
- [ ] I have followed naming conventions/patterns in the surrounding code
|
||||||
- [ ] All code in `src/services/` uses repositories implementations for database calls, filesystem operations, etc.
|
- [ ] All code in `src/services/` uses repositories implementations for database calls, filesystem operations, etc.
|
||||||
- [ ] All code in `src/repositories/` is pretty basic/simple and does not have any immich specific logic (that belongs in `src/services/`)
|
- [ ] All code in `src/repositories/` is pretty basic/simple and does not have any immich specific logic (that belongs in `src/services/`)
|
||||||
|
|
||||||
|
## Please describe to which degree, if any, an LLM was used in creating this pull request.
|
||||||
|
|
||||||
|
...
|
||||||
|
|||||||
@@ -32,24 +32,18 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
outputs:
|
outputs:
|
||||||
should_run: ${{ steps.found_paths.outputs.mobile == 'true' || steps.should_force.outputs.should_force == 'true' }}
|
should_run: ${{ steps.check.outputs.should_run }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Check what should run
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
id: check
|
||||||
with:
|
uses: immich-app/devtools/actions/pre-job@24820aa4ef67959b0dcf69a438cccf00d7c7042b # pre-job-action-v1.0.1
|
||||||
persist-credentials: false
|
|
||||||
|
|
||||||
- id: found_paths
|
|
||||||
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
|
||||||
with:
|
with:
|
||||||
filters: |
|
filters: |
|
||||||
mobile:
|
mobile:
|
||||||
- 'mobile/**'
|
- 'mobile/**'
|
||||||
workflow:
|
force-filters: |
|
||||||
- '.github/workflows/build-mobile.yml'
|
- '.github/workflows/build-mobile.yml'
|
||||||
- name: Check if we should force jobs to run
|
force-events: 'workflow_call,workflow_dispatch'
|
||||||
id: should_force
|
|
||||||
run: echo "should_force=${{ steps.found_paths.outputs.workflow == 'true' || github.event_name == 'workflow_call' || github.event_name == 'workflow_dispatch' }}" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
build-sign-android:
|
build-sign-android:
|
||||||
name: Build and sign Android
|
name: Build and sign Android
|
||||||
@@ -57,11 +51,11 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
# Skip when PR from a fork
|
# Skip when PR from a fork
|
||||||
if: ${{ !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]' && needs.pre-job.outputs.should_run == 'true' }}
|
if: ${{ !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]' && fromJSON(needs.pre-job.outputs.should_run).mobile == true }}
|
||||||
runs-on: mich
|
runs-on: mich
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
ref: ${{ inputs.ref || github.sha }}
|
ref: ${{ inputs.ref || github.sha }}
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
@@ -79,7 +73,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Restore Gradle Cache
|
- name: Restore Gradle Cache
|
||||||
id: cache-gradle-restore
|
id: cache-gradle-restore
|
||||||
uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4
|
uses: actions/cache/restore@0400d5f644dc74513175e3cd8d07132dd4860809 # v4
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
~/.gradle/caches
|
~/.gradle/caches
|
||||||
@@ -106,7 +100,7 @@ jobs:
|
|||||||
run: flutter pub get
|
run: flutter pub get
|
||||||
|
|
||||||
- name: Generate translation file
|
- name: Generate translation file
|
||||||
run: make translation
|
run: dart run easy_localization:generate -S ../i18n && dart run bin/generate_keys.dart
|
||||||
working-directory: ./mobile
|
working-directory: ./mobile
|
||||||
|
|
||||||
- name: Generate platform APIs
|
- name: Generate platform APIs
|
||||||
@@ -136,7 +130,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Save Gradle Cache
|
- name: Save Gradle Cache
|
||||||
id: cache-gradle-save
|
id: cache-gradle-save
|
||||||
uses: actions/cache/save@5a3ec84eff668545956fd18022155c47e93e2684 # v4
|
uses: actions/cache/save@0400d5f644dc74513175e3cd8d07132dd4860809 # v4
|
||||||
if: github.ref == 'refs/heads/main'
|
if: github.ref == 'refs/heads/main'
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ jobs:
|
|||||||
actions: write
|
actions: write
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code
|
- name: Check out code
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
|
|||||||
+18
-15
@@ -29,25 +29,28 @@ jobs:
|
|||||||
working-directory: ./cli
|
working-directory: ./cli
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
# Setup .npmrc file to publish to npm
|
- name: Setup pnpm
|
||||||
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||||
|
|
||||||
|
- name: Setup Node
|
||||||
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './cli/.nvmrc'
|
node-version-file: './cli/.nvmrc'
|
||||||
registry-url: 'https://registry.npmjs.org'
|
registry-url: 'https://registry.npmjs.org'
|
||||||
cache: 'npm'
|
cache: 'pnpm'
|
||||||
cache-dependency-path: '**/package-lock.json'
|
cache-dependency-path: '**/pnpm-lock.yaml'
|
||||||
|
|
||||||
- name: Prepare SDK
|
- name: Setup typescript-sdk
|
||||||
run: npm ci --prefix ../open-api/typescript-sdk/
|
run: pnpm install && pnpm run build
|
||||||
- name: Build SDK
|
working-directory: ./open-api/typescript-sdk
|
||||||
run: npm run build --prefix ../open-api/typescript-sdk/
|
|
||||||
- run: npm ci
|
- run: pnpm install --frozen-lockfile
|
||||||
- run: npm run build
|
- run: pnpm build
|
||||||
- run: npm publish
|
- run: pnpm publish
|
||||||
if: ${{ github.event_name == 'release' }}
|
if: ${{ github.event_name == 'release' }}
|
||||||
env:
|
env:
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||||
@@ -62,7 +65,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
@@ -73,7 +76,7 @@ jobs:
|
|||||||
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
|
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
|
||||||
|
|
||||||
- name: Login to GitHub Container Registry
|
- name: Login to GitHub Container Registry
|
||||||
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
|
uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0
|
||||||
if: ${{ !github.event.pull_request.head.repo.fork }}
|
if: ${{ !github.event.pull_request.head.repo.fork }}
|
||||||
with:
|
with:
|
||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
@@ -88,7 +91,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Generate docker image tags
|
- name: Generate docker image tags
|
||||||
id: metadata
|
id: metadata
|
||||||
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5.7.0
|
uses: docker/metadata-action@c1e51972afc2121e065aed6d45c65596fe445f3f # v5.8.0
|
||||||
with:
|
with:
|
||||||
flavor: |
|
flavor: |
|
||||||
latest=false
|
latest=false
|
||||||
|
|||||||
@@ -8,8 +8,18 @@ name: Close likely duplicates
|
|||||||
permissions: {}
|
permissions: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
should_run:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
should_run: ${{ steps.should_run.outputs.run }}
|
||||||
|
steps:
|
||||||
|
- id: should_run
|
||||||
|
run: echo "run=${{ github.event_name == 'issues' || github.event.discussion.category.name == 'Feature Request' }}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
get_body:
|
get_body:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
needs: should_run
|
||||||
|
if: ${{ needs.should_run.outputs.should_run == 'true' }}
|
||||||
env:
|
env:
|
||||||
EVENT: ${{ toJSON(github.event) }}
|
EVENT: ${{ toJSON(github.event) }}
|
||||||
outputs:
|
outputs:
|
||||||
@@ -22,23 +32,24 @@ jobs:
|
|||||||
|
|
||||||
get_checkbox_json:
|
get_checkbox_json:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: get_body
|
needs: [get_body, should_run]
|
||||||
|
if: ${{ needs.should_run.outputs.should_run == 'true' }}
|
||||||
container:
|
container:
|
||||||
image: yshavit/mdq:0.7.2
|
image: ghcr.io/immich-app/mdq:main@sha256:d8ae47cf2e6cf4e2559bd57a60b73674fe44f897cba2c2bddff2987a05be10a4
|
||||||
outputs:
|
outputs:
|
||||||
json: ${{ steps.get_checkbox.outputs.json }}
|
checked: ${{ steps.get_checkbox.outputs.checked }}
|
||||||
steps:
|
steps:
|
||||||
- id: get_checkbox
|
- id: get_checkbox
|
||||||
env:
|
env:
|
||||||
BODY: ${{ needs.get_body.outputs.body }}
|
BODY: ${{ needs.get_body.outputs.body }}
|
||||||
run: |
|
run: |
|
||||||
JSON=$(echo "$BODY" | base64 -d | /mdq --output json '# I have searched | - [?] Yes')
|
CHECKED=$(echo "$BODY" | base64 -d | /mdq --output json '# I have searched | - [?] Yes' | jq '.items[0].list[0].checked // false')
|
||||||
echo "json=$JSON" >> $GITHUB_OUTPUT
|
echo "checked=$CHECKED" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
close_and_comment:
|
close_and_comment:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: get_checkbox_json
|
needs: [get_checkbox_json, should_run]
|
||||||
if: ${{ !fromJSON(needs.get_checkbox_json.outputs.json).items[0].list[0].checked }}
|
if: ${{ needs.should_run.outputs.should_run == 'true' && needs.get_checkbox_json.outputs.checked != 'true' }}
|
||||||
permissions:
|
permissions:
|
||||||
issues: write
|
issues: write
|
||||||
discussions: write
|
discussions: write
|
||||||
|
|||||||
@@ -44,13 +44,13 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@51f77329afa6477de8c49fc9c7046c15b9a4e79d # v3.29.5
|
uses: github/codeql-action/init@192325c86100d080feab897ff886c34abd4c83a3 # v3.30.3
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
@@ -63,7 +63,7 @@ jobs:
|
|||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@51f77329afa6477de8c49fc9c7046c15b9a4e79d # v3.29.5
|
uses: github/codeql-action/autobuild@192325c86100d080feab897ff886c34abd4c83a3 # v3.30.3
|
||||||
|
|
||||||
# âšī¸ Command-line programs to run using the OS shell.
|
# âšī¸ Command-line programs to run using the OS shell.
|
||||||
# đ See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
# đ See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||||
@@ -76,6 +76,6 @@ jobs:
|
|||||||
# ./location_of_script_within_repo/buildscript.sh
|
# ./location_of_script_within_repo/buildscript.sh
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@51f77329afa6477de8c49fc9c7046c15b9a4e79d # v3.29.5
|
uses: github/codeql-action/analyze@192325c86100d080feab897ff886c34abd4c83a3 # v3.30.3
|
||||||
with:
|
with:
|
||||||
category: '/language:${{matrix.language}}'
|
category: '/language:${{matrix.language}}'
|
||||||
|
|||||||
@@ -20,15 +20,11 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
outputs:
|
outputs:
|
||||||
should_run_server: ${{ steps.found_paths.outputs.server == 'true' || steps.should_force.outputs.should_force == 'true' }}
|
should_run: ${{ steps.check.outputs.should_run }}
|
||||||
should_run_ml: ${{ steps.found_paths.outputs.machine-learning == 'true' || steps.should_force.outputs.should_force == 'true' }}
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Check what should run
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
id: check
|
||||||
with:
|
uses: immich-app/devtools/actions/pre-job@24820aa4ef67959b0dcf69a438cccf00d7c7042b # pre-job-action-v1.0.1
|
||||||
persist-credentials: false
|
|
||||||
- id: found_paths
|
|
||||||
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
|
||||||
with:
|
with:
|
||||||
filters: |
|
filters: |
|
||||||
server:
|
server:
|
||||||
@@ -38,14 +34,11 @@ jobs:
|
|||||||
- 'i18n/**'
|
- 'i18n/**'
|
||||||
machine-learning:
|
machine-learning:
|
||||||
- 'machine-learning/**'
|
- 'machine-learning/**'
|
||||||
workflow:
|
force-filters: |
|
||||||
- '.github/workflows/docker.yml'
|
- '.github/workflows/docker.yml'
|
||||||
- '.github/workflows/multi-runner-build.yml'
|
- '.github/workflows/multi-runner-build.yml'
|
||||||
- '.github/actions/image-build'
|
- '.github/actions/image-build'
|
||||||
|
force-events: 'workflow_dispatch,release'
|
||||||
- name: Check if we should force jobs to run
|
|
||||||
id: should_force
|
|
||||||
run: echo "should_force=${{ steps.found_paths.outputs.workflow == 'true' || github.event_name == 'workflow_dispatch' || github.event_name == 'release' }}" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
retag_ml:
|
retag_ml:
|
||||||
name: Re-Tag ML
|
name: Re-Tag ML
|
||||||
@@ -53,14 +46,14 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
packages: write
|
packages: write
|
||||||
if: ${{ needs.pre-job.outputs.should_run_ml == 'false' && !github.event.pull_request.head.repo.fork }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run).machine-learning == false && !github.event.pull_request.head.repo.fork }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
suffix: ['', '-cuda', '-rocm', '-openvino', '-armnn', '-rknn']
|
suffix: ['', '-cuda', '-rocm', '-openvino', '-armnn', '-rknn']
|
||||||
steps:
|
steps:
|
||||||
- name: Login to GitHub Container Registry
|
- name: Login to GitHub Container Registry
|
||||||
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
|
uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0
|
||||||
with:
|
with:
|
||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
username: ${{ github.repository_owner }}
|
username: ${{ github.repository_owner }}
|
||||||
@@ -82,14 +75,14 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
packages: write
|
packages: write
|
||||||
if: ${{ needs.pre-job.outputs.should_run_server == 'false' && !github.event.pull_request.head.repo.fork }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run).server == false && !github.event.pull_request.head.repo.fork }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
suffix: ['']
|
suffix: ['']
|
||||||
steps:
|
steps:
|
||||||
- name: Login to GitHub Container Registry
|
- name: Login to GitHub Container Registry
|
||||||
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
|
uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0
|
||||||
with:
|
with:
|
||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
username: ${{ github.repository_owner }}
|
username: ${{ github.repository_owner }}
|
||||||
@@ -108,7 +101,7 @@ jobs:
|
|||||||
machine-learning:
|
machine-learning:
|
||||||
name: Build and Push ML
|
name: Build and Push ML
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run_ml == 'true' }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run).machine-learning == true }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -153,7 +146,7 @@ jobs:
|
|||||||
server:
|
server:
|
||||||
name: Build and Push Server
|
name: Build and Push Server
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run_server == 'true' }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run).server == true }}
|
||||||
uses: immich-app/devtools/.github/workflows/multi-runner-build.yml@129aeda75a450666ce96e8bc8126652e717917a7 # multi-runner-build-workflow-0.1.1
|
uses: immich-app/devtools/.github/workflows/multi-runner-build.yml@129aeda75a450666ce96e8bc8126652e717917a7 # multi-runner-build-workflow-0.1.1
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|||||||
@@ -18,32 +18,28 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
outputs:
|
outputs:
|
||||||
should_run: ${{ steps.found_paths.outputs.docs == 'true' || steps.found_paths.outputs.open-api == 'true' || steps.should_force.outputs.should_force == 'true' }}
|
should_run: ${{ steps.check.outputs.should_run }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Check what should run
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
id: check
|
||||||
with:
|
uses: immich-app/devtools/actions/pre-job@24820aa4ef67959b0dcf69a438cccf00d7c7042b # pre-job-action-v1.0.1
|
||||||
persist-credentials: false
|
|
||||||
- id: found_paths
|
|
||||||
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
|
||||||
with:
|
with:
|
||||||
filters: |
|
filters: |
|
||||||
docs:
|
docs:
|
||||||
- 'docs/**'
|
- 'docs/**'
|
||||||
workflow:
|
|
||||||
- '.github/workflows/docs-build.yml'
|
|
||||||
open-api:
|
open-api:
|
||||||
- 'open-api/immich-openapi-specs.json'
|
- 'open-api/immich-openapi-specs.json'
|
||||||
- name: Check if we should force jobs to run
|
force-filters: |
|
||||||
id: should_force
|
- '.github/workflows/docs-build.yml'
|
||||||
run: echo "should_force=${{ steps.found_paths.outputs.workflow == 'true' || github.event_name == 'release' || github.ref_name == 'main' }}" >> "$GITHUB_OUTPUT"
|
force-events: 'release'
|
||||||
|
force-branches: 'main'
|
||||||
|
|
||||||
build:
|
build:
|
||||||
name: Docs Build
|
name: Docs Build
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
if: ${{ needs.pre-job.outputs.should_run == 'true' }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run).docs == true }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
@@ -51,25 +47,28 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||||
|
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './docs/.nvmrc'
|
node-version-file: './docs/.nvmrc'
|
||||||
cache: 'npm'
|
cache: 'pnpm'
|
||||||
cache-dependency-path: '**/package-lock.json'
|
cache-dependency-path: '**/pnpm-lock.yaml'
|
||||||
|
|
||||||
- name: Run npm install
|
- name: Run install
|
||||||
run: npm ci
|
run: pnpm install
|
||||||
|
|
||||||
- name: Check formatting
|
- name: Check formatting
|
||||||
run: npm run format
|
run: pnpm format
|
||||||
|
|
||||||
- name: Run build
|
- name: Run build
|
||||||
run: npm run build
|
run: pnpm build
|
||||||
|
|
||||||
- name: Upload build output
|
- name: Upload build output
|
||||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ jobs:
|
|||||||
run: echo 'The triggering workflow did not succeed' && exit 1
|
run: echo 'The triggering workflow did not succeed' && exit 1
|
||||||
- name: Get artifact
|
- name: Get artifact
|
||||||
id: get-artifact
|
id: get-artifact
|
||||||
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
|
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
|
||||||
@@ -38,7 +38,7 @@ jobs:
|
|||||||
return { found: true, id: matchArtifact.id };
|
return { found: true, id: matchArtifact.id };
|
||||||
- name: Determine deploy parameters
|
- name: Determine deploy parameters
|
||||||
id: parameters
|
id: parameters
|
||||||
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0
|
||||||
env:
|
env:
|
||||||
HEAD_SHA: ${{ github.event.workflow_run.head_sha }}
|
HEAD_SHA: ${{ github.event.workflow_run.head_sha }}
|
||||||
with:
|
with:
|
||||||
@@ -108,13 +108,13 @@ jobs:
|
|||||||
if: ${{ fromJson(needs.checks.outputs.artifact).found && fromJson(needs.checks.outputs.parameters).shouldDeploy }}
|
if: ${{ fromJson(needs.checks.outputs.artifact).found && fromJson(needs.checks.outputs.parameters).shouldDeploy }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Load parameters
|
- name: Load parameters
|
||||||
id: parameters
|
id: parameters
|
||||||
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0
|
||||||
env:
|
env:
|
||||||
PARAM_JSON: ${{ needs.checks.outputs.parameters }}
|
PARAM_JSON: ${{ needs.checks.outputs.parameters }}
|
||||||
with:
|
with:
|
||||||
@@ -125,7 +125,7 @@ jobs:
|
|||||||
core.setOutput("shouldDeploy", parameters.shouldDeploy);
|
core.setOutput("shouldDeploy", parameters.shouldDeploy);
|
||||||
|
|
||||||
- name: Download artifact
|
- name: Download artifact
|
||||||
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0
|
||||||
env:
|
env:
|
||||||
ARTIFACT_JSON: ${{ needs.checks.outputs.artifact }}
|
ARTIFACT_JSON: ${{ needs.checks.outputs.artifact }}
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ jobs:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
|
|||||||
@@ -16,24 +16,27 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Generate a token
|
- name: Generate a token
|
||||||
id: generate-token
|
id: generate-token
|
||||||
uses: actions/create-github-app-token@df432ceedc7162793a195dd1713ff69aefc7379e # v2.0.6
|
uses: actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b # v2.1.1
|
||||||
with:
|
with:
|
||||||
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: 'Checkout'
|
- name: 'Checkout'
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.pull_request.head.ref }}
|
ref: ${{ github.event.pull_request.head.ref }}
|
||||||
token: ${{ steps.generate-token.outputs.token }}
|
token: ${{ steps.generate-token.outputs.token }}
|
||||||
persist-credentials: true
|
persist-credentials: true
|
||||||
|
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||||
|
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './server/.nvmrc'
|
node-version-file: './server/.nvmrc'
|
||||||
cache: 'npm'
|
cache: 'pnpm'
|
||||||
cache-dependency-path: '**/package-lock.json'
|
cache-dependency-path: '**/pnpm-lock.yaml'
|
||||||
|
|
||||||
- name: Fix formatting
|
- name: Fix formatting
|
||||||
run: make install-all && make format-all
|
run: make install-all && make format-all
|
||||||
@@ -45,7 +48,7 @@ jobs:
|
|||||||
message: 'chore: fix formatting'
|
message: 'chore: fix formatting'
|
||||||
|
|
||||||
- name: Remove label
|
- name: Remove label
|
||||||
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0
|
||||||
if: always()
|
if: always()
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
|
|||||||
@@ -0,0 +1,128 @@
|
|||||||
|
name: Merge translations
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
workflow_call:
|
||||||
|
secrets:
|
||||||
|
PUSH_O_MATIC_APP_ID:
|
||||||
|
required: true
|
||||||
|
PUSH_O_MATIC_APP_KEY:
|
||||||
|
required: true
|
||||||
|
WEBLATE_TOKEN:
|
||||||
|
required: true
|
||||||
|
inputs:
|
||||||
|
skip:
|
||||||
|
description: 'Skip translations'
|
||||||
|
required: false
|
||||||
|
type: boolean
|
||||||
|
|
||||||
|
permissions: {}
|
||||||
|
|
||||||
|
env:
|
||||||
|
WEBLATE_HOST: 'https://hosted.weblate.org'
|
||||||
|
WEBLATE_COMPONENT: 'immich/immich'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
merge:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
steps:
|
||||||
|
- name: Find translation PR
|
||||||
|
id: find_pr
|
||||||
|
if: ${{ inputs.skip != true }}
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ github.token }}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
PR=$(gh pr list --repo $GITHUB_REPOSITORY --author weblate --json number,mergeable)
|
||||||
|
echo "$PR"
|
||||||
|
|
||||||
|
PR_NUMBER=$(echo "$PR" | jq '
|
||||||
|
if length == 1 then
|
||||||
|
.[0].number
|
||||||
|
else
|
||||||
|
error("Expected exactly 1 entry, got \(length)")
|
||||||
|
end
|
||||||
|
' 2>&1) || exit 1
|
||||||
|
|
||||||
|
echo "PR_NUMBER=$PR_NUMBER" >> $GITHUB_OUTPUT
|
||||||
|
echo "Selected PR $PR_NUMBER"
|
||||||
|
|
||||||
|
if ! echo "$PR" | jq -e '.[0].mergeable == "MERGEABLE"'; then
|
||||||
|
echo "PR is not mergeable"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Generate a token
|
||||||
|
id: generate_token
|
||||||
|
if: ${{ inputs.skip != true }}
|
||||||
|
uses: actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b # v2.1.1
|
||||||
|
with:
|
||||||
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
|
- name: Lock weblate
|
||||||
|
if: ${{ inputs.skip != true }}
|
||||||
|
env:
|
||||||
|
WEBLATE_TOKEN: ${{ secrets.WEBLATE_TOKEN }}
|
||||||
|
run: |
|
||||||
|
curl --fail-with-body -X POST -H "Authorization: Token $WEBLATE_TOKEN" "$WEBLATE_HOST/api/components/$WEBLATE_COMPONENT/lock/" -d lock=true
|
||||||
|
|
||||||
|
- name: Commit translations
|
||||||
|
if: ${{ inputs.skip != true }}
|
||||||
|
env:
|
||||||
|
WEBLATE_TOKEN: ${{ secrets.WEBLATE_TOKEN }}
|
||||||
|
run: |
|
||||||
|
curl --fail-with-body -X POST -H "Authorization: Token $WEBLATE_TOKEN" "$WEBLATE_HOST/api/components/$WEBLATE_COMPONENT/repository/" -d operation=commit
|
||||||
|
curl --fail-with-body -X POST -H "Authorization: Token $WEBLATE_TOKEN" "$WEBLATE_HOST/api/components/$WEBLATE_COMPONENT/repository/" -d operation=push
|
||||||
|
|
||||||
|
- name: Merge PR
|
||||||
|
id: merge_pr
|
||||||
|
if: ${{ inputs.skip != true }}
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ steps.generate_token.outputs.token }}
|
||||||
|
PR_NUMBER: ${{ steps.find_pr.outputs.PR_NUMBER }}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
REVIEW_ID=$(gh api -X POST "repos/$GITHUB_REPOSITORY/pulls/$PR_NUMBER/reviews" --field event='APPROVE' --field body='Automatically merging translations PR' \
|
||||||
|
| jq '.id')
|
||||||
|
echo "REVIEW_ID=$REVIEW_ID" >> $GITHUB_OUTPUT
|
||||||
|
gh pr merge "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --auto --squash
|
||||||
|
|
||||||
|
- name: Wait for PR to merge
|
||||||
|
if: ${{ inputs.skip != true }}
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ steps.generate_token.outputs.token }}
|
||||||
|
PR_NUMBER: ${{ steps.find_pr.outputs.PR_NUMBER }}
|
||||||
|
REVIEW_ID: ${{ steps.merge_pr.outputs.REVIEW_ID }}
|
||||||
|
run: |
|
||||||
|
# So we clean up no matter what
|
||||||
|
set +e
|
||||||
|
|
||||||
|
for i in {1..100}; do
|
||||||
|
if gh pr view "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --json state | jq -e '.state == "MERGED"'; then
|
||||||
|
echo "PR merged"
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
echo "PR not merged yet, waiting..."
|
||||||
|
sleep 6
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "PR did not merge in time"
|
||||||
|
gh api -X PUT "repos/$GITHUB_REPOSITORY/pulls/$PR_NUMBER/reviews/$REVIEW_ID/dismissals" --field message='Merge attempt timed out' --field event='DISMISS'
|
||||||
|
gh pr merge "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --disable-auto
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
- name: Unlock weblate
|
||||||
|
if: ${{ inputs.skip != true }}
|
||||||
|
env:
|
||||||
|
WEBLATE_TOKEN: ${{ secrets.WEBLATE_TOKEN }}
|
||||||
|
run: |
|
||||||
|
curl --fail-with-body -X POST -H "Authorization: Token $WEBLATE_TOKEN" "$WEBLATE_HOST/api/components/$WEBLATE_COMPONENT/lock/" -d lock=false
|
||||||
|
|
||||||
|
- name: Report success
|
||||||
|
run: |
|
||||||
|
echo "Workflow completed successfully (or was skipped)"
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
name: Org Checks
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request_review:
|
|
||||||
pull_request:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
check-approvals:
|
|
||||||
name: Check for Team/Admin Review
|
|
||||||
uses: immich-app/devtools/.github/workflows/required-approval.yml@main
|
|
||||||
permissions:
|
|
||||||
pull-requests: read
|
|
||||||
contents: read
|
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
name: PR Conventional Commit
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, synchronize, reopened, edited]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
validate-pr-title:
|
||||||
|
name: Validate PR Title (conventional commit)
|
||||||
|
uses: immich-app/devtools/.github/workflows/shared-pr-require-conventional-commit.yml@main
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
name: Zizmor
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
zizmor:
|
||||||
|
name: Zizmor
|
||||||
|
uses: immich-app/devtools/.github/workflows/shared-zizmor.yml@main
|
||||||
|
permissions:
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
security-events: write
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
name: PR Conventional Commit Validation
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
types: [opened, synchronize, reopened, edited]
|
|
||||||
|
|
||||||
permissions: {}
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
validate-pr-title:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
pull-requests: write
|
|
||||||
steps:
|
|
||||||
- name: PR Conventional Commit Validation
|
|
||||||
uses: ytanikin/PRConventionalCommits@b628c5a234cc32513014b7bfdd1e47b532124d98 # 1.3.0
|
|
||||||
with:
|
|
||||||
task_types: '["feat","fix","docs","test","ci","refactor","perf","chore","revert"]'
|
|
||||||
add_label: 'false'
|
|
||||||
@@ -10,12 +10,17 @@ on:
|
|||||||
type: choice
|
type: choice
|
||||||
options:
|
options:
|
||||||
- 'false'
|
- 'false'
|
||||||
|
- major
|
||||||
- minor
|
- minor
|
||||||
- patch
|
- patch
|
||||||
mobileBump:
|
mobileBump:
|
||||||
description: 'Bump mobile build number'
|
description: 'Bump mobile build number'
|
||||||
required: false
|
required: false
|
||||||
type: boolean
|
type: boolean
|
||||||
|
skipTranslations:
|
||||||
|
description: 'Skip translations'
|
||||||
|
required: false
|
||||||
|
type: boolean
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}-root
|
group: ${{ github.workflow }}-${{ github.ref }}-root
|
||||||
@@ -24,28 +29,51 @@ concurrency:
|
|||||||
permissions: {}
|
permissions: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
merge_translations:
|
||||||
|
uses: ./.github/workflows/merge-translations.yml
|
||||||
|
with:
|
||||||
|
skip: ${{ inputs.skipTranslations }}
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
secrets:
|
||||||
|
PUSH_O_MATIC_APP_ID: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
|
PUSH_O_MATIC_APP_KEY: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
WEBLATE_TOKEN: ${{ secrets.WEBLATE_TOKEN }}
|
||||||
|
|
||||||
bump_version:
|
bump_version:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
needs: [merge_translations]
|
||||||
outputs:
|
outputs:
|
||||||
ref: ${{ steps.push-tag.outputs.commit_long_sha }}
|
ref: ${{ steps.push-tag.outputs.commit_long_sha }}
|
||||||
permissions: {} # No job-level permissions are needed because it uses the app-token
|
permissions: {} # No job-level permissions are needed because it uses the app-token
|
||||||
steps:
|
steps:
|
||||||
- name: Generate a token
|
- name: Generate a token
|
||||||
id: generate-token
|
id: generate-token
|
||||||
uses: actions/create-github-app-token@df432ceedc7162793a195dd1713ff69aefc7379e # v2.0.6
|
uses: actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b # v2.1.1
|
||||||
with:
|
with:
|
||||||
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
token: ${{ steps.generate-token.outputs.token }}
|
token: ${{ steps.generate-token.outputs.token }}
|
||||||
persist-credentials: true
|
persist-credentials: true
|
||||||
|
ref: main
|
||||||
|
|
||||||
- name: Install uv
|
- name: Install uv
|
||||||
uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2
|
uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2
|
||||||
|
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||||
|
|
||||||
|
- name: Setup Node
|
||||||
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||||
|
with:
|
||||||
|
node-version-file: './server/.nvmrc'
|
||||||
|
cache: 'pnpm'
|
||||||
|
cache-dependency-path: '**/pnpm-lock.yaml'
|
||||||
|
|
||||||
- name: Bump version
|
- name: Bump version
|
||||||
env:
|
env:
|
||||||
SERVER_BUMP: ${{ inputs.serverBump }}
|
SERVER_BUMP: ${{ inputs.serverBump }}
|
||||||
@@ -83,13 +111,13 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Generate a token
|
- name: Generate a token
|
||||||
id: generate-token
|
id: generate-token
|
||||||
uses: actions/create-github-app-token@df432ceedc7162793a195dd1713ff69aefc7379e # v2.0.6
|
uses: actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b # v2.1.1
|
||||||
with:
|
with:
|
||||||
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
app-id: ${{ secrets.PUSH_O_MATIC_APP_ID }}
|
||||||
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
private-key: ${{ secrets.PUSH_O_MATIC_APP_KEY }}
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
token: ${{ steps.generate-token.outputs.token }}
|
token: ${{ steps.generate-token.outputs.token }}
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
@@ -100,7 +128,7 @@ jobs:
|
|||||||
name: release-apk-signed
|
name: release-apk-signed
|
||||||
|
|
||||||
- name: Create draft release
|
- name: Create draft release
|
||||||
uses: softprops/action-gh-release@72f2c25fcb47643c292f7107632f7a47c1df5cd8 # v2.3.2
|
uses: softprops/action-gh-release@6cbd405e2c4e67a21c47fa9e383d020e4e28b836 # v2.3.3
|
||||||
with:
|
with:
|
||||||
draft: true
|
draft: true
|
||||||
tag_name: ${{ env.IMMICH_VERSION }}
|
tag_name: ${{ env.IMMICH_VERSION }}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
- uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
github.rest.issues.removeLabel({
|
github.rest.issues.removeLabel({
|
||||||
|
|||||||
@@ -16,22 +16,25 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
working-directory: ./open-api/typescript-sdk
|
working-directory: ./open-api/typescript-sdk
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||||
|
|
||||||
# Setup .npmrc file to publish to npm
|
# Setup .npmrc file to publish to npm
|
||||||
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './open-api/typescript-sdk/.nvmrc'
|
node-version-file: './open-api/typescript-sdk/.nvmrc'
|
||||||
registry-url: 'https://registry.npmjs.org'
|
registry-url: 'https://registry.npmjs.org'
|
||||||
cache: 'npm'
|
cache: 'pnpm'
|
||||||
cache-dependency-path: '**/package-lock.json'
|
cache-dependency-path: '**/pnpm-lock.yaml'
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: npm ci
|
run: pnpm install --frozen-lockfile
|
||||||
- name: Build
|
- name: Build
|
||||||
run: npm run build
|
run: pnpm build
|
||||||
- name: Publish
|
- name: Publish
|
||||||
run: npm publish
|
run: pnpm publish
|
||||||
env:
|
env:
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||||
|
|||||||
@@ -17,28 +17,23 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
outputs:
|
outputs:
|
||||||
should_run: ${{ steps.found_paths.outputs.mobile == 'true' || steps.should_force.outputs.should_force == 'true' }}
|
should_run: ${{ steps.check.outputs.should_run }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Check what should run
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
id: check
|
||||||
with:
|
uses: immich-app/devtools/actions/pre-job@24820aa4ef67959b0dcf69a438cccf00d7c7042b # pre-job-action-v1.0.1
|
||||||
persist-credentials: false
|
|
||||||
- id: found_paths
|
|
||||||
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
|
||||||
with:
|
with:
|
||||||
filters: |
|
filters: |
|
||||||
mobile:
|
mobile:
|
||||||
- 'mobile/**'
|
- 'mobile/**'
|
||||||
workflow:
|
force-filters: |
|
||||||
- '.github/workflows/static_analysis.yml'
|
- '.github/workflows/static_analysis.yml'
|
||||||
- name: Check if we should force jobs to run
|
force-events: 'workflow_dispatch,release'
|
||||||
id: should_force
|
|
||||||
run: echo "should_force=${{ steps.found_paths.outputs.workflow == 'true' || github.event_name == 'release' }}" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
mobile-dart-analyze:
|
mobile-dart-analyze:
|
||||||
name: Run Dart Code Analysis
|
name: Run Dart Code Analysis
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run == 'true' }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run).mobile == true }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
@@ -47,7 +42,7 @@ jobs:
|
|||||||
working-directory: ./mobile
|
working-directory: ./mobile
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
@@ -68,7 +63,7 @@ jobs:
|
|||||||
working-directory: ./mobile
|
working-directory: ./mobile
|
||||||
|
|
||||||
- name: Generate translation file
|
- name: Generate translation file
|
||||||
run: make translation
|
run: dart run easy_localization:generate -S ../i18n && dart run bin/generate_keys.dart
|
||||||
|
|
||||||
- name: Run Build Runner
|
- name: Run Build Runner
|
||||||
run: make build
|
run: make build
|
||||||
@@ -100,36 +95,10 @@ jobs:
|
|||||||
- name: Run dart format
|
- name: Run dart format
|
||||||
run: make format
|
run: make format
|
||||||
|
|
||||||
- name: Run dart custom_lint
|
# TODO: Re-enable after upgrading custom_lint
|
||||||
run: dart run custom_lint
|
# - name: Run dart custom_lint
|
||||||
|
# run: dart run custom_lint
|
||||||
|
|
||||||
# TODO: Use https://github.com/CQLabs/dcm-action
|
# TODO: Use https://github.com/CQLabs/dcm-action
|
||||||
- name: Run DCM
|
- name: Run DCM
|
||||||
run: dcm analyze lib --fatal-style --fatal-warnings
|
run: dcm analyze lib --fatal-style --fatal-warnings
|
||||||
|
|
||||||
zizmor:
|
|
||||||
name: zizmor
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
security-events: write
|
|
||||||
contents: read
|
|
||||||
actions: read
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
|
|
||||||
- name: Install the latest version of uv
|
|
||||||
uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2
|
|
||||||
|
|
||||||
- name: Run zizmor đ
|
|
||||||
run: uvx zizmor --format=sarif . > results.sarif
|
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Upload SARIF file
|
|
||||||
uses: github/codeql-action/upload-sarif@51f77329afa6477de8c49fc9c7046c15b9a4e79d # v3.29.5
|
|
||||||
with:
|
|
||||||
sarif_file: results.sarif
|
|
||||||
category: zizmor
|
|
||||||
|
|||||||
+225
-324
@@ -4,37 +4,21 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
push:
|
push:
|
||||||
branches: [main]
|
branches: [main]
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
permissions: {}
|
permissions: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
pre-job:
|
pre-job:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
outputs:
|
outputs:
|
||||||
should_run_i18n: ${{ steps.found_paths.outputs.i18n == 'true' || steps.should_force.outputs.should_force == 'true' }}
|
should_run: ${{ steps.check.outputs.should_run }}
|
||||||
should_run_web: ${{ steps.found_paths.outputs.web == 'true' || steps.should_force.outputs.should_force == 'true' }}
|
|
||||||
should_run_server: ${{ steps.found_paths.outputs.server == 'true' || steps.should_force.outputs.should_force == 'true' }}
|
|
||||||
should_run_cli: ${{ steps.found_paths.outputs.cli == 'true' || steps.should_force.outputs.should_force == 'true' }}
|
|
||||||
should_run_e2e: ${{ steps.found_paths.outputs.e2e == 'true' || steps.should_force.outputs.should_force == 'true' }}
|
|
||||||
should_run_mobile: ${{ steps.found_paths.outputs.mobile == 'true' || steps.should_force.outputs.should_force == 'true' }}
|
|
||||||
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:
|
steps:
|
||||||
- name: Checkout code
|
- name: Check what should run
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
id: check
|
||||||
with:
|
uses: immich-app/devtools/actions/pre-job@24820aa4ef67959b0dcf69a438cccf00d7c7042b # pre-job-action-v1.0.1
|
||||||
persist-credentials: false
|
|
||||||
|
|
||||||
- id: found_paths
|
|
||||||
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
|
||||||
with:
|
with:
|
||||||
filters: |
|
filters: |
|
||||||
i18n:
|
i18n:
|
||||||
@@ -54,260 +38,225 @@ jobs:
|
|||||||
- 'mobile/**'
|
- 'mobile/**'
|
||||||
machine-learning:
|
machine-learning:
|
||||||
- 'machine-learning/**'
|
- 'machine-learning/**'
|
||||||
workflow:
|
|
||||||
- '.github/workflows/test.yml'
|
|
||||||
.github:
|
.github:
|
||||||
- '.github/**'
|
- '.github/**'
|
||||||
|
force-filters: |
|
||||||
- name: Check if we should force jobs to run
|
- '.github/workflows/test.yml'
|
||||||
id: should_force
|
force-events: 'workflow_dispatch'
|
||||||
run: echo "should_force=${{ steps.found_paths.outputs.workflow == 'true' || github.event_name == 'workflow_dispatch' }}" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
server-unit-tests:
|
server-unit-tests:
|
||||||
name: Test & Lint Server
|
name: Test & Lint Server
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run_server == 'true' }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run).server == true }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
working-directory: ./server
|
working-directory: ./server
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './server/.nvmrc'
|
node-version-file: './server/.nvmrc'
|
||||||
cache: 'npm'
|
cache: 'pnpm'
|
||||||
cache-dependency-path: '**/package-lock.json'
|
cache-dependency-path: '**/pnpm-lock.yaml'
|
||||||
|
- name: Run package manager install
|
||||||
- name: Run npm install
|
run: pnpm install
|
||||||
run: npm ci
|
|
||||||
|
|
||||||
- name: Run linter
|
- name: Run linter
|
||||||
run: npm run lint
|
run: pnpm lint
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Run formatter
|
- name: Run formatter
|
||||||
run: npm run format
|
run: pnpm format
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Run tsc
|
- name: Run tsc
|
||||||
run: npm run check
|
run: pnpm check
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Run small tests & coverage
|
- name: Run small tests & coverage
|
||||||
run: npm test
|
run: pnpm test
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
cli-unit-tests:
|
cli-unit-tests:
|
||||||
name: Unit Test CLI
|
name: Unit Test CLI
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run_cli == 'true' }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run).cli == true }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
working-directory: ./cli
|
working-directory: ./cli
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './cli/.nvmrc'
|
node-version-file: './cli/.nvmrc'
|
||||||
cache: 'npm'
|
cache: 'pnpm'
|
||||||
cache-dependency-path: '**/package-lock.json'
|
cache-dependency-path: '**/pnpm-lock.yaml'
|
||||||
|
|
||||||
- name: Setup typescript-sdk
|
- name: Setup typescript-sdk
|
||||||
run: npm ci && npm run build
|
run: pnpm install && pnpm run build
|
||||||
working-directory: ./open-api/typescript-sdk
|
working-directory: ./open-api/typescript-sdk
|
||||||
|
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: npm ci
|
run: pnpm install
|
||||||
|
|
||||||
- name: Run linter
|
- name: Run linter
|
||||||
run: npm run lint
|
run: pnpm lint
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Run formatter
|
- name: Run formatter
|
||||||
run: npm run format
|
run: pnpm format
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Run tsc
|
- name: Run tsc
|
||||||
run: npm run check
|
run: pnpm check
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Run unit tests & coverage
|
- name: Run unit tests & coverage
|
||||||
run: npm run test
|
run: pnpm test
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
cli-unit-tests-win:
|
cli-unit-tests-win:
|
||||||
name: Unit Test CLI (Windows)
|
name: Unit Test CLI (Windows)
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run_cli == 'true' }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run).cli == true }}
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
working-directory: ./cli
|
working-directory: ./cli
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './cli/.nvmrc'
|
node-version-file: './cli/.nvmrc'
|
||||||
cache: 'npm'
|
cache: 'pnpm'
|
||||||
cache-dependency-path: '**/package-lock.json'
|
cache-dependency-path: '**/pnpm-lock.yaml'
|
||||||
|
|
||||||
- name: Setup typescript-sdk
|
- name: Setup typescript-sdk
|
||||||
run: npm ci && npm run build
|
run: pnpm install --frozen-lockfile && pnpm build
|
||||||
working-directory: ./open-api/typescript-sdk
|
working-directory: ./open-api/typescript-sdk
|
||||||
|
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: npm ci
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
# Skip linter & formatter in Windows test.
|
# Skip linter & formatter in Windows test.
|
||||||
- name: Run tsc
|
- name: Run tsc
|
||||||
run: npm run check
|
run: pnpm check
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Run unit tests & coverage
|
- name: Run unit tests & coverage
|
||||||
run: npm run test
|
run: pnpm test
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
web-lint:
|
web-lint:
|
||||||
name: Lint Web
|
name: Lint Web
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run_web == 'true' }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run).web == true }}
|
||||||
runs-on: mich
|
runs-on: mich
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
working-directory: ./web
|
working-directory: ./web
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './web/.nvmrc'
|
node-version-file: './web/.nvmrc'
|
||||||
cache: 'npm'
|
cache: 'pnpm'
|
||||||
cache-dependency-path: '**/package-lock.json'
|
cache-dependency-path: '**/pnpm-lock.yaml'
|
||||||
|
|
||||||
- name: Run setup typescript-sdk
|
- name: Run setup typescript-sdk
|
||||||
run: npm ci && npm run build
|
run: pnpm install --frozen-lockfile && pnpm build
|
||||||
working-directory: ./open-api/typescript-sdk
|
working-directory: ./open-api/typescript-sdk
|
||||||
|
- name: Run pnpm install
|
||||||
- name: Run npm install
|
run: pnpm rebuild && pnpm install --frozen-lockfile
|
||||||
run: npm ci
|
|
||||||
|
|
||||||
- name: Run linter
|
- name: Run linter
|
||||||
run: npm run lint:p
|
run: pnpm lint:p
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Run formatter
|
- name: Run formatter
|
||||||
run: npm run format
|
run: pnpm format
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Run svelte checks
|
- name: Run svelte checks
|
||||||
run: npm run check:svelte
|
run: pnpm check:svelte
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
web-unit-tests:
|
web-unit-tests:
|
||||||
name: Test Web
|
name: Test Web
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run_web == 'true' }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run).web == true }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
working-directory: ./web
|
working-directory: ./web
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './web/.nvmrc'
|
node-version-file: './web/.nvmrc'
|
||||||
cache: 'npm'
|
cache: 'pnpm'
|
||||||
cache-dependency-path: '**/package-lock.json'
|
cache-dependency-path: '**/pnpm-lock.yaml'
|
||||||
|
|
||||||
- name: Run setup typescript-sdk
|
- name: Run setup typescript-sdk
|
||||||
run: npm ci && npm run build
|
run: pnpm install --frozen-lockfile && pnpm build
|
||||||
working-directory: ./open-api/typescript-sdk
|
working-directory: ./open-api/typescript-sdk
|
||||||
|
|
||||||
- name: Run npm install
|
- name: Run npm install
|
||||||
run: npm ci
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
- name: Run tsc
|
- name: Run tsc
|
||||||
run: npm run check:typescript
|
run: pnpm check:typescript
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Run unit tests & coverage
|
- name: Run unit tests & coverage
|
||||||
run: npm run test
|
run: pnpm test
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
i18n-tests:
|
i18n-tests:
|
||||||
name: Test i18n
|
name: Test i18n
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run_i18n == 'true' }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run).i18n == true }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './web/.nvmrc'
|
node-version-file: './web/.nvmrc'
|
||||||
cache: 'npm'
|
cache: 'pnpm'
|
||||||
cache-dependency-path: '**/package-lock.json'
|
cache-dependency-path: '**/pnpm-lock.yaml'
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm --prefix=web ci
|
run: pnpm --filter=immich-web install --frozen-lockfile
|
||||||
|
|
||||||
- name: Format
|
- name: Format
|
||||||
run: npm --prefix=web run format:i18n
|
run: pnpm --filter=immich-web format:i18n
|
||||||
|
|
||||||
- name: Find file changes
|
- name: Find file changes
|
||||||
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4
|
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4
|
||||||
id: verify-changed-files
|
id: verify-changed-files
|
||||||
with:
|
with:
|
||||||
files: |
|
files: |
|
||||||
i18n/**
|
i18n/**
|
||||||
|
|
||||||
- name: Verify files have not changed
|
- name: Verify files have not changed
|
||||||
if: steps.verify-changed-files.outputs.files_changed == 'true'
|
if: steps.verify-changed-files.outputs.files_changed == 'true'
|
||||||
env:
|
env:
|
||||||
@@ -316,87 +265,77 @@ jobs:
|
|||||||
echo "ERROR: i18n files not up to date!"
|
echo "ERROR: i18n files not up to date!"
|
||||||
echo "Changed files: ${CHANGED_FILES}"
|
echo "Changed files: ${CHANGED_FILES}"
|
||||||
exit 1
|
exit 1
|
||||||
|
|
||||||
e2e-tests-lint:
|
e2e-tests-lint:
|
||||||
name: End-to-End Lint
|
name: End-to-End Lint
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run_e2e == 'true' }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run).e2e == true }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
working-directory: ./e2e
|
working-directory: ./e2e
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './e2e/.nvmrc'
|
node-version-file: './e2e/.nvmrc'
|
||||||
cache: 'npm'
|
cache: 'pnpm'
|
||||||
cache-dependency-path: '**/package-lock.json'
|
cache-dependency-path: '**/pnpm-lock.yaml'
|
||||||
|
|
||||||
- name: Run setup typescript-sdk
|
- name: Run setup typescript-sdk
|
||||||
run: npm ci && npm run build
|
run: pnpm install --frozen-lockfile && pnpm build
|
||||||
working-directory: ./open-api/typescript-sdk
|
working-directory: ./open-api/typescript-sdk
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm ci
|
run: pnpm install --frozen-lockfile
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Run linter
|
- name: Run linter
|
||||||
run: npm run lint
|
run: pnpm lint
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Run formatter
|
- name: Run formatter
|
||||||
run: npm run format
|
run: pnpm format
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Run tsc
|
- name: Run tsc
|
||||||
run: npm run check
|
run: pnpm check
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
server-medium-tests:
|
server-medium-tests:
|
||||||
name: Medium Tests (Server)
|
name: Medium Tests (Server)
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run_server == 'true' }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run).server == true }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
working-directory: ./server
|
working-directory: ./server
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './server/.nvmrc'
|
node-version-file: './server/.nvmrc'
|
||||||
cache: 'npm'
|
cache: 'pnpm'
|
||||||
cache-dependency-path: '**/package-lock.json'
|
cache-dependency-path: '**/pnpm-lock.yaml'
|
||||||
|
- name: Run pnpm install
|
||||||
- name: Run npm install
|
run: SHARP_IGNORE_GLOBAL_LIBVIPS=true pnpm install --frozen-lockfile
|
||||||
run: npm ci
|
|
||||||
|
|
||||||
- name: Run medium tests
|
- name: Run medium tests
|
||||||
run: npm run test:medium
|
run: pnpm test:medium
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
e2e-tests-server-cli:
|
e2e-tests-server-cli:
|
||||||
name: End-to-End Tests (Server & CLI)
|
name: End-to-End Tests (Server & CLI)
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run_e2e_server_cli == 'true' }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run).e2e == true || fromJSON(needs.pre-job.outputs.should_run).server == true || fromJSON(needs.pre-job.outputs.should_run).cli == true }}
|
||||||
runs-on: ${{ matrix.runner }}
|
runs-on: ${{ matrix.runner }}
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
@@ -406,47 +345,45 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
runner: [ubuntu-latest, ubuntu-24.04-arm]
|
runner: [ubuntu-latest, ubuntu-24.04-arm]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: 'recursive'
|
submodules: 'recursive'
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './e2e/.nvmrc'
|
node-version-file: './e2e/.nvmrc'
|
||||||
cache: 'npm'
|
cache: 'pnpm'
|
||||||
cache-dependency-path: '**/package-lock.json'
|
cache-dependency-path: '**/pnpm-lock.yaml'
|
||||||
|
|
||||||
- name: Run setup typescript-sdk
|
- name: Run setup typescript-sdk
|
||||||
run: npm ci && npm run build
|
run: pnpm install --frozen-lockfile && pnpm build
|
||||||
working-directory: ./open-api/typescript-sdk
|
working-directory: ./open-api/typescript-sdk
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
- name: Run setup web
|
||||||
|
run: pnpm install --frozen-lockfile && pnpm exec svelte-kit sync
|
||||||
|
working-directory: ./web
|
||||||
|
if: ${{ !cancelled() }}
|
||||||
- name: Run setup cli
|
- name: Run setup cli
|
||||||
run: npm ci && npm run build
|
run: pnpm install --frozen-lockfile && pnpm build
|
||||||
working-directory: ./cli
|
working-directory: ./cli
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm ci
|
run: pnpm install --frozen-lockfile
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Docker build
|
- name: Docker build
|
||||||
run: docker compose build
|
run: docker compose build
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Run e2e tests (api & cli)
|
- name: Run e2e tests (api & cli)
|
||||||
run: npm run test
|
run: pnpm test
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
e2e-tests-web:
|
e2e-tests-web:
|
||||||
name: End-to-End Tests (Web)
|
name: End-to-End Tests (Web)
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run_e2e_web == 'true' }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run).e2e == true || fromJSON(needs.pre-job.outputs.should_run).web == true }}
|
||||||
runs-on: ${{ matrix.runner }}
|
runs-on: ${{ matrix.runner }}
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
@@ -456,42 +393,36 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
runner: [ubuntu-latest, ubuntu-24.04-arm]
|
runner: [ubuntu-latest, ubuntu-24.04-arm]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
submodules: 'recursive'
|
submodules: 'recursive'
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './e2e/.nvmrc'
|
node-version-file: './e2e/.nvmrc'
|
||||||
cache: 'npm'
|
cache: 'pnpm'
|
||||||
cache-dependency-path: '**/package-lock.json'
|
cache-dependency-path: '**/pnpm-lock.yaml'
|
||||||
|
|
||||||
- name: Run setup typescript-sdk
|
- name: Run setup typescript-sdk
|
||||||
run: npm ci && npm run build
|
run: pnpm install --frozen-lockfile && pnpm build
|
||||||
working-directory: ./open-api/typescript-sdk
|
working-directory: ./open-api/typescript-sdk
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm ci
|
run: pnpm install --frozen-lockfile
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Install Playwright Browsers
|
- name: Install Playwright Browsers
|
||||||
run: npx playwright install chromium --only-shell
|
run: npx playwright install chromium --only-shell
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Docker build
|
- name: Docker build
|
||||||
run: docker compose build
|
run: docker compose build
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
- name: Run e2e tests (web)
|
- name: Run e2e tests (web)
|
||||||
run: npx playwright test
|
run: npx playwright test
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
success-check-e2e:
|
success-check-e2e:
|
||||||
name: End-to-End Tests Success
|
name: End-to-End Tests Success
|
||||||
needs: [e2e-tests-server-cli, e2e-tests-web]
|
needs: [e2e-tests-server-cli, e2e-tests-web]
|
||||||
@@ -502,37 +433,32 @@ jobs:
|
|||||||
- uses: immich-app/devtools/actions/success-check@68f10eb389bb02a3cf9d1156111964c549eb421b # 0.0.4
|
- uses: immich-app/devtools/actions/success-check@68f10eb389bb02a3cf9d1156111964c549eb421b # 0.0.4
|
||||||
with:
|
with:
|
||||||
needs: ${{ toJSON(needs) }}
|
needs: ${{ toJSON(needs) }}
|
||||||
|
|
||||||
mobile-unit-tests:
|
mobile-unit-tests:
|
||||||
name: Unit Test Mobile
|
name: Unit Test Mobile
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run_mobile == 'true' }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run).mobile == true }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Setup Flutter SDK
|
- name: Setup Flutter SDK
|
||||||
uses: subosito/flutter-action@fd55f4c5af5b953cc57a2be44cb082c8f6635e8e # v2.21.0
|
uses: subosito/flutter-action@fd55f4c5af5b953cc57a2be44cb082c8f6635e8e # v2.21.0
|
||||||
with:
|
with:
|
||||||
channel: 'stable'
|
channel: 'stable'
|
||||||
flutter-version-file: ./mobile/pubspec.yaml
|
flutter-version-file: ./mobile/pubspec.yaml
|
||||||
|
|
||||||
- name: Generate translation file
|
- name: Generate translation file
|
||||||
run: make translation
|
run: dart run easy_localization:generate -S ../i18n && dart run bin/generate_keys.dart
|
||||||
working-directory: ./mobile
|
working-directory: ./mobile
|
||||||
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
working-directory: ./mobile
|
working-directory: ./mobile
|
||||||
run: flutter test -j 1
|
run: flutter test -j 1
|
||||||
|
|
||||||
ml-unit-tests:
|
ml-unit-tests:
|
||||||
name: Unit Test ML
|
name: Unit Test ML
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run_ml == 'true' }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run).machine-learning == true }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
@@ -540,10 +466,9 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
working-directory: ./machine-learning
|
working-directory: ./machine-learning
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Install uv
|
- name: Install uv
|
||||||
uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2
|
uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5.4.2
|
||||||
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
||||||
@@ -566,56 +491,48 @@ jobs:
|
|||||||
- name: Run tests and coverage
|
- name: Run tests and coverage
|
||||||
run: |
|
run: |
|
||||||
uv run pytest --cov=immich_ml --cov-report term-missing
|
uv run pytest --cov=immich_ml --cov-report term-missing
|
||||||
|
|
||||||
github-files-formatting:
|
github-files-formatting:
|
||||||
name: .github Files Formatting
|
name: .github Files Formatting
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs['should_run_.github'] == 'true' }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run)['.github'] == true }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
working-directory: ./.github
|
working-directory: ./.github
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './.github/.nvmrc'
|
node-version-file: './.github/.nvmrc'
|
||||||
cache: 'npm'
|
cache: 'pnpm'
|
||||||
cache-dependency-path: '**/package-lock.json'
|
cache-dependency-path: '**/pnpm-lock.yaml'
|
||||||
|
- name: Run pnpm install
|
||||||
- name: Run npm install
|
run: pnpm install --frozen-lockfile
|
||||||
run: npm ci
|
|
||||||
|
|
||||||
- name: Run formatter
|
- name: Run formatter
|
||||||
run: npm run format
|
run: pnpm format
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
shellcheck:
|
shellcheck:
|
||||||
name: ShellCheck
|
name: ShellCheck
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Run ShellCheck
|
- name: Run ShellCheck
|
||||||
uses: ludeeus/action-shellcheck@00cae500b08a931fb5698e11e79bfbd38e612a38 # 2.0.0
|
uses: ludeeus/action-shellcheck@00cae500b08a931fb5698e11e79bfbd38e612a38 # 2.0.0
|
||||||
with:
|
with:
|
||||||
ignore_paths: >-
|
ignore_paths: >-
|
||||||
**/open-api/**
|
**/open-api/** **/openapi** **/node_modules/**
|
||||||
**/openapi**
|
|
||||||
**/node_modules/**
|
|
||||||
|
|
||||||
generated-api-up-to-date:
|
generated-api-up-to-date:
|
||||||
name: OpenAPI Clients
|
name: OpenAPI Clients
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -623,26 +540,24 @@ jobs:
|
|||||||
contents: read
|
contents: read
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './server/.nvmrc'
|
node-version-file: './server/.nvmrc'
|
||||||
cache: 'npm'
|
cache: 'pnpm'
|
||||||
cache-dependency-path: '**/package-lock.json'
|
cache-dependency-path: '**/pnpm-lock.yaml'
|
||||||
|
|
||||||
- name: Install server dependencies
|
- name: Install server dependencies
|
||||||
run: npm --prefix=server ci
|
run: SHARP_IGNORE_GLOBAL_LIBVIPS=true pnpm --filter immich install --frozen-lockfile
|
||||||
|
|
||||||
- name: Build the app
|
- name: Build the app
|
||||||
run: npm --prefix=server run build
|
run: pnpm --filter immich build
|
||||||
|
|
||||||
- name: Run API generation
|
- name: Run API generation
|
||||||
run: make open-api
|
run: ./bin/generate-open-api.sh
|
||||||
|
working-directory: open-api
|
||||||
- name: Find file changes
|
- name: Find file changes
|
||||||
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4
|
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4
|
||||||
id: verify-changed-files
|
id: verify-changed-files
|
||||||
@@ -651,7 +566,6 @@ jobs:
|
|||||||
mobile/openapi
|
mobile/openapi
|
||||||
open-api/typescript-sdk
|
open-api/typescript-sdk
|
||||||
open-api/immich-openapi-specs.json
|
open-api/immich-openapi-specs.json
|
||||||
|
|
||||||
- name: Verify files have not changed
|
- name: Verify files have not changed
|
||||||
if: steps.verify-changed-files.outputs.files_changed == 'true'
|
if: steps.verify-changed-files.outputs.files_changed == 'true'
|
||||||
env:
|
env:
|
||||||
@@ -660,7 +574,6 @@ jobs:
|
|||||||
echo "ERROR: Generated files not up to date!"
|
echo "ERROR: Generated files not up to date!"
|
||||||
echo "Changed files: ${CHANGED_FILES}"
|
echo "Changed files: ${CHANGED_FILES}"
|
||||||
exit 1
|
exit 1
|
||||||
|
|
||||||
sql-schema-up-to-date:
|
sql-schema-up-to-date:
|
||||||
name: SQL Schema Checks
|
name: SQL Schema Checks
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -668,51 +581,42 @@ jobs:
|
|||||||
contents: read
|
contents: read
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3@sha256:ec713143dca1a426eba2e03707c319e2ec3cc9d304ef767f777f8e297dee820c
|
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3@sha256:da52bbead5d818adaa8077c8dcdaad0aaf93038c31ad8348b51f9f0ec1310a4d
|
||||||
env:
|
env:
|
||||||
POSTGRES_PASSWORD: postgres
|
POSTGRES_PASSWORD: postgres
|
||||||
POSTGRES_USER: postgres
|
POSTGRES_USER: postgres
|
||||||
POSTGRES_DB: immich
|
POSTGRES_DB: immich
|
||||||
options: >-
|
options: >-
|
||||||
--health-cmd pg_isready
|
--health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
|
||||||
--health-interval 10s
|
|
||||||
--health-timeout 5s
|
|
||||||
--health-retries 5
|
|
||||||
ports:
|
ports:
|
||||||
- 5432:5432
|
- 5432:5432
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
working-directory: ./server
|
working-directory: ./server
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
- name: Setup pnpm
|
||||||
|
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||||
with:
|
with:
|
||||||
node-version-file: './server/.nvmrc'
|
node-version-file: './server/.nvmrc'
|
||||||
cache: 'npm'
|
cache: 'pnpm'
|
||||||
cache-dependency-path: '**/package-lock.json'
|
cache-dependency-path: '**/pnpm-lock.yaml'
|
||||||
|
|
||||||
- name: Install server dependencies
|
- name: Install server dependencies
|
||||||
run: npm ci
|
run: SHARP_IGNORE_GLOBAL_LIBVIPS=true pnpm install --frozen-lockfile
|
||||||
|
|
||||||
- name: Build the app
|
- name: Build the app
|
||||||
run: npm run build
|
run: pnpm build
|
||||||
|
|
||||||
- name: Run existing migrations
|
- name: Run existing migrations
|
||||||
run: npm run migrations:run
|
run: pnpm migrations:run
|
||||||
|
|
||||||
- name: Test npm run schema:reset command works
|
- name: Test npm run schema:reset command works
|
||||||
run: npm run schema:reset
|
run: pnpm schema:reset
|
||||||
|
|
||||||
- name: Generate new migrations
|
- name: Generate new migrations
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
run: npm run migrations:generate src/TestMigration
|
run: pnpm migrations:generate src/TestMigration
|
||||||
|
|
||||||
- name: Find file changes
|
- name: Find file changes
|
||||||
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4
|
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4
|
||||||
id: verify-changed-files
|
id: verify-changed-files
|
||||||
@@ -728,19 +632,16 @@ jobs:
|
|||||||
echo "Changed files: ${CHANGED_FILES}"
|
echo "Changed files: ${CHANGED_FILES}"
|
||||||
cat ./src/*-TestMigration.ts
|
cat ./src/*-TestMigration.ts
|
||||||
exit 1
|
exit 1
|
||||||
|
|
||||||
- name: Run SQL generation
|
- name: Run SQL generation
|
||||||
run: npm run sync:sql
|
run: pnpm sync:sql
|
||||||
env:
|
env:
|
||||||
DB_URL: postgres://postgres:postgres@localhost:5432/immich
|
DB_URL: postgres://postgres:postgres@localhost:5432/immich
|
||||||
|
|
||||||
- name: Find file changes
|
- name: Find file changes
|
||||||
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4
|
uses: tj-actions/verify-changed-files@a1c6acee9df209257a246f2cc6ae8cb6581c1edf # v20.0.4
|
||||||
id: verify-changed-sql-files
|
id: verify-changed-sql-files
|
||||||
with:
|
with:
|
||||||
files: |
|
files: |
|
||||||
server/src/queries
|
server/src/queries
|
||||||
|
|
||||||
- name: Verify SQL files have not changed
|
- name: Verify SQL files have not changed
|
||||||
if: steps.verify-changed-sql-files.outputs.files_changed == 'true'
|
if: steps.verify-changed-sql-files.outputs.files_changed == 'true'
|
||||||
env:
|
env:
|
||||||
@@ -751,77 +652,77 @@ jobs:
|
|||||||
git diff
|
git diff
|
||||||
exit 1
|
exit 1
|
||||||
|
|
||||||
# mobile-integration-tests:
|
# mobile-integration-tests:
|
||||||
# name: Run mobile end-to-end integration tests
|
# name: Run mobile end-to-end integration tests
|
||||||
# runs-on: macos-latest
|
# runs-on: macos-latest
|
||||||
# steps:
|
# steps:
|
||||||
# - uses: actions/checkout@v4
|
# - uses: actions/checkout@v4
|
||||||
# - uses: actions/setup-java@v3
|
# - uses: actions/setup-java@v3
|
||||||
# with:
|
# with:
|
||||||
# distribution: 'zulu'
|
# distribution: 'zulu'
|
||||||
# java-version: '12.x'
|
# java-version: '12.x'
|
||||||
# cache: 'gradle'
|
# cache: 'gradle'
|
||||||
# - name: Cache android SDK
|
# - name: Cache android SDK
|
||||||
# uses: actions/cache@v3
|
# uses: actions/cache@v3
|
||||||
# id: android-sdk
|
# id: android-sdk
|
||||||
# with:
|
# with:
|
||||||
# key: android-sdk
|
# key: android-sdk
|
||||||
# path: |
|
# path: |
|
||||||
# /usr/local/lib/android/
|
# /usr/local/lib/android/
|
||||||
# ~/.android
|
# ~/.android
|
||||||
# - name: Cache Gradle
|
# - name: Cache Gradle
|
||||||
# uses: actions/cache@v3
|
# uses: actions/cache@v3
|
||||||
# with:
|
# with:
|
||||||
# path: |
|
# path: |
|
||||||
# ./mobile/build/
|
# ./mobile/build/
|
||||||
# ./mobile/android/.gradle/
|
# ./mobile/android/.gradle/
|
||||||
# key: ${{ runner.os }}-flutter-${{ hashFiles('**/*.gradle*', 'pubspec.lock') }}
|
# key: ${{ runner.os }}-flutter-${{ hashFiles('**/*.gradle*', 'pubspec.lock') }}
|
||||||
# - name: Setup Android SDK
|
# - name: Setup Android SDK
|
||||||
# if: steps.android-sdk.outputs.cache-hit != 'true'
|
# if: steps.android-sdk.outputs.cache-hit != 'true'
|
||||||
# uses: android-actions/setup-android@v2
|
# uses: android-actions/setup-android@v2
|
||||||
# - name: AVD cache
|
# - name: AVD cache
|
||||||
# uses: actions/cache@v3
|
# uses: actions/cache@v3
|
||||||
# id: avd-cache
|
# id: avd-cache
|
||||||
# with:
|
# with:
|
||||||
# path: |
|
# path: |
|
||||||
# ~/.android/avd/*
|
# ~/.android/avd/*
|
||||||
# ~/.android/adb*
|
# ~/.android/adb*
|
||||||
# key: avd-29
|
# key: avd-29
|
||||||
# - name: create AVD and generate snapshot for caching
|
# - name: create AVD and generate snapshot for caching
|
||||||
# if: steps.avd-cache.outputs.cache-hit != 'true'
|
# if: steps.avd-cache.outputs.cache-hit != 'true'
|
||||||
# uses: reactivecircus/android-emulator-runner@v2.27.0
|
# uses: reactivecircus/android-emulator-runner@v2.27.0
|
||||||
# with:
|
# with:
|
||||||
# working-directory: ./mobile
|
# working-directory: ./mobile
|
||||||
# cores: 2
|
# cores: 2
|
||||||
# api-level: 29
|
# api-level: 29
|
||||||
# arch: x86_64
|
# arch: x86_64
|
||||||
# profile: pixel
|
# profile: pixel
|
||||||
# target: default
|
# target: default
|
||||||
# force-avd-creation: false
|
# force-avd-creation: false
|
||||||
# emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
|
# emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
|
||||||
# disable-animations: false
|
# disable-animations: false
|
||||||
# script: echo "Generated AVD snapshot for caching."
|
# script: echo "Generated AVD snapshot for caching."
|
||||||
# - name: Setup Flutter SDK
|
# - name: Setup Flutter SDK
|
||||||
# uses: subosito/flutter-action@v2
|
# uses: subosito/flutter-action@v2
|
||||||
# with:
|
# with:
|
||||||
# channel: 'stable'
|
# channel: 'stable'
|
||||||
# flutter-version: '3.7.3'
|
# flutter-version: '3.7.3'
|
||||||
# cache: true
|
# cache: true
|
||||||
# - name: Run integration tests
|
# - name: Run integration tests
|
||||||
# uses: Wandalen/wretry.action@master
|
# uses: Wandalen/wretry.action@master
|
||||||
# with:
|
# with:
|
||||||
# action: reactivecircus/android-emulator-runner@v2.27.0
|
# action: reactivecircus/android-emulator-runner@v2.27.0
|
||||||
# with: |
|
# with: |
|
||||||
# working-directory: ./mobile
|
# working-directory: ./mobile
|
||||||
# cores: 2
|
# cores: 2
|
||||||
# api-level: 29
|
# api-level: 29
|
||||||
# arch: x86_64
|
# arch: x86_64
|
||||||
# profile: pixel
|
# profile: pixel
|
||||||
# target: default
|
# target: default
|
||||||
# force-avd-creation: false
|
# force-avd-creation: false
|
||||||
# emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
|
# emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
|
||||||
# disable-animations: true
|
# disable-animations: true
|
||||||
# script: |
|
# script: |
|
||||||
# flutter pub get
|
# flutter pub get
|
||||||
# flutter test integration_test
|
# flutter test integration_test
|
||||||
# attempt_limit: 3
|
# attempt_limit: 3
|
||||||
|
|||||||
@@ -3,48 +3,52 @@ name: Weblate checks
|
|||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [main]
|
branches: [main]
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
- synchronize
|
||||||
|
- ready_for_review
|
||||||
|
- auto_merge_enabled
|
||||||
|
- auto_merge_disabled
|
||||||
|
|
||||||
permissions: {}
|
permissions: {}
|
||||||
|
|
||||||
|
env:
|
||||||
|
BOT_NAME: immich-push-o-matic
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
pre-job:
|
pre-job:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
outputs:
|
outputs:
|
||||||
should_run: ${{ steps.found_paths.outputs.i18n == 'true' && github.head_ref != 'chore/translations'}}
|
should_run: ${{ steps.check.outputs.should_run }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Check what should run
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
id: check
|
||||||
with:
|
uses: immich-app/devtools/actions/pre-job@24820aa4ef67959b0dcf69a438cccf00d7c7042b # pre-job-action-v1.0.1
|
||||||
persist-credentials: false
|
|
||||||
- id: found_paths
|
|
||||||
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
|
||||||
with:
|
with:
|
||||||
filters: |
|
filters: |
|
||||||
i18n:
|
i18n:
|
||||||
- 'i18n/!(en)**\.json'
|
- 'i18n/!(en)**\.json'
|
||||||
|
exclude-branches: 'chore/translations'
|
||||||
|
skip-force-logic: 'true'
|
||||||
|
|
||||||
enforce-lock:
|
enforce-lock:
|
||||||
name: Check Weblate Lock
|
name: Check Weblate Lock
|
||||||
needs: [pre-job]
|
needs: [pre-job]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions: {}
|
permissions: {}
|
||||||
if: ${{ needs.pre-job.outputs.should_run == 'true' }}
|
if: ${{ fromJSON(needs.pre-job.outputs.should_run).i18n == true }}
|
||||||
steps:
|
steps:
|
||||||
- name: Check weblate lock
|
- name: Bot review status
|
||||||
|
env:
|
||||||
|
PR_NUMBER: ${{ github.event.pull_request.number || github.event.pull_request_review.pull_request.number }}
|
||||||
|
GH_TOKEN: ${{ github.token }}
|
||||||
run: |
|
run: |
|
||||||
if [[ "false" = $(curl https://hosted.weblate.org/api/components/immich/immich/lock/ | jq .locked) ]]; then
|
# Then check for APPROVED by the bot, if absent fail
|
||||||
exit 1
|
gh pr view "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --json reviews | jq -e '.reviews | map(select(.author.login == env.BOT_NAME and .state == "APPROVED")) | length > 0' \
|
||||||
fi
|
|| (echo "The push-o-matic bot has not approved this PR yet" && exit 1)
|
||||||
- name: Find Pull Request
|
|
||||||
uses: juliangruber/find-pull-request-action@952b3bb1ddb2dcc0aa3479e98bb1c2d1a922f096 # v1.10.0
|
|
||||||
id: find-pr
|
|
||||||
with:
|
|
||||||
branch: chore/translations
|
|
||||||
- name: Fail if existing weblate PR
|
|
||||||
if: ${{ steps.find-pr.outputs.number }}
|
|
||||||
run: exit 1
|
|
||||||
success-check-lock:
|
success-check-lock:
|
||||||
name: Weblate Lock Check Success
|
name: Weblate Lock Check Success
|
||||||
needs: [enforce-lock]
|
needs: [enforce-lock]
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ mobile/libisar.dylib
|
|||||||
mobile/openapi/test
|
mobile/openapi/test
|
||||||
mobile/openapi/doc
|
mobile/openapi/doc
|
||||||
mobile/openapi/.openapi-generator/FILES
|
mobile/openapi/.openapi-generator/FILES
|
||||||
|
mobile/ios/build
|
||||||
|
|
||||||
open-api/typescript-sdk/build
|
open-api/typescript-sdk/build
|
||||||
mobile/android/fastlane/report.xml
|
mobile/android/fastlane/report.xml
|
||||||
@@ -25,3 +26,5 @@ mobile/ios/fastlane/report.xml
|
|||||||
|
|
||||||
vite.config.js.timestamp-*
|
vite.config.js.timestamp-*
|
||||||
.pnpm-store
|
.pnpm-store
|
||||||
|
.devcontainer/library
|
||||||
|
.devcontainer/.env*
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
module.exports = {
|
||||||
|
hooks: {
|
||||||
|
readPackage: (pkg) => {
|
||||||
|
if (!pkg.name) {
|
||||||
|
return pkg;
|
||||||
|
}
|
||||||
|
if (pkg.name === "exiftool-vendored") {
|
||||||
|
if (pkg.optionalDependencies["exiftool-vendored.pl"]) {
|
||||||
|
// make exiftool-vendored.pl a regular dependency
|
||||||
|
pkg.dependencies["exiftool-vendored.pl"] =
|
||||||
|
pkg.optionalDependencies["exiftool-vendored.pl"];
|
||||||
|
delete pkg.optionalDependencies["exiftool-vendored.pl"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return pkg;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
Vendored
+2
-1
@@ -56,7 +56,8 @@
|
|||||||
"explorer.fileNesting.enabled": true,
|
"explorer.fileNesting.enabled": true,
|
||||||
"explorer.fileNesting.patterns": {
|
"explorer.fileNesting.patterns": {
|
||||||
"*.dart": "${capture}.g.dart,${capture}.gr.dart,${capture}.drift.dart",
|
"*.dart": "${capture}.g.dart,${capture}.gr.dart,${capture}.drift.dart",
|
||||||
"*.ts": "${capture}.spec.ts,${capture}.mock.ts"
|
"*.ts": "${capture}.spec.ts,${capture}.mock.ts",
|
||||||
|
"package.json": "package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb, bun.lock, pnpm-workspace.yaml, .pnpmfile.cjs"
|
||||||
},
|
},
|
||||||
"svelte.enable-ts-plugin": true,
|
"svelte.enable-ts-plugin": true,
|
||||||
"typescript.preferences.importModuleSpecifier": "non-relative"
|
"typescript.preferences.importModuleSpecifier": "non-relative"
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
/.github/ @bo0tzz
|
/.github/ @bo0tzz
|
||||||
/docker/ @bo0tzz
|
/docker/ @bo0tzz
|
||||||
/server/ @danieldietzler
|
/server/ @danieldietzler
|
||||||
|
/web/ @danieldietzler
|
||||||
/machine-learning/ @mertalev
|
/machine-learning/ @mertalev
|
||||||
/e2e/ @danieldietzler
|
/e2e/ @danieldietzler
|
||||||
|
/mobile/ @shenlong-tanwen
|
||||||
|
|||||||
@@ -8,14 +8,14 @@ dev-update:
|
|||||||
@trap 'make dev-down' EXIT; COMPOSE_BAKE=true docker compose -f ./docker/docker-compose.dev.yml up --build -V --remove-orphans
|
@trap 'make dev-down' EXIT; COMPOSE_BAKE=true docker compose -f ./docker/docker-compose.dev.yml up --build -V --remove-orphans
|
||||||
|
|
||||||
dev-scale:
|
dev-scale:
|
||||||
@trap 'make dev-down' EXIT; COMPOSE_BAKE=true docker compose -f ./docker/docker-compose.dev.yml up --build -V --scale immich-server=3 --remove-orphans
|
@trap 'make dev-down' EXIT; COMPOSE_BAKE=true docker compose -f ./docker/docker-compose.dev.yml up --build -V --scale immich-server=3 --remove-orphans
|
||||||
|
|
||||||
dev-docs:
|
dev-docs:
|
||||||
npm --prefix docs run start
|
npm --prefix docs run start
|
||||||
|
|
||||||
.PHONY: e2e
|
.PHONY: e2e
|
||||||
e2e:
|
e2e:
|
||||||
@trap 'make e2e-down' EXIT; COMPOSE_BAKE=true docker compose -f ./e2e/docker-compose.yml up --build -V --remove-orphans
|
@trap 'make e2e-down' EXIT; COMPOSE_BAKE=true docker compose -f ./e2e/docker-compose.yml up --remove-orphans
|
||||||
|
|
||||||
e2e-update:
|
e2e-update:
|
||||||
@trap 'make e2e-down' EXIT; COMPOSE_BAKE=true docker compose -f ./e2e/docker-compose.yml up --build -V --remove-orphans
|
@trap 'make e2e-down' EXIT; COMPOSE_BAKE=true docker compose -f ./e2e/docker-compose.yml up --build -V --remove-orphans
|
||||||
@@ -43,7 +43,7 @@ open-api-typescript:
|
|||||||
cd ./open-api && bash ./bin/generate-open-api.sh typescript
|
cd ./open-api && bash ./bin/generate-open-api.sh typescript
|
||||||
|
|
||||||
sql:
|
sql:
|
||||||
npm --prefix server run sync:sql
|
pnpm --filter immich run sync:sql
|
||||||
|
|
||||||
attach-server:
|
attach-server:
|
||||||
docker exec -it docker_immich-server_1 sh
|
docker exec -it docker_immich-server_1 sh
|
||||||
@@ -51,33 +51,59 @@ attach-server:
|
|||||||
renovate:
|
renovate:
|
||||||
LOG_LEVEL=debug npx renovate --platform=local --repository-cache=reset
|
LOG_LEVEL=debug npx renovate --platform=local --repository-cache=reset
|
||||||
|
|
||||||
|
# Directories that need to be created for volumes or build output
|
||||||
|
VOLUME_DIRS = \
|
||||||
|
./.pnpm-store \
|
||||||
|
./web/.svelte-kit \
|
||||||
|
./web/node_modules \
|
||||||
|
./web/coverage \
|
||||||
|
./e2e/node_modules \
|
||||||
|
./docs/node_modules \
|
||||||
|
./server/node_modules \
|
||||||
|
./open-api/typescript-sdk/node_modules \
|
||||||
|
./.github/node_modules \
|
||||||
|
./node_modules \
|
||||||
|
./cli/node_modules
|
||||||
|
|
||||||
|
# Include .env file if it exists
|
||||||
|
-include docker/.env
|
||||||
|
|
||||||
MODULES = e2e server web cli sdk docs .github
|
MODULES = e2e server web cli sdk docs .github
|
||||||
|
|
||||||
|
# directory to package name mapping function
|
||||||
|
# cli = @immich/cli
|
||||||
|
# docs = documentation
|
||||||
|
# e2e = immich-e2e
|
||||||
|
# open-api/typescript-sdk = @immich/sdk
|
||||||
|
# server = immich
|
||||||
|
# web = immich-web
|
||||||
|
map-package = $(subst sdk,@immich/sdk,$(subst cli,@immich/cli,$(subst docs,documentation,$(subst e2e,immich-e2e,$(subst server,immich,$(subst web,immich-web,$1))))))
|
||||||
|
|
||||||
audit-%:
|
audit-%:
|
||||||
npm --prefix $(subst sdk,open-api/typescript-sdk,$*) audit fix
|
pnpm --filter $(call map-package,$*) audit fix
|
||||||
install-%:
|
install-%:
|
||||||
npm --prefix $(subst sdk,open-api/typescript-sdk,$*) i
|
pnpm --filter $(call map-package,$*) install $(if $(FROZEN),--frozen-lockfile) $(if $(OFFLINE),--offline)
|
||||||
ci-%:
|
|
||||||
npm --prefix $(subst sdk,open-api/typescript-sdk,$*) ci
|
|
||||||
build-cli: build-sdk
|
build-cli: build-sdk
|
||||||
build-web: build-sdk
|
build-web: build-sdk
|
||||||
build-%: install-%
|
build-%: install-%
|
||||||
npm --prefix $(subst sdk,open-api/typescript-sdk,$*) run build
|
pnpm --filter $(call map-package,$*) run build
|
||||||
format-%:
|
format-%:
|
||||||
npm --prefix $* run format:fix
|
pnpm --filter $(call map-package,$*) run format:fix
|
||||||
lint-%:
|
lint-%:
|
||||||
npm --prefix $* run lint:fix
|
pnpm --filter $(call map-package,$*) run lint:fix
|
||||||
|
lint-web:
|
||||||
|
pnpm --filter $(call map-package,$*) run lint:p
|
||||||
check-%:
|
check-%:
|
||||||
npm --prefix $* run check
|
pnpm --filter $(call map-package,$*) run check
|
||||||
check-web:
|
check-web:
|
||||||
npm --prefix web run check:typescript
|
pnpm --filter immich-web run check:typescript
|
||||||
npm --prefix web run check:svelte
|
pnpm --filter immich-web run check:svelte
|
||||||
test-%:
|
test-%:
|
||||||
npm --prefix $* run test
|
pnpm --filter $(call map-package,$*) run test
|
||||||
test-e2e:
|
test-e2e:
|
||||||
docker compose -f ./e2e/docker-compose.yml build
|
docker compose -f ./e2e/docker-compose.yml build
|
||||||
npm --prefix e2e run test
|
pnpm --filter immich-e2e run test
|
||||||
npm --prefix e2e run test:web
|
pnpm --filter immich-e2e run test:web
|
||||||
test-medium:
|
test-medium:
|
||||||
docker run \
|
docker run \
|
||||||
--rm \
|
--rm \
|
||||||
@@ -87,27 +113,39 @@ test-medium:
|
|||||||
-v ./server/tsconfig.json:/usr/src/app/tsconfig.json \
|
-v ./server/tsconfig.json:/usr/src/app/tsconfig.json \
|
||||||
-e NODE_ENV=development \
|
-e NODE_ENV=development \
|
||||||
immich-server:latest \
|
immich-server:latest \
|
||||||
-c "npm ci && npm run test:medium -- --run"
|
-c "pnpm test:medium -- --run"
|
||||||
test-medium-dev:
|
test-medium-dev:
|
||||||
docker exec -it immich_server /bin/sh -c "npm run test:medium"
|
docker exec -it immich_server /bin/sh -c "pnpm run test:medium"
|
||||||
|
|
||||||
build-all: $(foreach M,$(filter-out e2e .github,$(MODULES)),build-$M) ;
|
install-all:
|
||||||
install-all: $(foreach M,$(MODULES),install-$M) ;
|
pnpm -r --filter '!documentation' install
|
||||||
ci-all: $(foreach M,$(filter-out .github,$(MODULES)),ci-$M) ;
|
|
||||||
check-all: $(foreach M,$(filter-out sdk cli docs .github,$(MODULES)),check-$M) ;
|
build-all: $(foreach M,$(filter-out e2e docs .github,$(MODULES)),build-$M) ;
|
||||||
lint-all: $(foreach M,$(filter-out sdk docs .github,$(MODULES)),lint-$M) ;
|
|
||||||
format-all: $(foreach M,$(filter-out sdk,$(MODULES)),format-$M) ;
|
check-all:
|
||||||
audit-all: $(foreach M,$(MODULES),audit-$M) ;
|
pnpm -r --filter '!documentation' run "/^(check|check\:svelte|check\:typescript)$/"
|
||||||
hygiene-all: lint-all format-all check-all sql audit-all;
|
lint-all:
|
||||||
test-all: $(foreach M,$(filter-out sdk docs .github,$(MODULES)),test-$M) ;
|
pnpm -r --filter '!documentation' run lint:fix
|
||||||
|
format-all:
|
||||||
|
pnpm -r --filter '!documentation' run format:fix
|
||||||
|
audit-all:
|
||||||
|
pnpm -r --filter '!documentation' audit fix
|
||||||
|
hygiene-all: audit-all
|
||||||
|
pnpm -r --filter '!documentation' run "/(format:fix|check|check:svelte|check:typescript|sql)/"
|
||||||
|
|
||||||
|
test-all:
|
||||||
|
pnpm -r --filter '!documentation' run "/^test/"
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
find . -name "node_modules" -type d -prune -exec rm -rf {} +
|
find . -name "node_modules" -type d -prune -exec rm -rf {} +
|
||||||
find . -name "dist" -type d -prune -exec rm -rf '{}' +
|
find . -name "dist" -type d -prune -exec rm -rf '{}' +
|
||||||
find . -name "build" -type d -prune -exec rm -rf '{}' +
|
find . -name "build" -type d -prune -exec rm -rf '{}' +
|
||||||
find . -name "svelte-kit" -type d -prune -exec rm -rf '{}' +
|
find . -name ".svelte-kit" -type d -prune -exec rm -rf '{}' +
|
||||||
command -v docker >/dev/null 2>&1 && docker compose -f ./docker/docker-compose.dev.yml rm -v -f || true
|
find . -name "coverage" -type d -prune -exec rm -rf '{}' +
|
||||||
command -v docker >/dev/null 2>&1 && docker compose -f ./e2e/docker-compose.yml rm -v -f || true
|
find . -name ".pnpm-store" -type d -prune -exec rm -rf '{}' +
|
||||||
|
command -v docker >/dev/null 2>&1 && docker compose -f ./docker/docker-compose.dev.yml down -v --remove-orphans || true
|
||||||
|
command -v docker >/dev/null 2>&1 && docker compose -f ./e2e/docker-compose.yml down -v --remove-orphans || true
|
||||||
|
|
||||||
|
|
||||||
setup-server-dev: install-server
|
setup-server-dev: install-server
|
||||||
setup-web-dev: install-sdk build-sdk install-web
|
setup-web-dev: install-sdk build-sdk install-web
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
22.18.0
|
22.19.0
|
||||||
|
|||||||
+8
-13
@@ -1,19 +1,14 @@
|
|||||||
FROM node:22.16.0-alpine3.20@sha256:2289fb1fba0f4633b08ec47b94a89c7e20b829fc5679f9b7b298eaa2f1ed8b7e AS core
|
FROM node:22.16.0-alpine3.20@sha256:2289fb1fba0f4633b08ec47b94a89c7e20b829fc5679f9b7b298eaa2f1ed8b7e AS core
|
||||||
|
|
||||||
WORKDIR /usr/src/open-api/typescript-sdk
|
|
||||||
COPY open-api/typescript-sdk/package*.json open-api/typescript-sdk/tsconfig*.json ./
|
|
||||||
RUN npm ci
|
|
||||||
COPY open-api/typescript-sdk/ ./
|
|
||||||
RUN npm run build
|
|
||||||
|
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
|
COPY package* pnpm* .pnpmfile.cjs ./
|
||||||
COPY cli/package.json cli/package-lock.json ./
|
COPY ./cli ./cli/
|
||||||
RUN npm ci
|
COPY ./open-api/typescript-sdk ./open-api/typescript-sdk/
|
||||||
|
RUN corepack enable pnpm && \
|
||||||
COPY cli .
|
pnpm install --filter @immich/sdk --filter @immich/cli --frozen-lockfile && \
|
||||||
RUN npm run build
|
pnpm --filter @immich/sdk build && \
|
||||||
|
pnpm --filter @immich/cli build
|
||||||
|
|
||||||
WORKDIR /import
|
WORKDIR /import
|
||||||
|
|
||||||
ENTRYPOINT ["node", "/usr/src/app/dist"]
|
ENTRYPOINT ["node", "/usr/src/app/cli/dist"]
|
||||||
|
|||||||
Generated
-4600
File diff suppressed because it is too large
Load Diff
+3
-4
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@immich/cli",
|
"name": "@immich/cli",
|
||||||
"version": "2.2.79",
|
"version": "2.2.92",
|
||||||
"description": "Command Line Interface (CLI) for Immich",
|
"description": "Command Line Interface (CLI) for Immich",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"exports": "./dist/index.js",
|
"exports": "./dist/index.js",
|
||||||
@@ -13,7 +13,6 @@
|
|||||||
"cli"
|
"cli"
|
||||||
],
|
],
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/eslintrc": "^3.1.0",
|
|
||||||
"@eslint/js": "^9.8.0",
|
"@eslint/js": "^9.8.0",
|
||||||
"@immich/sdk": "file:../open-api/typescript-sdk",
|
"@immich/sdk": "file:../open-api/typescript-sdk",
|
||||||
"@types/byte-size": "^8.1.0",
|
"@types/byte-size": "^8.1.0",
|
||||||
@@ -21,7 +20,7 @@
|
|||||||
"@types/lodash-es": "^4.17.12",
|
"@types/lodash-es": "^4.17.12",
|
||||||
"@types/micromatch": "^4.0.9",
|
"@types/micromatch": "^4.0.9",
|
||||||
"@types/mock-fs": "^4.13.1",
|
"@types/mock-fs": "^4.13.1",
|
||||||
"@types/node": "^22.17.0",
|
"@types/node": "^22.18.1",
|
||||||
"@vitest/coverage-v8": "^3.0.0",
|
"@vitest/coverage-v8": "^3.0.0",
|
||||||
"byte-size": "^9.0.0",
|
"byte-size": "^9.0.0",
|
||||||
"cli-progress": "^3.12.0",
|
"cli-progress": "^3.12.0",
|
||||||
@@ -69,6 +68,6 @@
|
|||||||
"micromatch": "^4.0.8"
|
"micromatch": "^4.0.8"
|
||||||
},
|
},
|
||||||
"volta": {
|
"volta": {
|
||||||
"node": "22.18.0"
|
"node": "22.19.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+30
-30
@@ -2,37 +2,37 @@
|
|||||||
# Manual edits may be lost in future updates.
|
# Manual edits may be lost in future updates.
|
||||||
|
|
||||||
provider "registry.opentofu.org/cloudflare/cloudflare" {
|
provider "registry.opentofu.org/cloudflare/cloudflare" {
|
||||||
version = "4.52.1"
|
version = "4.52.5"
|
||||||
constraints = "4.52.1"
|
constraints = "4.52.5"
|
||||||
hashes = [
|
hashes = [
|
||||||
"h1:2lHvafwGbLdmc9lYkuJFw3nsInaQjRpjX/JfIRKmq/M=",
|
"h1:+rfzF+16ZcWZWnTyW/p1HHTzYbPKX8Zt2nIFtR/+f+E=",
|
||||||
"h1:596JomwjrtUrOSreq9NNCS+rj70+jOV+0pfja5MXiTI=",
|
"h1:18bXaaOSq8MWKuMxo/4y7EB7/i7G90y5QsKHZRmkoDo=",
|
||||||
"h1:7mBOA5TVAIt3qAwPXKCtE0RSYeqij9v30mnksuBbpEg=",
|
"h1:4vZVOpKeEQZsF2VrARRZFeL37Ed/gD4rRMtfnvWQres=",
|
||||||
"h1:ELVgzh4kHKBCYdL+2A8JjWS0E1snLUN3Mmz3Vo6qSfw=",
|
"h1:BZOsTF83QPKXTAaYqxPKzdl1KRjk/L2qbPpFjM0w28A=",
|
||||||
"h1:FGGM5yLFf72g3kSXM3LAN64Gf/AkXr5WCmhixgnP+l4=",
|
"h1:CDuC+HXLvc1z6wkCRsSDcc/+QENIHEtssYshiWg3opA=",
|
||||||
"h1:JupkJbQALcIVoMhHImrLeLDsQR1ET7VJLGC7ONxjqGU=",
|
"h1:DE+YFzLnqSe79pI2R4idRGx5QzLdrA7RXvngTkGfZ30=",
|
||||||
"h1:KsaE4JNq+1uV1nJsuTcYar/8lyY6zKS5UBEpfYg3wvc=",
|
"h1:DfaJwH3Ml4yrRbdAY4AcDVy0QTQk5T3A622TXzS/u2E=",
|
||||||
"h1:NHZ5RJIzQDLhie/ykl3uI6UPfNQR9Lu5Ti7JPR6X904=",
|
"h1:EIDXP0W3kgIv2pecrFmqtK/DnlqkyckzBzhxKaXU+4A=",
|
||||||
"h1:NfAuMbn6LQPLDtJhbzO1MX9JMIGLMa8K6CpekvtsuX8=",
|
"h1:EV4kYyaOnwGA0bh/3hU6Ezqnt1PFDxopH7i85e48IzY=",
|
||||||
"h1:e+vNKokamDsp/kJvFr2pRudzwEz2r49iZ/oSggw+1LY=",
|
"h1:M0iXabfzamU+MPDi0G9XACpbacFKMakmM+Z9HZ8HrsM=",
|
||||||
"h1:jnb4VdfNZ79I3yj7Q8x+JmOT+FxbfjjRfrF0dL0yCW8=",
|
"h1:YWmCbGF/KbsrUzcYVBLscwLizidbp95TDQa0N2qpmVo=",
|
||||||
"h1:kmF//O539d7NuHU7qIxDj7Wz4eJmLKFiI5glwQivldU=",
|
"h1:cxPcCB5gbrpUO1+IXkQYs1YTY50/0IlApCzGea0cwuQ=",
|
||||||
"h1:s6XriaKwOgV4jvKAGPXkrxhhOQxpNU5dceZwi9Z/1k8=",
|
"h1:g6DldikTV2HXUu9uoeNY5FuLufgaYWF4ufgZg7wq62s=",
|
||||||
"h1:wt3WBEBAeSGTlC9OlnTlAALxRiK4SQgLy0KgBIS7qzs=",
|
"h1:oi/Hrx9pwoQ+Z52CBC+rrowVH387EIj0qvnxQgDeI+0=",
|
||||||
"zh:2fb95e1d3229b9b6c704e1a413c7481c60f139780d9641f657b6eb9b633b90f2",
|
"zh:1a3400cb38863b2585968d1876706bcfc67a148e1318a1d325c6c7704adc999b",
|
||||||
"zh:379c7680983383862236e9e6e720c3114195c40526172188e88d0ffcf50dfe2e",
|
"zh:4c5062cb9e9da1676f06ae92b8370186d98976cc4c7030d3cd76df12af54282a",
|
||||||
"zh:55533beb6cfc02d22ffda8cba8027bc2c841bb172cd637ed0d28323d41395f8f",
|
"zh:52110f493b5f0587ef77a1cfd1a67001fd4c617b14c6502d732ab47352bdc2f7",
|
||||||
"zh:5abd70760e4eb1f37a1c307cbd2989ea7c9ba0afb93818c67c1d363a31f75703",
|
"zh:5aa536f9eaeb43823aaf2aa80e7d39b25ef2b383405ed034aa16a28b446a9238",
|
||||||
"zh:699f1c8cd66129176fe659ebf0e6337632a8967a28d2630b6ae5948665c0c2ae",
|
"zh:5cc39459a1c6be8a918f17054e4fbba573825ed5597dcada588fe99614d98a5b",
|
||||||
"zh:69c15acd73c451e89de6477059cda2f3ec200b48ae4b9ff3646c4d389fd3205e",
|
"zh:629ae6a7ba298815131da826474d199312d21cec53a4d5ded4fa56a692e6f072",
|
||||||
"zh:6e02b687de21b844f8266dff99e93e7c61fc8eb688f4bbb23803caceb251839e",
|
"zh:719cc7c75dc1d3eb30c22ff5102a017996d9788b948078c7e1c5b3446aeca661",
|
||||||
"zh:7a51d17b87ed87b7bebf2ad9fc7c3a74f16a1b44eee92c779c08eb89258c0496",
|
"zh:8698635a3ca04383c1e93b21d6963346bdae54d27177a48e4b1435b7f731731c",
|
||||||
"zh:88ad84436837b0f55302f22748505972634e87400d6902260fd6b7ba1610f937",
|
|
||||||
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
|
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
|
||||||
"zh:8d46c3d9f4f7ad20ac6ef01daa63f4e30a2d16dcb1bb5c7c7ee3dc6be38e9ca1",
|
"zh:8a9993f1dcadf1dd6ca43b23348abe374605d29945a2fafc07fb3457644e6a54",
|
||||||
"zh:913d64e72a4929dae1d4793e2004f4f9a58b138ea337d9d94fa35cafbf06550a",
|
"zh:b1b9a1e6bcc24d5863a664a411d2dc906373ae7a2399d2d65548ce7377057852",
|
||||||
"zh:c8d93cf86e2e49f6cec665cfe78b82c144cce15a8b2e30f343385fadd1251849",
|
"zh:b270184cdeec277218e84b94cb136fead753da717f9b9dc378e51907f3f00bb0",
|
||||||
"zh:cc4f69397d9bc34a528a5609a024c3a48f54f21616c0008792dd417297add955",
|
"zh:dff2bc10071210181726ce270f954995fe42c696e61e2e8f874021fed02521e5",
|
||||||
"zh:df99cdb8b064aad35ffea77e645cf6541d0b1b2ebc51b6d26c42031de60ab69e",
|
"zh:e8e87b40b6a87dc097b0fdc20d3f725cec0d82abc9cc3755c1f89f8f6e8b0036",
|
||||||
|
"zh:ee964a6573d399a5dd22ce328fb38ca1207797a02248f14b2e4913ee390e7803",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ terraform {
|
|||||||
required_providers {
|
required_providers {
|
||||||
cloudflare = {
|
cloudflare = {
|
||||||
source = "cloudflare/cloudflare"
|
source = "cloudflare/cloudflare"
|
||||||
version = "4.52.1"
|
version = "4.52.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+30
-30
@@ -2,37 +2,37 @@
|
|||||||
# Manual edits may be lost in future updates.
|
# Manual edits may be lost in future updates.
|
||||||
|
|
||||||
provider "registry.opentofu.org/cloudflare/cloudflare" {
|
provider "registry.opentofu.org/cloudflare/cloudflare" {
|
||||||
version = "4.52.1"
|
version = "4.52.5"
|
||||||
constraints = "4.52.1"
|
constraints = "4.52.5"
|
||||||
hashes = [
|
hashes = [
|
||||||
"h1:2lHvafwGbLdmc9lYkuJFw3nsInaQjRpjX/JfIRKmq/M=",
|
"h1:+rfzF+16ZcWZWnTyW/p1HHTzYbPKX8Zt2nIFtR/+f+E=",
|
||||||
"h1:596JomwjrtUrOSreq9NNCS+rj70+jOV+0pfja5MXiTI=",
|
"h1:18bXaaOSq8MWKuMxo/4y7EB7/i7G90y5QsKHZRmkoDo=",
|
||||||
"h1:7mBOA5TVAIt3qAwPXKCtE0RSYeqij9v30mnksuBbpEg=",
|
"h1:4vZVOpKeEQZsF2VrARRZFeL37Ed/gD4rRMtfnvWQres=",
|
||||||
"h1:ELVgzh4kHKBCYdL+2A8JjWS0E1snLUN3Mmz3Vo6qSfw=",
|
"h1:BZOsTF83QPKXTAaYqxPKzdl1KRjk/L2qbPpFjM0w28A=",
|
||||||
"h1:FGGM5yLFf72g3kSXM3LAN64Gf/AkXr5WCmhixgnP+l4=",
|
"h1:CDuC+HXLvc1z6wkCRsSDcc/+QENIHEtssYshiWg3opA=",
|
||||||
"h1:JupkJbQALcIVoMhHImrLeLDsQR1ET7VJLGC7ONxjqGU=",
|
"h1:DE+YFzLnqSe79pI2R4idRGx5QzLdrA7RXvngTkGfZ30=",
|
||||||
"h1:KsaE4JNq+1uV1nJsuTcYar/8lyY6zKS5UBEpfYg3wvc=",
|
"h1:DfaJwH3Ml4yrRbdAY4AcDVy0QTQk5T3A622TXzS/u2E=",
|
||||||
"h1:NHZ5RJIzQDLhie/ykl3uI6UPfNQR9Lu5Ti7JPR6X904=",
|
"h1:EIDXP0W3kgIv2pecrFmqtK/DnlqkyckzBzhxKaXU+4A=",
|
||||||
"h1:NfAuMbn6LQPLDtJhbzO1MX9JMIGLMa8K6CpekvtsuX8=",
|
"h1:EV4kYyaOnwGA0bh/3hU6Ezqnt1PFDxopH7i85e48IzY=",
|
||||||
"h1:e+vNKokamDsp/kJvFr2pRudzwEz2r49iZ/oSggw+1LY=",
|
"h1:M0iXabfzamU+MPDi0G9XACpbacFKMakmM+Z9HZ8HrsM=",
|
||||||
"h1:jnb4VdfNZ79I3yj7Q8x+JmOT+FxbfjjRfrF0dL0yCW8=",
|
"h1:YWmCbGF/KbsrUzcYVBLscwLizidbp95TDQa0N2qpmVo=",
|
||||||
"h1:kmF//O539d7NuHU7qIxDj7Wz4eJmLKFiI5glwQivldU=",
|
"h1:cxPcCB5gbrpUO1+IXkQYs1YTY50/0IlApCzGea0cwuQ=",
|
||||||
"h1:s6XriaKwOgV4jvKAGPXkrxhhOQxpNU5dceZwi9Z/1k8=",
|
"h1:g6DldikTV2HXUu9uoeNY5FuLufgaYWF4ufgZg7wq62s=",
|
||||||
"h1:wt3WBEBAeSGTlC9OlnTlAALxRiK4SQgLy0KgBIS7qzs=",
|
"h1:oi/Hrx9pwoQ+Z52CBC+rrowVH387EIj0qvnxQgDeI+0=",
|
||||||
"zh:2fb95e1d3229b9b6c704e1a413c7481c60f139780d9641f657b6eb9b633b90f2",
|
"zh:1a3400cb38863b2585968d1876706bcfc67a148e1318a1d325c6c7704adc999b",
|
||||||
"zh:379c7680983383862236e9e6e720c3114195c40526172188e88d0ffcf50dfe2e",
|
"zh:4c5062cb9e9da1676f06ae92b8370186d98976cc4c7030d3cd76df12af54282a",
|
||||||
"zh:55533beb6cfc02d22ffda8cba8027bc2c841bb172cd637ed0d28323d41395f8f",
|
"zh:52110f493b5f0587ef77a1cfd1a67001fd4c617b14c6502d732ab47352bdc2f7",
|
||||||
"zh:5abd70760e4eb1f37a1c307cbd2989ea7c9ba0afb93818c67c1d363a31f75703",
|
"zh:5aa536f9eaeb43823aaf2aa80e7d39b25ef2b383405ed034aa16a28b446a9238",
|
||||||
"zh:699f1c8cd66129176fe659ebf0e6337632a8967a28d2630b6ae5948665c0c2ae",
|
"zh:5cc39459a1c6be8a918f17054e4fbba573825ed5597dcada588fe99614d98a5b",
|
||||||
"zh:69c15acd73c451e89de6477059cda2f3ec200b48ae4b9ff3646c4d389fd3205e",
|
"zh:629ae6a7ba298815131da826474d199312d21cec53a4d5ded4fa56a692e6f072",
|
||||||
"zh:6e02b687de21b844f8266dff99e93e7c61fc8eb688f4bbb23803caceb251839e",
|
"zh:719cc7c75dc1d3eb30c22ff5102a017996d9788b948078c7e1c5b3446aeca661",
|
||||||
"zh:7a51d17b87ed87b7bebf2ad9fc7c3a74f16a1b44eee92c779c08eb89258c0496",
|
"zh:8698635a3ca04383c1e93b21d6963346bdae54d27177a48e4b1435b7f731731c",
|
||||||
"zh:88ad84436837b0f55302f22748505972634e87400d6902260fd6b7ba1610f937",
|
|
||||||
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
|
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
|
||||||
"zh:8d46c3d9f4f7ad20ac6ef01daa63f4e30a2d16dcb1bb5c7c7ee3dc6be38e9ca1",
|
"zh:8a9993f1dcadf1dd6ca43b23348abe374605d29945a2fafc07fb3457644e6a54",
|
||||||
"zh:913d64e72a4929dae1d4793e2004f4f9a58b138ea337d9d94fa35cafbf06550a",
|
"zh:b1b9a1e6bcc24d5863a664a411d2dc906373ae7a2399d2d65548ce7377057852",
|
||||||
"zh:c8d93cf86e2e49f6cec665cfe78b82c144cce15a8b2e30f343385fadd1251849",
|
"zh:b270184cdeec277218e84b94cb136fead753da717f9b9dc378e51907f3f00bb0",
|
||||||
"zh:cc4f69397d9bc34a528a5609a024c3a48f54f21616c0008792dd417297add955",
|
"zh:dff2bc10071210181726ce270f954995fe42c696e61e2e8f874021fed02521e5",
|
||||||
"zh:df99cdb8b064aad35ffea77e645cf6541d0b1b2ebc51b6d26c42031de60ab69e",
|
"zh:e8e87b40b6a87dc097b0fdc20d3f725cec0d82abc9cc3755c1f89f8f6e8b0036",
|
||||||
|
"zh:ee964a6573d399a5dd22ce328fb38ca1207797a02248f14b2e4913ee390e7803",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ terraform {
|
|||||||
required_providers {
|
required_providers {
|
||||||
cloudflare = {
|
cloudflare = {
|
||||||
source = "cloudflare/cloudflare"
|
source = "cloudflare/cloudflare"
|
||||||
version = "4.52.1"
|
version = "4.52.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,16 +23,24 @@ services:
|
|||||||
# service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
|
# service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
|
||||||
build:
|
build:
|
||||||
context: ../
|
context: ../
|
||||||
dockerfile: server/Dockerfile
|
dockerfile: server/Dockerfile.dev
|
||||||
target: dev
|
target: dev
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
volumes:
|
volumes:
|
||||||
- ../server:/usr/src/app/server
|
- ..:/usr/src/app
|
||||||
- ../open-api:/usr/src/app/open-api
|
|
||||||
- ${UPLOAD_LOCATION}/photos:/data
|
- ${UPLOAD_LOCATION}/photos:/data
|
||||||
- ${UPLOAD_LOCATION}/photos/upload:/data/upload
|
|
||||||
- /usr/src/app/server/node_modules
|
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- pnpm-store:/usr/src/app/.pnpm-store
|
||||||
|
- server-node_modules:/usr/src/app/server/node_modules
|
||||||
|
- web-node_modules:/usr/src/app/web/node_modules
|
||||||
|
- github-node_modules:/usr/src/app/.github/node_modules
|
||||||
|
- cli-node_modules:/usr/src/app/cli/node_modules
|
||||||
|
- docs-node_modules:/usr/src/app/docs/node_modules
|
||||||
|
- e2e-node_modules:/usr/src/app/e2e/node_modules
|
||||||
|
- sdk-node_modules:/usr/src/app/open-api/typescript-sdk/node_modules
|
||||||
|
- app-node_modules:/usr/src/app/node_modules
|
||||||
|
- sveltekit:/usr/src/app/web/.svelte-kit
|
||||||
|
- coverage:/usr/src/app/web/coverage
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
environment:
|
environment:
|
||||||
@@ -58,19 +66,20 @@ services:
|
|||||||
- 9231:9231
|
- 9231:9231
|
||||||
- 2283:2283
|
- 2283:2283
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
redis:
|
||||||
- database
|
condition: service_started
|
||||||
|
database:
|
||||||
|
condition: service_started
|
||||||
healthcheck:
|
healthcheck:
|
||||||
disable: false
|
disable: false
|
||||||
|
|
||||||
immich-web:
|
immich-web:
|
||||||
container_name: immich_web
|
container_name: immich_web
|
||||||
image: immich-web-dev:latest
|
image: immich-web-dev:latest
|
||||||
# Needed for rootless docker setup, see https://github.com/moby/moby/issues/45919
|
|
||||||
# user: 0:0
|
|
||||||
build:
|
build:
|
||||||
context: ../
|
context: ../
|
||||||
dockerfile: web/Dockerfile
|
dockerfile: server/Dockerfile.dev
|
||||||
|
target: dev
|
||||||
command: ['immich-web']
|
command: ['immich-web']
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
@@ -78,18 +87,26 @@ services:
|
|||||||
- 3000:3000
|
- 3000:3000
|
||||||
- 24678:24678
|
- 24678:24678
|
||||||
volumes:
|
volumes:
|
||||||
- ../web:/usr/src/app/web
|
- ..:/usr/src/app
|
||||||
- ../i18n:/usr/src/app/i18n
|
- pnpm-store:/usr/src/app/.pnpm-store
|
||||||
- ../open-api/:/usr/src/app/open-api/
|
- server-node_modules:/usr/src/app/server/node_modules
|
||||||
# - ../../ui:/usr/ui
|
- web-node_modules:/usr/src/app/web/node_modules
|
||||||
- /usr/src/app/web/node_modules
|
- github-node_modules:/usr/src/app/.github/node_modules
|
||||||
|
- cli-node_modules:/usr/src/app/cli/node_modules
|
||||||
|
- docs-node_modules:/usr/src/app/docs/node_modules
|
||||||
|
- e2e-node_modules:/usr/src/app/e2e/node_modules
|
||||||
|
- sdk-node_modules:/usr/src/app/open-api/typescript-sdk/node_modules
|
||||||
|
- app-node_modules:/usr/src/app/node_modules
|
||||||
|
- sveltekit:/usr/src/app/web/.svelte-kit
|
||||||
|
- coverage:/usr/src/app/web/coverage
|
||||||
ulimits:
|
ulimits:
|
||||||
nofile:
|
nofile:
|
||||||
soft: 1048576
|
soft: 1048576
|
||||||
hard: 1048576
|
hard: 1048576
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
depends_on:
|
depends_on:
|
||||||
- immich-server
|
immich-server:
|
||||||
|
condition: service_started
|
||||||
|
|
||||||
immich-machine-learning:
|
immich-machine-learning:
|
||||||
container_name: immich_machine_learning
|
container_name: immich_machine_learning
|
||||||
@@ -117,13 +134,13 @@ services:
|
|||||||
|
|
||||||
redis:
|
redis:
|
||||||
container_name: immich_redis
|
container_name: immich_redis
|
||||||
image: docker.io/valkey/valkey:8-bookworm@sha256:5b8f8c333bef895c925f56629d6ba90aea95a4f7391f62411e625267c600b19c
|
image: docker.io/valkey/valkey:8-bookworm@sha256:fea8b3e67b15729d4bb70589eb03367bab9ad1ee89c876f54327fc7c6e618571
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: redis-cli ping || exit 1
|
test: redis-cli ping || exit 1
|
||||||
|
|
||||||
database:
|
database:
|
||||||
container_name: immich_postgres
|
container_name: immich_postgres
|
||||||
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:32324a2f41df5de9efe1af166b7008c3f55646f8d0e00d9550c16c9822366b4a
|
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:c44be5f2871c59362966d71eab4268170eb6f5653c0e6170184e72b38ffdf107
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
environment:
|
environment:
|
||||||
@@ -161,3 +178,14 @@ volumes:
|
|||||||
model-cache:
|
model-cache:
|
||||||
prometheus-data:
|
prometheus-data:
|
||||||
grafana-data:
|
grafana-data:
|
||||||
|
pnpm-store:
|
||||||
|
server-node_modules:
|
||||||
|
web-node_modules:
|
||||||
|
github-node_modules:
|
||||||
|
cli-node_modules:
|
||||||
|
docs-node_modules:
|
||||||
|
e2e-node_modules:
|
||||||
|
sdk-node_modules:
|
||||||
|
app-node_modules:
|
||||||
|
sveltekit:
|
||||||
|
coverage:
|
||||||
|
|||||||
@@ -56,14 +56,14 @@ services:
|
|||||||
|
|
||||||
redis:
|
redis:
|
||||||
container_name: immich_redis
|
container_name: immich_redis
|
||||||
image: docker.io/valkey/valkey:8-bookworm@sha256:5b8f8c333bef895c925f56629d6ba90aea95a4f7391f62411e625267c600b19c
|
image: docker.io/valkey/valkey:8-bookworm@sha256:fea8b3e67b15729d4bb70589eb03367bab9ad1ee89c876f54327fc7c6e618571
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: redis-cli ping || exit 1
|
test: redis-cli ping || exit 1
|
||||||
restart: always
|
restart: always
|
||||||
|
|
||||||
database:
|
database:
|
||||||
container_name: immich_postgres
|
container_name: immich_postgres
|
||||||
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:32324a2f41df5de9efe1af166b7008c3f55646f8d0e00d9550c16c9822366b4a
|
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:c44be5f2871c59362966d71eab4268170eb6f5653c0e6170184e72b38ffdf107
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
environment:
|
environment:
|
||||||
@@ -95,7 +95,7 @@ services:
|
|||||||
command: ['./run.sh', '-disable-reporting']
|
command: ['./run.sh', '-disable-reporting']
|
||||||
ports:
|
ports:
|
||||||
- 3000:3000
|
- 3000:3000
|
||||||
image: grafana/grafana:12.1.0-ubuntu@sha256:397aa30dd1af16cb6c5c9879498e467973a7f87eacf949f6d5a29407a3843809
|
image: grafana/grafana:12.1.1-ubuntu@sha256:d1da838234ff2de93e0065ee1bf0e66d38f948dcc5d718c25fa6237e14b4424a
|
||||||
volumes:
|
volumes:
|
||||||
- grafana-data:/var/lib/grafana
|
- grafana-data:/var/lib/grafana
|
||||||
|
|
||||||
|
|||||||
@@ -49,14 +49,14 @@ services:
|
|||||||
|
|
||||||
redis:
|
redis:
|
||||||
container_name: immich_redis
|
container_name: immich_redis
|
||||||
image: docker.io/valkey/valkey:8-bookworm@sha256:5b8f8c333bef895c925f56629d6ba90aea95a4f7391f62411e625267c600b19c
|
image: docker.io/valkey/valkey:8-bookworm@sha256:fea8b3e67b15729d4bb70589eb03367bab9ad1ee89c876f54327fc7c6e618571
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: redis-cli ping || exit 1
|
test: redis-cli ping || exit 1
|
||||||
restart: always
|
restart: always
|
||||||
|
|
||||||
database:
|
database:
|
||||||
container_name: immich_postgres
|
container_name: immich_postgres
|
||||||
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:32324a2f41df5de9efe1af166b7008c3f55646f8d0e00d9550c16c9822366b4a
|
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:c44be5f2871c59362966d71eab4268170eb6f5653c0e6170184e72b38ffdf107
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||||||
POSTGRES_USER: ${DB_USERNAME}
|
POSTGRES_USER: ${DB_USERNAME}
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
22.18.0
|
22.19.0
|
||||||
|
|||||||
+5
-5
@@ -5,13 +5,13 @@ This website is built using [Docusaurus](https://docusaurus.io/), a modern stati
|
|||||||
### Installation
|
### Installation
|
||||||
|
|
||||||
```
|
```
|
||||||
$ npm install
|
$ pnpm install
|
||||||
```
|
```
|
||||||
|
|
||||||
### Local Development
|
### Local Development
|
||||||
|
|
||||||
```
|
```
|
||||||
$ npm run start
|
$ pnpm run start
|
||||||
```
|
```
|
||||||
|
|
||||||
This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
|
This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
|
||||||
@@ -19,7 +19,7 @@ This command starts a local development server and opens up a browser window. Mo
|
|||||||
### Build
|
### Build
|
||||||
|
|
||||||
```
|
```
|
||||||
$ npm run build
|
$ pnpm run build
|
||||||
```
|
```
|
||||||
|
|
||||||
This command generates static content into the `build` directory and can be served using any static contents hosting service.
|
This command generates static content into the `build` directory and can be served using any static contents hosting service.
|
||||||
@@ -29,13 +29,13 @@ This command generates static content into the `build` directory and can be serv
|
|||||||
Using SSH:
|
Using SSH:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ USE_SSH=true npm run deploy
|
$ USE_SSH=true pnpm run deploy
|
||||||
```
|
```
|
||||||
|
|
||||||
Not using SSH:
|
Not using SSH:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ GIT_USER=<Your GitHub username> npm run deploy
|
$ GIT_USER=<Your GitHub username> pnpm run deploy
|
||||||
```
|
```
|
||||||
|
|
||||||
If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.
|
If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.
|
||||||
|
|||||||
@@ -1,110 +0,0 @@
|
|||||||
---
|
|
||||||
slug: release-1-36
|
|
||||||
title: Release v1.36.0
|
|
||||||
authors: [alextran]
|
|
||||||
tags: [release]
|
|
||||||
date: 2022-11-10
|
|
||||||
---
|
|
||||||
|
|
||||||
Hello everyone, it is my pleasure to deliver the new release of Immich to you. The team has been working hard to bring you the new features and improvements. This release includes some big features that the community has been asking since the beginning of Immich. We hope you will enjoy it.
|
|
||||||
|
|
||||||
Some notable features are:
|
|
||||||
|
|
||||||
- OAuth integration
|
|
||||||
- LivePhoto support on iOS
|
|
||||||
- User config system
|
|
||||||
|
|
||||||
<!--truncate-->
|
|
||||||
|
|
||||||
## LivePhoto iOS Support đ
|
|
||||||
|
|
||||||
LivePhoto on iOS is now supported in Immich.
|
|
||||||
|
|
||||||
The motion part will now be uploaded and can be played on the mobile app and the web.
|
|
||||||
|
|
||||||
:::caution
|
|
||||||
|
|
||||||
- The server and the app has to be on version **1.36.x** for the application to work correctly.
|
|
||||||
- Previous uploaded photos will not be updated automatically, you will have to remove and reupload them if you want to keep the LivePhoto functionality.
|
|
||||||
|
|
||||||
:::
|
|
||||||
|
|
||||||
<img
|
|
||||||
src="https://media.giphy.com/media/fTrGceZd7t1ewi8ESc/giphy.gif"
|
|
||||||
width="100%"
|
|
||||||
style={{
|
|
||||||
borderRadius: '10px',
|
|
||||||
boxShadow: 'rgba(9, 30, 66, 0.25) 0px 1px 1px, rgba(9, 30, 66, 0.13) 0px 0px 1px 1px',
|
|
||||||
}}
|
|
||||||
title="LivePhoto playback on the web"
|
|
||||||
/>
|
|
||||||
|
|
||||||
## OAuth Integration đ
|
|
||||||
|
|
||||||
I want to borrow this chance to express my gratitude to [@EnricoBilla](https://github.com/EnricoBilla), who has been the trailblazer for this feature since the beginning days of Immich. His PR has sparked ideas, suggestions, and discussion among the team member on how to integrate this feature successfully into the app. Thank you so much for your work and your time.
|
|
||||||
|
|
||||||
OAuth is now integrated into the system. Please follow the guide [here](https://immich.app/docs/usage/oauth) to set up your OAuth integration
|
|
||||||
|
|
||||||
After setting up the correct environment variables in the `.env` file, as shown below
|
|
||||||
|
|
||||||
| Key | Type | Default | Description |
|
|
||||||
| ------------------- | ------- | -------------------- | ------------------------------------------------------------------------- |
|
|
||||||
| OAUTH_ENABLED | boolean | false | Enable/disable OAuth2 |
|
|
||||||
| OAUTH_ISSUER_URL | URL | (required) | Required. Self-discovery URL for client |
|
|
||||||
| OAUTH_CLIENT_ID | string | (required) | Required. Client ID |
|
|
||||||
| OAUTH_CLIENT_SECRET | string | (required) | Required. Client Secret |
|
|
||||||
| OAUTH_SCOPE | string | openid email profile | Full list of scopes to send with the request (space delimited) |
|
|
||||||
| OAUTH_AUTO_REGISTER | boolean | true | When true, will automatically register a user the first time they sign in |
|
|
||||||
| OAUTH_BUTTON_TEXT | string | Login with OAuth | Text for the OAuth button on the web |
|
|
||||||
|
|
||||||
```bash title="Authentik Example"
|
|
||||||
OAUTH_ENABLED=true
|
|
||||||
OAUTH_ISSUER_URL=http://10.1.15.216:9000/application/o/immich-test/
|
|
||||||
OAUTH_CLIENT_ID=30596v8f78a4b6a97d5985c3076b6b4c4d12ddc33
|
|
||||||
OAUTH_CLIENT_SECRET=50f1eafdec353b95b1c638db390db4ab67ef035a51212dbec2f56175e2eb272b5d572c099176e6fe116ecf47ffdd544bgdb9e2edc588307ee0339d25eeccd88
|
|
||||||
OAUTH_BUTTON_TEXT=Login with Authentik
|
|
||||||
```
|
|
||||||
|
|
||||||
The web will have the option to sign in with OAuth.
|
|
||||||
|
|
||||||
<img
|
|
||||||
src="https://user-images.githubusercontent.com/27055614/202923726-f43fa148-47f5-4182-8f29-b0b87e4586fa.png"
|
|
||||||
width="50%"
|
|
||||||
title="Web Sign in with OAuth"
|
|
||||||
style={{
|
|
||||||
borderRadius: '10px',
|
|
||||||
boxShadow: 'rgba(9, 30, 66, 0.25) 0px 1px 1px, rgba(9, 30, 66, 0.13) 0px 0px 1px 1px',
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
|
|
||||||
The mobile app will check if the server has OAuth enabled before displaying the OAuth
|
|
||||||
sign-in button.
|
|
||||||
|
|
||||||
<img
|
|
||||||
src="https://media.giphy.com/media/3iy3SaNkVYtlkEiw06/giphy.gif"
|
|
||||||
title="Mobile sign in with OAuth"
|
|
||||||
style={{
|
|
||||||
borderRadius: '10px',
|
|
||||||
boxShadow: 'rgba(9, 30, 66, 0.25) 0px 1px 1px, rgba(9, 30, 66, 0.13) 0px 0px 1px 1px',
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
|
|
||||||
## Support
|
|
||||||
|
|
||||||
<img
|
|
||||||
src="https://media.giphy.com/media/LStqgGESXW8XnuCv5y/giphy.gif"
|
|
||||||
width="300"
|
|
||||||
style={{
|
|
||||||
borderRadius: '10px',
|
|
||||||
boxShadow: 'rgba(9, 30, 66, 0.25) 0px 1px 1px, rgba(9, 30, 66, 0.13) 0px 0px 1px 1px',
|
|
||||||
}}
|
|
||||||
title="Support the project"
|
|
||||||
/>
|
|
||||||
|
|
||||||
If you find the project helpful and it helps you in some ways, you can support the project [one time](https://github.com/sponsors/alextran1502?frequency=one-time&sponsor=alextran1502) or [monthly](https://github.com/sponsors/alextran1502) from GitHub Sponsor
|
|
||||||
|
|
||||||
It is a great way to let me know that you want me to continue developing and working on this project for years to come.
|
|
||||||
|
|
||||||
## Details
|
|
||||||
|
|
||||||
For more details, please check out the [release note](https://github.com/immich-app/immich/releases/tag/v1.36.0_55-dev)
|
|
||||||
@@ -1,103 +0,0 @@
|
|||||||
---
|
|
||||||
title: Immich Update - June 2023
|
|
||||||
authors: [alextran]
|
|
||||||
tags: [update]
|
|
||||||
---
|
|
||||||
|
|
||||||
Hello everybody, Alex here!
|
|
||||||
|
|
||||||
I am back with another update on Immich. It has been only a month since my last update (May 18th, 2023), but it seems forever. I think the rapid releases of Immich and the amount of work make the perspective of time change in Immichâs world. We have some exciting updates that I think you will like.
|
|
||||||
|
|
||||||
Before going into detail, on behalf of the core team, I would like to thank all of you for loving Immich and contributing to the project. Thank you for helping me make Immich an enjoyable alternative solution to Google Photos so that you have complete control of your data and privacy. I know we are still young and have a lot of work to do, but I am confident we will get there with help from the community. I appreciate all of you from the bottom of my heart!
|
|
||||||
|
|
||||||
<!--truncate-->
|
|
||||||
|
|
||||||
And now, to the exciting part, what is new in Immichâs world?
|
|
||||||
|
|
||||||
- Initial support for existing gallery.
|
|
||||||
- Memory feature.
|
|
||||||
- Support XMP sidecar.
|
|
||||||
- Support more raw formats.
|
|
||||||
- Justified layout for web timeline and blurred thumbnail hash.
|
|
||||||
- Mechanism to host machine learning on a completely different machine.
|
|
||||||
|
|
||||||
## Support for existing gallery
|
|
||||||
|
|
||||||
I know this is the most controversial feature when it comes to Immichâs way of ingesting photos and videos. For many users, having to upload photos and videos to Immich is simply not working. We listen, discuss, and digest this feature internally more than you imagine because it is not a simple feature to tackle while keeping the performance and the user experience at the top level, which is Immichâs primary goal.
|
|
||||||
|
|
||||||
Thankfully, we have many great contributors and developers that want to make this come true. So we came up with an initial implementation of this feature in the form of a supporting read-only gallery.
|
|
||||||
|
|
||||||
To be concise, Immich can now read in the gallery files, register the path into the database, and then generate necessary files and put them through Immichâs machine learning pipeline so you can use all the goodness of Immich without the need to upload them. Since this is the initial implementation, some actions/behavior are not yet supported, and we aim to build toward them in future releases, namely:
|
|
||||||
|
|
||||||
- Assets are not automatically synced and must instead be manually synced with the CLI tool.
|
|
||||||
- Only new files that are added to the gallery will be detected.
|
|
||||||
- Deleted and moved files will not be detected.
|
|
||||||
|
|
||||||
## Memory feature
|
|
||||||
|
|
||||||
This is considered a fun feature that the team and I wanted to build for so long, but we had to put it off because of the refactoring of the code base. The code base is now in a good enough form to circle back and add more exciting features.
|
|
||||||
|
|
||||||
This memory feature is very much similar to GPhotos' implementation of âx years sinceâĻâ. We are aiming to add more categories of memories in the future, such as âSpotlight of the dayâ or âDay of the Week highlightsâ
|
|
||||||
|
|
||||||
<iframe
|
|
||||||
width="560"
|
|
||||||
height="315"
|
|
||||||
src="https://www.youtube.com/embed/j5XZKvViPew"
|
|
||||||
title="YouTube video player"
|
|
||||||
frameborder="0"
|
|
||||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
|
||||||
allowfullscreen
|
|
||||||
></iframe>
|
|
||||||
|
|
||||||
This feature is now available on the web and will be ported to the mobile app in the near future.
|
|
||||||
|
|
||||||
## Support XMP Sidecar
|
|
||||||
|
|
||||||
Immich can now import/upload XMP sidecars from the CLI and use the information as the metadata of assets.
|
|
||||||
|
|
||||||
## Support more raw formats.
|
|
||||||
|
|
||||||
With the recent updates on the dependencies of Immich, we are now extending and hardening support for multiple raw formats. So users with DSLR or mirrorless cameras can now upload their original files to Immich and have them displayed in high-quality thumbnails on the web and mobile view.
|
|
||||||
|
|
||||||
## Justified layout for web timeline and blurred thumbnail hash
|
|
||||||
|
|
||||||
This is an aesthetic improvement in user experience when browsing the timeline. Photos and videos are now displayed correctly with perspective orientation, making the browsing experience more pleasurable.
|
|
||||||
|
|
||||||
To further improve the browsing experience, we now added a blur hash to the thumbnail, so the transition is more natural with a dreamy fade in effect, similar to how our brain goes from faded to vivid memory
|
|
||||||
|
|
||||||
<iframe
|
|
||||||
width="560"
|
|
||||||
height="315"
|
|
||||||
src="https://www.youtube.com/embed/b95FLmGHRFc"
|
|
||||||
title="YouTube video player"
|
|
||||||
frameborder="0"
|
|
||||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
|
||||||
allowfullscreen
|
|
||||||
></iframe>
|
|
||||||
|
|
||||||
## Hosting machine learning container on a different machine
|
|
||||||
|
|
||||||
With more capabilities Immich is building toward, machine learning will get more powerful and therefore require more resources to run effectively. However, we understand that users might not have the best server resources where they host the Immich instance. Therefore, we changed how machine learning interacts and receives the photos and videos to run through its inference pipeline.
|
|
||||||
|
|
||||||
The machine learning container is now a headless system that can run on any machine. As long as your Immich instance can communicate with the system running the machine learning container, it can send the files and receive the required information to make Immich powerful in terms of searching and intelligence. This helps you to utilize a more powerful machine in your home/infrastructure to perform the CPU-intensive tasks while letting Immich only handle the I/O operations for a pleasant and smooth experience.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
So, those are the highlights for the team and the community after a busy month. There are a lot more changes and improvements. I encourage you to read some release notes, starting from version [v1.57.0](https://github.com/immich-app/immich/releases/tag/v1.57.0) to now.
|
|
||||||
|
|
||||||
Thank you, and I am asking for your support for the project. I hope to be a full-time maintainer of Immich one day to dedicate myself to the project as my life works for the community and my family. You can find the support channels below:
|
|
||||||
|
|
||||||
- Monthly donation via [GitHub Sponsors](https://github.com/sponsors/alextran1502)
|
|
||||||
- One-time donation via [GitHub Sponsors](https://github.com/sponsors/alextran1502?frequency=one-time&sponsor=alextran1502)
|
|
||||||
- [Liberapay](https://liberapay.com/alex.tran1502/)
|
|
||||||
- [buymeacoffee](https://www.buymeacoffee.com/altran1502)
|
|
||||||
- Bitcoin: 3QVAb9dCHutquVejeNXitPqZX26Yg5kxb7
|
|
||||||
- Give a project a star - the contributors love gazing at the stars and seeing their creations shining in the sky.
|
|
||||||
|
|
||||||
Join our friendly [Discord](https://discord.immich.app) to talk and discuss Immich, tech, or anything
|
|
||||||
|
|
||||||
Cheer!
|
|
||||||
|
|
||||||
Until next time!
|
|
||||||
|
|
||||||
Alex
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.8 MiB |
@@ -1,151 +0,0 @@
|
|||||||
---
|
|
||||||
title: Immich Update - July 2023
|
|
||||||
authors: [alextran]
|
|
||||||
tags: [update, v1.64.0-v1.71.0]
|
|
||||||
---
|
|
||||||
|
|
||||||
Hello, Immich fans, another month, another milestone. We hope you are staying cool and safe in this scorching hot summer across the globe.
|
|
||||||
|
|
||||||
Immich recently got some good recognition when getting to the front page of HackerNews, which helped to let more people know about the project's existence. The project will help more and more people find a solution to control the privacy of their most precious moments. And with the gain in popularity and recognition, we have gotten new users and more questions from the community than ever.
|
|
||||||
|
|
||||||
I want to express my gratitude to all the contributors and the community who have been tremendously helpful to new users' questions and provided technical support.
|
|
||||||
|
|
||||||
Below are the highlights of new features we added to the application over the past month, along with countless bug fixes and improvements across the board, from developer experience to resource optimization and UI/UX improvement. I hope you find these topics as exciting as I am.
|
|
||||||
|
|
||||||
## Highlights
|
|
||||||
|
|
||||||
- Memories feature.
|
|
||||||
- Facial recognition improvements.
|
|
||||||
- Improvements on multi selection behavior on the web.
|
|
||||||
- Shortcuts for common actions on the web.
|
|
||||||
- Support viewer for 360-panorama photos.
|
|
||||||
|
|
||||||
<!--truncate-->
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Memories feature
|
|
||||||
|
|
||||||
We've added the memory feature on the mobile app, so you can reminisce about your past memories.
|
|
||||||
|
|
||||||
<iframe
|
|
||||||
width="560"
|
|
||||||
height="315"
|
|
||||||
src="https://youtube.com/embed/c7OTl-RqNRE"
|
|
||||||
title="YouTube video player"
|
|
||||||
frameborder="0"
|
|
||||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
|
||||||
allowfullscreen
|
|
||||||
></iframe>
|
|
||||||
|
|
||||||
### Facial recognition improvements
|
|
||||||
|
|
||||||
Over the past few releases, we have added many UI improvements to the facial recognition feature to help you manage the recognized people better. Some of the highlights:
|
|
||||||
|
|
||||||
#### Choose a new feature photo for a person.
|
|
||||||
|
|
||||||
<iframe
|
|
||||||
width="560"
|
|
||||||
height="315"
|
|
||||||
src="https://youtube.com/embed/PmJp8DmSh1U"
|
|
||||||
title="YouTube video player"
|
|
||||||
frameborder="0"
|
|
||||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
|
||||||
allowfullscreen
|
|
||||||
></iframe>
|
|
||||||
|
|
||||||
#### Hide and show faces.
|
|
||||||
|
|
||||||
You can now select irrelevant faces to hide them. The hidden faces wonât be displayed in search results and the people section in the info panel.
|
|
||||||
|
|
||||||
#### Merge faces.
|
|
||||||
|
|
||||||
This is useful when you have multiple faces of the same person in your photos, and you want to merge them into one.
|
|
||||||
|
|
||||||
<iframe
|
|
||||||
width="560"
|
|
||||||
height="315"
|
|
||||||
src="https://youtube.com/embed/-Xskhw-vpc4"
|
|
||||||
title="YouTube video player"
|
|
||||||
frameborder="0"
|
|
||||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
|
||||||
allowfullscreen
|
|
||||||
></iframe>
|
|
||||||
|
|
||||||
We also added a nifty mechanism that when naming a face, similar names will prompt you a merge face option for the convenience.
|
|
||||||
|
|
||||||
<iframe
|
|
||||||
width="560"
|
|
||||||
height="315"
|
|
||||||
src="https://youtube.com/embed/XzE6wficbl4"
|
|
||||||
title="YouTube video player"
|
|
||||||
frameborder="0"
|
|
||||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
|
||||||
allowfullscreen
|
|
||||||
></iframe>
|
|
||||||
|
|
||||||
### Improvements on multi selection behavior on the web
|
|
||||||
|
|
||||||
We have added a new multi selection behavior on the web to help you select multiple items easier. You can now select a range of photos and videos by holding the `Shift` key.
|
|
||||||
|
|
||||||
<iframe
|
|
||||||
width="560"
|
|
||||||
height="315"
|
|
||||||
src="https://youtube.com/embed/e_SiuHpVnmM"
|
|
||||||
title="YouTube video player"
|
|
||||||
frameborder="0"
|
|
||||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
|
||||||
allowfullscreen
|
|
||||||
></iframe>
|
|
||||||
|
|
||||||
### Shortcuts for common actions on the web.
|
|
||||||
|
|
||||||
Some of us only navigate the world and the web with a keyboard (looking at you, Vim and Emacs users). So it would take away the sacred weapon of choice to require many clicks to perform repetitive actions. So we added quick shortcuts for the following action on the web.
|
|
||||||
|
|
||||||
<img
|
|
||||||
src={require('./images/web-shortcuts-panel.png').default}
|
|
||||||
width="100%"
|
|
||||||
style={{ borderRadius: '25px' }}
|
|
||||||
alt="Dot Env Example"
|
|
||||||
/>
|
|
||||||
|
|
||||||
### Support viewer for 360-panorama photos.
|
|
||||||
|
|
||||||
Photos with the EXIF property of `ProjectionType` will now have a special viewer on the web to view all the angles of the panorama.
|
|
||||||
|
|
||||||
The thumbnail of the 360 degrees panoramas will have a special icon on the top right of the thumbnail
|
|
||||||
|
|
||||||
<img
|
|
||||||
src="https://github.com/immich-app/immich/assets/61410067/728ca1b0-375c-4631-8081-a609843e702f"
|
|
||||||
width="50%"
|
|
||||||
style={{ borderRadius: '25px' }}
|
|
||||||
alt="Dot Env Example"
|
|
||||||
/>
|
|
||||||
|
|
||||||
Panorama in the detail view
|
|
||||||
|
|
||||||
<img
|
|
||||||
src="https://github.com/immich-app/immich/assets/61410067/3c89dac4-395d-45fa-9bc5-98a6248fd476"
|
|
||||||
width="50%"
|
|
||||||
style={{ borderRadius: '25px' }}
|
|
||||||
alt="Dot Env Example"
|
|
||||||
/>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Thank you, and I am asking for your support for the project. I hope to be a full-time maintainer of Immich one day to dedicate myself to the project as my life's work for the community and my family. You can find the support channels below:
|
|
||||||
|
|
||||||
- Monthly donation via [GitHub Sponsors](https://github.com/sponsors/alextran1502)
|
|
||||||
- One-time donation via [GitHub Sponsors](https://github.com/sponsors/alextran1502?frequency=one-time&sponsor=alextran1502)
|
|
||||||
- [Liberapay](https://liberapay.com/alex.tran1502/)
|
|
||||||
- [buymeacoffee](https://www.buymeacoffee.com/altran1502)
|
|
||||||
- Bitcoin: 3QVAb9dCHutquVejeNXitPqZX26Yg5kxb7
|
|
||||||
- Give a project a star - the contributors love gazing at the stars and seeing their creations shining in the sky.
|
|
||||||
|
|
||||||
Join our friendly [Discord](https://discord.immich.app) to talk and discuss Immich, tech, or anything
|
|
||||||
|
|
||||||
Cheer!
|
|
||||||
|
|
||||||
Until next time!
|
|
||||||
|
|
||||||
Alex
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
---
|
|
||||||
title: Immich Recap 2023
|
|
||||||
authors: [alextran]
|
|
||||||
tags: [update, recap-2023]
|
|
||||||
date: 2023-12-30T00:00
|
|
||||||
---
|
|
||||||
|
|
||||||
Hi everyone,
|
|
||||||
|
|
||||||
Alex from Immich here.
|
|
||||||
|
|
||||||
We are entering the last few weeks of 2023, and it has been quite a year for Immich. The project has grown so much in terms of users, developers, features, maturity, and the community around it. When I started working on Immich, it was simply a challenge for myself and an opportunity to learn new technologies, crafting something fun and useful for my wife during my free time to satisfy my urge to build and create things. I never thought it would become so popular and help so many people. At the end of the day, all we have is memory. I am proud that the team and I have created something to make storing and viewing those precious memories easier without restrictions and without sacrificing our privacy. As the year closes, hereâs a recap of everything the project accomplished in 2023.
|
|
||||||
|
|
||||||
# Milestones
|
|
||||||
|
|
||||||
- Public shared links
|
|
||||||
- Favorites page
|
|
||||||
- Immich turned 1
|
|
||||||
- Material Design 3 on the mobile app
|
|
||||||
- Auto-link LivePhotos server-side
|
|
||||||
- iOS background backup
|
|
||||||
- Explore page
|
|
||||||
- CLIP search
|
|
||||||
- Search by metadata
|
|
||||||
- Responsive web app
|
|
||||||
- Archive page
|
|
||||||
- Asset descriptions
|
|
||||||
- 10,000 stars on GitHub
|
|
||||||
- Manage auth devices
|
|
||||||
- Map view
|
|
||||||
- Facial recognition, clustering, searching, renaming, and person management
|
|
||||||
- Partner sharing and unifying timeline between partners' users
|
|
||||||
- Custom storage label
|
|
||||||
- XMP sidecar reading
|
|
||||||
- RAW file formats
|
|
||||||
- Justified layout on the web
|
|
||||||
- Memories
|
|
||||||
- Multi-select via SHIFT
|
|
||||||
- Android Motion Photos
|
|
||||||
- 360° Photos
|
|
||||||
- Album description
|
|
||||||
- Album performance improvements (time buckets)
|
|
||||||
- Video hardware transcoding
|
|
||||||
- Slideshow mode on the web
|
|
||||||
- Configuration file
|
|
||||||
- External libraries
|
|
||||||
- Trash page
|
|
||||||
- Custom theme
|
|
||||||
- Asset Stacking
|
|
||||||
- 20,000 stars on GitHub
|
|
||||||
- Shared album activity and comments
|
|
||||||
- CLI v2
|
|
||||||
- Down to 5 containers (from 8)
|
|
||||||
|
|
||||||
# Fun Statistics
|
|
||||||
|
|
||||||
- We have gone from the release version `1.41.0` to `1.90.0` at the time of writing. On average, we see a release every 7 days.
|
|
||||||
- According to GitHub's metrics, the `immich-server` container image has been pulled almost _4 million_ times.
|
|
||||||
- According to mobile app store metrics, we have 22,000 installations on Android and 6700 installation units on iOS (opt-in only).
|
|
||||||
- Immich is making around $1200/month on average from donations. (Thank you all so much!)
|
|
||||||
- We were guests on two podcasts:
|
|
||||||
- [Self-hosted](https://selfhosted.show/110)
|
|
||||||
- [The Vergecast](https://www.theverge.com/23938533/self-hosting-local-first-software-vergecast)
|
|
||||||
- There are over 4,500 members on the Discord server.
|
|
||||||
- We have over 22,000 stars on the main GitHub repository, gaining 15,000 stars since January 2023.
|
|
||||||
|
|
||||||
Diving into the next year, the team will continue to build on the foundation we have laid out over the past year, implementing more advanced features for searching, organizing, and sharing between users. Bugs will continue to be squashed and conquered. âShit Alex wrote'' code will continue to be replaced by beautiful, clean code from Jason, Zack, Boet, Daniel, Osorin, Mert, Fynn, Marty, Martin, and Jonathan. The team has my eternal gratitude for creating a welcoming environment for new contributors, helping, teaching, and learning from each other. Iâve realized that hardly a day has gone by where the team hasnât been in communication about Immich related topics over the past year.
|
|
||||||
|
|
||||||
My long-term goal is to help hone Immich into a diamond in the FOSS space, where the UI, UX, development experiences, documentation, and quality are at a high standard while remaining free for everybody to use.
|
|
||||||
|
|
||||||
I hope you enjoy Immich and have a happy and peaceful holiday.
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
---
|
|
||||||
title: The Immich core team goes full-time
|
|
||||||
authors: [alextran]
|
|
||||||
tags: [update, announcement, FUTO]
|
|
||||||
date: 2024-05-01T00:00
|
|
||||||
---
|
|
||||||
|
|
||||||
**Immich is joining [FUTO](https://futo.org/)!**
|
|
||||||
|
|
||||||
Since the beginning of this adventure, my goal has always been to create a better world for my children. Memories are priceless, and privacy should not be a luxury. However, building quality open source has its challenges. Over the past two years, it has taken significant dedication, time, and effort.
|
|
||||||
|
|
||||||
Recently, a company in Austin, Texas, called FUTO contacted the team. FUTO strives to develop quality and sustainable open software. They build software alternatives that focus on giving control to users. From their mission statement:
|
|
||||||
|
|
||||||
âComputers should belong to you, the people. We develop and fund technology to give them back.â
|
|
||||||
|
|
||||||
FUTO loved Immich and wanted to see if weâd consider working with them to take the project to the next level. In short, FUTO offered to:
|
|
||||||
|
|
||||||
- Pay the core team to work on Immich full-time
|
|
||||||
- Let us keep full autonomy about the projectâs direction and leadership
|
|
||||||
- Continue to license Immich under AGPL
|
|
||||||
- Keep Immichâs development direction with no paywalled features
|
|
||||||
- Keep Immich âbuilt for the peopleâ (no ads, data mining/selling, or alternative motives)
|
|
||||||
- Provide us with financial, technical, legal, and administrative support
|
|
||||||
|
|
||||||
After careful deliberation, the team decided that FUTOâs vision closely aligns with our own: to build a better future by providing a polished, performant, and privacy-preserving open-source software solution for photo and video management delivered in a sustainable way.
|
|
||||||
|
|
||||||
Immichâs future has never looked brighter, and we look forward to realizing our vision for Immich as part of FUTO.
|
|
||||||
|
|
||||||
If you have more questions, weâll host a Q&A live stream on May 9th at 3PM UTC (10AM CST). [You can ask questions here](https://www.live-ask.com/event/01HWP2SB99A1K8EXFBDKZ5Z9CF), and the stream will be live [here on our YouTube channel](https://youtube.com/live/cwz2iZwYpgg).
|
|
||||||
|
|
||||||
Cheers,
|
|
||||||
|
|
||||||
The Immich Team
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## FAQs
|
|
||||||
|
|
||||||
### What is FUTO?
|
|
||||||
|
|
||||||
[https://futo.org/what-is-futo/](https://futo.org/what-is-futo/)
|
|
||||||
|
|
||||||
### Will the license change?
|
|
||||||
|
|
||||||
No. Immich will continue to be licensed under AGPL without a CLA.
|
|
||||||
|
|
||||||
### Will Immich continue to be free?
|
|
||||||
|
|
||||||
Yes. The Immich source code will remain freely available under the AGPL license.
|
|
||||||
|
|
||||||
### Is Immich getting VC funding?
|
|
||||||
|
|
||||||
No. Venture capital implies investment in a business, often with the expectation of a future payout (exit plan). Immich is neither a business that can be acquired nor comes with a money-making exit plan.
|
|
||||||
|
|
||||||
### I am currently supporting Immich through GitHub sponsors. What will happen to my donation?
|
|
||||||
|
|
||||||
Effective immediately, all donations to the Immich organization will be canceled. In the future, we will offer an optional, modest payment option instead. Thank you to everyone who donated to help us get this far!
|
|
||||||
|
|
||||||
### How is funding sustainable?
|
|
||||||
|
|
||||||
Immich and FUTO believe a sustainable future requires a model that does not rely on users-as-a-product. To this end, FUTO advocates that users pay for good, open software. In keeping with this model, we will adopt a purchase price. This means we no longer accept donations, but â _without limiting features for those who do not pay_ â we will soon allow you to purchase Immich through a modest payment. We encourage you to pay for the high-quality software you use to foster a healthy software culture where developers build great applications without hidden motives for their users.
|
|
||||||
|
|
||||||
### When does this change take effect?
|
|
||||||
|
|
||||||
This change takes effect immediately.
|
|
||||||
|
|
||||||
### What will change?
|
|
||||||
|
|
||||||
The following things will change as Immich joins FUTO:
|
|
||||||
|
|
||||||
- The brand, logo, and other Immich trademarks will be transferred to FUTO.
|
|
||||||
- We will stop all donations to the project.
|
|
||||||
- The core team can now dedicate our full attention to Immich
|
|
||||||
- Before the end of the year, we plan to have a roadmap for what it will take to get Immich to a stable release.
|
|
||||||
- Bugs will be squashed, and features will be delivered faster.
|
|
||||||
@@ -1,91 +0,0 @@
|
|||||||
---
|
|
||||||
title: Licensing announcement - Purchase a license to support Immich
|
|
||||||
authors: [alextran]
|
|
||||||
tags: [update, announcement, FUTO]
|
|
||||||
date: 2024-07-18T00:00
|
|
||||||
---
|
|
||||||
|
|
||||||
Hello everybody,
|
|
||||||
|
|
||||||
Firstly, on behalf of the Immich team, I'd like to thank everybody for your continuous support of Immich since the very first day! Your contributions, encouragement, and community engagement have helped bring Immich to its current state. The team and I are forever grateful for that.
|
|
||||||
|
|
||||||
Since our [last announcement of the core team joining FUTO to work on Immich full-time](https://immich.app/blog/2024/immich-core-team-goes-fulltime), one of the goals of our new position is to foster a healthy relationship between the developers and the users. We believe that this enables us to create great software, establish transparent policies and build trust.
|
|
||||||
|
|
||||||
We want to build a great software application that brings value to you and your loved ones' lives. We are not using you as a product, i.e., selling or tracking your data. We are not putting annoying ads into our software. We respect your privacy. We want to be compensated for the hard work we put in to build Immich for you.
|
|
||||||
|
|
||||||
With those notes, we have enabled a way for you to financially support the continued development of Immich, ensuring the software can move forward and will be maintained, by offering a lifetime license of the software. We think if you like and use software, you should pay for it, but _we're never going to force anyone to pay or try to limit Immich for those who don't._
|
|
||||||
|
|
||||||
There are two types of license that you can choose to purchase: **Server License** and **Individual License**.
|
|
||||||
|
|
||||||
### Server License
|
|
||||||
|
|
||||||
This is a lifetime license costing **$99.99**. The license is applied to the whole server. You and all users that use your server are licensed.
|
|
||||||
|
|
||||||
### Individual License
|
|
||||||
|
|
||||||
This is a lifetime license costing **$24.99**. The license is applied to a single user, and can be used on any server they choose to connect to.
|
|
||||||
|
|
||||||
<img
|
|
||||||
width="837"
|
|
||||||
alt="license-social-gh"
|
|
||||||
src="https://github.com/user-attachments/assets/241932ed-ef3b-44ec-a9e2-ee80754e0cca"
|
|
||||||
/>
|
|
||||||
|
|
||||||
You can purchase the license on [our page - https://buy.immich.app](https://buy.immich.app).
|
|
||||||
|
|
||||||
Starting with release `v1.109.0` you can purchase and enter your purchased license key directly in the app.
|
|
||||||
|
|
||||||
<img
|
|
||||||
width="1414"
|
|
||||||
alt="license-page-gh"
|
|
||||||
src="https://github.com/user-attachments/assets/364fc32a-f6ef-4594-9fea-28d5a26ad77c"
|
|
||||||
/>
|
|
||||||
|
|
||||||
## Thank you
|
|
||||||
|
|
||||||
Thank you again for your support, this will help create a strong foundation and stability for the Immich team to continue developing and maintaining the project that you love to use.
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<img
|
|
||||||
src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExbjY2eWc5Y2F0ZW56MmR4aWE0dDhzZXlidXRmYWZyajl1bWZidXZpcyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/87CKDqErVfMqY/giphy.gif"
|
|
||||||
width="550"
|
|
||||||
title="SUPPORT THE PROJECT!"
|
|
||||||
/>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<br />
|
|
||||||
<br />
|
|
||||||
|
|
||||||
Cheers! đ
|
|
||||||
|
|
||||||
Immich team
|
|
||||||
|
|
||||||
# FAQ
|
|
||||||
|
|
||||||
### 1. Where can I purchase a license?
|
|
||||||
|
|
||||||
There are several places where you can purchase the license from
|
|
||||||
|
|
||||||
- [https://buy.immich.app](https://buy.immich.app)
|
|
||||||
- [https://pay.futo.org](https://pay.futo.org/)
|
|
||||||
- or directly from the app.
|
|
||||||
|
|
||||||
### 2. Do I need both _Individual License_ and _Server License_?
|
|
||||||
|
|
||||||
No,
|
|
||||||
|
|
||||||
If you are the admin and the sole user, or your instance has less than a total of 4 users, you can buy the **Individual License** for each user.
|
|
||||||
|
|
||||||
If your instance has more than 4 users, it is more cost-effective to buy the **Server License**, which will license all the users on your instance.
|
|
||||||
|
|
||||||
### 3. What do I do if I don't pay?
|
|
||||||
|
|
||||||
You can continue using Immich without any restriction.
|
|
||||||
|
|
||||||
### 4. Will there be any paywalled features?
|
|
||||||
|
|
||||||
No, there will never be any paywalled features.
|
|
||||||
|
|
||||||
### 5. Where can I get support regarding payment issues?
|
|
||||||
|
|
||||||
You can email us with your `orderId` and your email address `billing@futo.org` or on our Discord server.
|
|
||||||
@@ -1,78 +0,0 @@
|
|||||||
---
|
|
||||||
title: Immich Update - July 2024
|
|
||||||
authors: [alextran]
|
|
||||||
date: 2024-07-01T00:00
|
|
||||||
tags: [update, v1.106.0]
|
|
||||||
---
|
|
||||||
|
|
||||||
Hello everybody! Alex from Immich here and I am back with another development progress update for the project.
|
|
||||||
|
|
||||||
Summer has returned once again, and the night sky is filled with stars, thank you for **38_000 shining stars** you have sent to our [GitHub repo](https://github.com/immich-app/immich)! Since the last announcement several core contributors have started full time. Everything is going great with development, PRs get merged with _brrrrrrr_ rate, conversation exchange between team members is on a new high, we met and are working with the great engineers at FUTO. The spirit is high and we have a lot of things brewing that we think you will like.
|
|
||||||
|
|
||||||
Let's go over some of the updates we had since the last post.
|
|
||||||
|
|
||||||
### Container consolidation
|
|
||||||
|
|
||||||
Reduced the number of total containers from 5 to 4 by making the microservices thread get spawned directly in the server container. Woohoo, remember when Immich had 7 containers?
|
|
||||||
|
|
||||||
### Email notifications
|
|
||||||
|
|
||||||

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

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

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

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

|
|
||||||
|
|
||||||
### Better video thumbnails
|
|
||||||
|
|
||||||
Immich now tries to find a descriptive video thumbnail instead of simply using the first frame. No more black images for thumbnails!
|
|
||||||
|
|
||||||
### Public Roadmap
|
|
||||||
|
|
||||||
We now have a [public roadmap](https://immich.app/roadmap), giving you a high-level overview of things the team is working on. The first goal of this roadmap is to bring Immich to a stable release, which is expected sometime later this year. Some of the highlights include
|
|
||||||
|
|
||||||
- Auto stacking - Auto stacking of burst photos
|
|
||||||
- Basic editor - Basic photo editing capabilities
|
|
||||||
- Workflows - Automate tasks with workflows
|
|
||||||
- Fine grained access controls - Granular access controls for users and api keys
|
|
||||||
- Better background backups - Rework background backups to be more reliable
|
|
||||||
- Private/locked photos - Private assets with extra protections
|
|
||||||
|
|
||||||
Beyond the items in the roadmap, we have _many many_ more ideas for Immich. The team and I hope that you are enjoying the application, find it helpful in your life and we have nothing but the intention of building out great software for you all!
|
|
||||||
|
|
||||||
Have an amazing Summer or Winter for those in the southern hemisphere! :D
|
|
||||||
|
|
||||||
Until next time,
|
|
||||||
|
|
||||||
Cheers!
|
|
||||||
Alex
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
alextran:
|
|
||||||
name: Alex Tran
|
|
||||||
title: Maintainer of Immich
|
|
||||||
url: https://github.com/alextran1502
|
|
||||||
image_url: https://github.com/alextran1502.png
|
|
||||||
@@ -1,5 +1,31 @@
|
|||||||
# FAQ
|
# FAQ
|
||||||
|
|
||||||
|
## Commercial Guidelines
|
||||||
|
|
||||||
|
### Are you open to commercial partnerships and collaborations?
|
||||||
|
|
||||||
|
We are working to commercialize Immich and we'd love for you to help us by making Immich better. FUTO is dedicated to developing sustainable models for developing open source software for our customers. We want our customers to be delighted by the products our engineers deliver, and we want our engineers to be paid when they succeed.
|
||||||
|
|
||||||
|
If you wish to use Immich in a commercial product not owned by FUTO, we have the following requirements:
|
||||||
|
|
||||||
|
- Plugin Integrations: Integrations for other platforms are typically approved, provided proper notification is given.
|
||||||
|
|
||||||
|
- Reseller Partnerships: Must adhere to the guidelines outlined below regarding trademark usage, and proper representation.
|
||||||
|
|
||||||
|
- Strategic Collaborations: We welcome discussions about mutually beneficial partnerships that enhance the value proposition for both organizations.
|
||||||
|
|
||||||
|
### What are your guidelines for resellers and trademark usage?
|
||||||
|
|
||||||
|
For organizations seeking to resell Immich, we have established the following guidelines to protect our brand integrity and ensure proper representation.
|
||||||
|
|
||||||
|
- We request that resellers do not display our trademarks on their websites or marketing materials. If such usage is discovered, we will contact you to request removal.
|
||||||
|
|
||||||
|
- Do not misrepresent your reseller site or services as being officially affiliated with or endorsed by Immich or our development team.
|
||||||
|
|
||||||
|
- For small resellers who wish to contribute financially to Immich's development, we recommend directing your customers to purchase licenses directy from us rather than attempting to broker revenue-sharing arrangements. We ask that you refrain from misrepresenting reseller activities as directly supporting our development work.
|
||||||
|
|
||||||
|
When in doubt or if you have an edge case scenario, we encourage you to contact us directly via email to discuss the use of our trademark. We can provide clear guidance on what is acceptable and what is not. You can reach out at: questions@immich.app
|
||||||
|
|
||||||
## User
|
## User
|
||||||
|
|
||||||
### How can I reset the admin password?
|
### How can I reset the admin password?
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ Unable to set `app.immich:///oauth-callback` as a valid redirect URI? See [Mobil
|
|||||||
|
|
||||||
Immich supports 3rd party authentication via [OpenID Connect][oidc] (OIDC), an identity layer built on top of OAuth2. OIDC is supported by most identity providers, including:
|
Immich supports 3rd party authentication via [OpenID Connect][oidc] (OIDC), an identity layer built on top of OAuth2. OIDC is supported by most identity providers, including:
|
||||||
|
|
||||||
- [Authentik](https://goauthentik.io/integrations/sources/oauth/#openid-connect)
|
- [Authentik](https://integrations.goauthentik.io/media/immich/)
|
||||||
- [Authelia](https://www.authelia.com/integration/openid-connect/immich/)
|
- [Authelia](https://www.authelia.com/integration/openid-connect/immich/)
|
||||||
- [Okta](https://www.okta.com/openid-connect/)
|
- [Okta](https://www.okta.com/openid-connect/)
|
||||||
- [Google](https://developers.google.com/identity/openid-connect/openid-connect)
|
- [Google](https://developers.google.com/identity/openid-connect/openid-connect)
|
||||||
@@ -88,7 +88,7 @@ The `.well-known/openid-configuration` part of the url is optional and will be a
|
|||||||
## Auto Launch
|
## Auto Launch
|
||||||
|
|
||||||
When Auto Launch is enabled, the login page will automatically redirect the user to the OAuth authorization url, to login with OAuth. To access the login screen again, use the browser's back button, or navigate directly to `/auth/login?autoLaunch=0`.
|
When Auto Launch is enabled, the login page will automatically redirect the user to the OAuth authorization url, to login with OAuth. To access the login screen again, use the browser's back button, or navigate directly to `/auth/login?autoLaunch=0`.
|
||||||
Auto Launch can also be enabled on a per-request basis by navigating to `/auth/login?authLaunch=1`, this can be useful in situations where Immich is called from e.g. Nextcloud using the _External sites_ app and the _oidc_ app so as to enable users to directly interact with a logged-in instance of Immich.
|
Auto Launch can also be enabled on a per-request basis by navigating to `/auth/login?autoLaunch=1`, this can be useful in situations where Immich is called from e.g. Nextcloud using the _External sites_ app and the _oidc_ app so as to enable users to directly interact with a logged-in instance of Immich.
|
||||||
|
|
||||||
## Mobile Redirect URI
|
## Mobile Redirect URI
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ After making any changes in the `server/src/schema`, a database migration need t
|
|||||||
1. Run the command
|
1. Run the command
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm run migrations:generate <migration-name>
|
pnpm run migrations:generate <migration-name>
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Check if the migration file makes sense.
|
2. Check if the migration file makes sense.
|
||||||
|
|||||||
@@ -204,8 +204,8 @@ When the Dev Container starts, it automatically:
|
|||||||
|
|
||||||
1. **Runs post-create script** (`container-server-post-create.sh`):
|
1. **Runs post-create script** (`container-server-post-create.sh`):
|
||||||
- Adjusts file permissions for the `node` user
|
- Adjusts file permissions for the `node` user
|
||||||
- Installs dependencies: `npm install` in all packages
|
- Installs dependencies: `pnpm install` in all packages
|
||||||
- Builds TypeScript SDK: `npm run build` in `open-api/typescript-sdk`
|
- Builds TypeScript SDK: `pnpm run build` in `open-api/typescript-sdk`
|
||||||
|
|
||||||
2. **Starts development servers** via VS Code tasks:
|
2. **Starts development servers** via VS Code tasks:
|
||||||
- `Immich API Server (Nest)` - API server with hot-reloading on port 2283
|
- `Immich API Server (Nest)` - API server with hot-reloading on port 2283
|
||||||
@@ -243,7 +243,7 @@ To connect the mobile app to your Dev Container:
|
|||||||
|
|
||||||
- **Server code** (`/server`): Changes trigger automatic restart
|
- **Server code** (`/server`): Changes trigger automatic restart
|
||||||
- **Web code** (`/web`): Changes trigger hot module replacement
|
- **Web code** (`/web`): Changes trigger hot module replacement
|
||||||
- **Database migrations**: Run `npm run sync:sql` in the server directory
|
- **Database migrations**: Run `pnpm run sync:sql` in the server directory
|
||||||
- **API changes**: Regenerate TypeScript SDK with `make open-api`
|
- **API changes**: Regenerate TypeScript SDK with `make open-api`
|
||||||
|
|
||||||
## Testing
|
## Testing
|
||||||
@@ -273,19 +273,19 @@ make test-medium-dev # End-to-end tests
|
|||||||
```bash
|
```bash
|
||||||
# Server tests
|
# Server tests
|
||||||
cd /workspaces/immich/server
|
cd /workspaces/immich/server
|
||||||
npm test # Run all tests
|
pnpm test # Run all tests
|
||||||
npm run test:watch # Watch mode
|
pnpm run test:watch # Watch mode
|
||||||
npm run test:cov # Coverage report
|
pnpm run test:cov # Coverage report
|
||||||
|
|
||||||
# Web tests
|
# Web tests
|
||||||
cd /workspaces/immich/web
|
cd /workspaces/immich/web
|
||||||
npm test # Run all tests
|
pnpm test # Run all tests
|
||||||
npm run test:watch # Watch mode
|
pnpm run test:watch # Watch mode
|
||||||
|
|
||||||
# E2E tests
|
# E2E tests
|
||||||
cd /workspaces/immich/e2e
|
cd /workspaces/immich/e2e
|
||||||
npm run test # Run API tests
|
pnpm run test # Run API tests
|
||||||
npm run test:web # Run web UI tests
|
pnpm run test:web # Run web UI tests
|
||||||
```
|
```
|
||||||
|
|
||||||
### Code Quality Commands
|
### Code Quality Commands
|
||||||
@@ -476,5 +476,5 @@ Recommended minimums:
|
|||||||
|
|
||||||
- Read the [architecture overview](/docs/developer/architecture)
|
- Read the [architecture overview](/docs/developer/architecture)
|
||||||
- Learn about [database migrations](/docs/developer/database-migrations)
|
- Learn about [database migrations](/docs/developer/database-migrations)
|
||||||
- Explore [API documentation](/docs/api)
|
- Explore [API documentation](https://api.immich.app/)
|
||||||
- Join `#immich` on [Discord](https://discord.immich.app)
|
- Join `#immich` on [Discord](https://discord.immich.app)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# OpenAPI
|
# OpenAPI
|
||||||
|
|
||||||
Immich uses the [OpenAPI](https://swagger.io/specification/) standard to generate API documentation. To view the published docs see [here](/docs/api).
|
Immich uses the [OpenAPI](https://swagger.io/specification/) standard to generate API documentation. To view the published docs see [here](https://api.immich.app/).
|
||||||
|
|
||||||
## Generator
|
## Generator
|
||||||
|
|
||||||
|
|||||||
@@ -8,34 +8,34 @@ When contributing code through a pull request, please check the following:
|
|||||||
|
|
||||||
## Web Checks
|
## Web Checks
|
||||||
|
|
||||||
- [ ] `npm run lint` (linting via ESLint)
|
- [ ] `pnpm run lint` (linting via ESLint)
|
||||||
- [ ] `npm run format` (formatting via Prettier)
|
- [ ] `pnpm run format` (formatting via Prettier)
|
||||||
- [ ] `npm run check:svelte` (Type checking via SvelteKit)
|
- [ ] `pnpm run check:svelte` (Type checking via SvelteKit)
|
||||||
- [ ] `npm run check:typescript` (check typescript)
|
- [ ] `pnpm run check:typescript` (check typescript)
|
||||||
- [ ] `npm test` (unit tests)
|
- [ ] `pnpm test` (unit tests)
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
- [ ] `npm run format` (formatting via Prettier)
|
- [ ] `pnpm run format` (formatting via Prettier)
|
||||||
- [ ] Update the `_redirects` file if you have renamed a page or removed it from the documentation.
|
- [ ] Update the `_redirects` file if you have renamed a page or removed it from the documentation.
|
||||||
|
|
||||||
:::tip AIO
|
:::tip AIO
|
||||||
Run all web checks with `npm run check:all`
|
Run all web checks with `pnpm run check:all`
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## Server Checks
|
## Server Checks
|
||||||
|
|
||||||
- [ ] `npm run lint` (linting via ESLint)
|
- [ ] `pnpm run lint` (linting via ESLint)
|
||||||
- [ ] `npm run format` (formatting via Prettier)
|
- [ ] `pnpm run format` (formatting via Prettier)
|
||||||
- [ ] `npm run check` (Type checking via `tsc`)
|
- [ ] `pnpm run check` (Type checking via `tsc`)
|
||||||
- [ ] `npm test` (unit tests)
|
- [ ] `pnpm test` (unit tests)
|
||||||
|
|
||||||
:::tip AIO
|
:::tip AIO
|
||||||
Run all server checks with `npm run check:all`
|
Run all server checks with `pnpm run check:all`
|
||||||
:::
|
:::
|
||||||
|
|
||||||
:::info Auto Fix
|
:::info Auto Fix
|
||||||
You can use `npm run __:fix` to potentially correct some issues automatically for `npm run format` and `lint`.
|
You can use `pnpm run __:fix` to potentially correct some issues automatically for `pnpm run format` and `lint`.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## Mobile Checks
|
## Mobile Checks
|
||||||
|
|||||||
@@ -54,20 +54,20 @@ You can access the web from `http://your-machine-ip:3000` or `http://localhost:3
|
|||||||
|
|
||||||
If you only want to do web development connected to an existing, remote backend, follow these steps:
|
If you only want to do web development connected to an existing, remote backend, follow these steps:
|
||||||
|
|
||||||
1. Build the Immich SDK - `cd open-api/typescript-sdk && npm i && npm run build && cd -`
|
1. Build the Immich SDK - `cd open-api/typescript-sdk && pnpm i && pnpm run build && cd -`
|
||||||
2. Enter the web directory - `cd web/`
|
2. Enter the web directory - `cd web/`
|
||||||
3. Install web dependencies - `npm i`
|
3. Install web dependencies - `pnpm i`
|
||||||
4. Start the web development server
|
4. Start the web development server
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
IMMICH_SERVER_URL=https://demo.immich.app/ npm run dev
|
IMMICH_SERVER_URL=https://demo.immich.app/ pnpm run dev
|
||||||
```
|
```
|
||||||
|
|
||||||
If you're using PowerShell on Windows you may need to set the env var separately like so:
|
If you're using PowerShell on Windows you may need to set the env var separately like so:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:IMMICH_SERVER_URL = "https://demo.immich.app/"
|
$env:IMMICH_SERVER_URL = "https://demo.immich.app/"
|
||||||
npm run dev
|
pnpm run dev
|
||||||
```
|
```
|
||||||
|
|
||||||
#### `@immich/ui`
|
#### `@immich/ui`
|
||||||
@@ -75,12 +75,12 @@ npm run dev
|
|||||||
To see local changes to `@immich/ui` in Immich, do the following:
|
To see local changes to `@immich/ui` in Immich, do the following:
|
||||||
|
|
||||||
1. Install `@immich/ui` as a sibling to `immich/`, for example `/home/user/immich` and `/home/user/ui`
|
1. Install `@immich/ui` as a sibling to `immich/`, for example `/home/user/immich` and `/home/user/ui`
|
||||||
2. Build the `@immich/ui` project via `npm run build`
|
2. Build the `@immich/ui` project via `pnpm run build`
|
||||||
3. Uncomment the corresponding volume in web service of the `docker/docker-compose.dev.yaml` file (`../../ui:/usr/ui`)
|
3. Uncomment the corresponding volume in web service of the `docker/docker-compose.dev.yaml` file (`../../ui:/usr/ui`)
|
||||||
4. Uncomment the corresponding alias in the `web/vite.config.js` file (`'@immich/ui': path.resolve(\_\_dirname, '../../ui')`)
|
4. Uncomment the corresponding alias in the `web/vite.config.js` file (`'@immich/ui': path.resolve(\_\_dirname, '../../ui')`)
|
||||||
5. Uncomment the import statement in `web/src/app.css` file `@import '/usr/ui/dist/theme/default.css';` and comment out `@import '@immich/ui/theme/default.css';`
|
5. Uncomment the import statement in `web/src/app.css` file `@import '/usr/ui/dist/theme/default.css';` and comment out `@import '@immich/ui/theme/default.css';`
|
||||||
6. Start up the stack via `make dev`
|
6. Start up the stack via `make dev`
|
||||||
7. After making changes in `@immich/ui`, rebuild it (`npm run build`)
|
7. After making changes in `@immich/ui`, rebuild it (`pnpm run build`)
|
||||||
|
|
||||||
### Mobile app
|
### Mobile app
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
|
|
||||||
### Unit tests
|
### Unit tests
|
||||||
|
|
||||||
Unit are run by calling `npm run test` from the `server/` directory.
|
Unit are run by calling `pnpm run test` from the `server/` directory.
|
||||||
You need to run `npm install` (in `server/`) before _once_.
|
You need to run `pnpm install` (in `server/`) before _once_.
|
||||||
|
|
||||||
### End to end tests
|
### End to end tests
|
||||||
|
|
||||||
@@ -17,14 +17,14 @@ make e2e
|
|||||||
|
|
||||||
Before you can run the tests, you need to run the following commands _once_:
|
Before you can run the tests, you need to run the following commands _once_:
|
||||||
|
|
||||||
- `npm install` (in `e2e/`)
|
- `pnpm install` (in `e2e/`)
|
||||||
- `make open-api` (in the project root `/`)
|
- `make open-api` (in the project root `/`)
|
||||||
|
|
||||||
Once the test environment is running, the e2e tests can be run via:
|
Once the test environment is running, the e2e tests can be run via:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd e2e/
|
cd e2e/
|
||||||
npm test
|
pnpm test
|
||||||
```
|
```
|
||||||
|
|
||||||
The tests check various things including:
|
The tests check various things including:
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 11 KiB |
@@ -33,7 +33,7 @@ Sometimes, an external library will not scan correctly. This can happen if Immic
|
|||||||
- Are the permissions set correctly?
|
- Are the permissions set correctly?
|
||||||
- Make sure you are using forward slashes (`/`) and not backward slashes.
|
- Make sure you are using forward slashes (`/`) and not backward slashes.
|
||||||
|
|
||||||
To validate that Immich can reach your external library, start a shell inside the container. Run `docker exec -it immich_server bash` to a bash shell. If your import path is `/data/import/photos`, check it with `ls /data/import/photos`. Do the same check for the same in any microservices containers.
|
To validate that Immich can reach your external library, start a shell inside the container. Run `docker exec -it immich_server bash` to a bash shell. If your import path is `/mnt/photos`, check it with `ls /mnt/photos`. If you are using a dedicated microservices container, make sure to add the same mount point and check for availability within the microservices container as well.
|
||||||
|
|
||||||
### Exclusion Patterns
|
### Exclusion Patterns
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ The provided file is just a starting point. There are a ton of ways to configure
|
|||||||
After bringing down the containers with `docker compose down` and back up with `docker compose up -d`, a Prometheus instance will now collect metrics from the immich server and microservices containers. Note that we didn't need to expose any new ports for these containers - the communication is handled in the internal Docker network.
|
After bringing down the containers with `docker compose down` and back up with `docker compose up -d`, a Prometheus instance will now collect metrics from the immich server and microservices containers. Note that we didn't need to expose any new ports for these containers - the communication is handled in the internal Docker network.
|
||||||
|
|
||||||
:::note
|
:::note
|
||||||
To see exactly what metrics are made available, you can additionally add `8081:8081` to the server container's ports and `8082:8082` to the microservices container's ports.
|
To see exactly what metrics are made available, you can additionally add `8081:8081` (API metrics) and `8082:8082` (microservices metrics) to the immich_server container's ports.
|
||||||
Visiting the `/metrics` endpoint for these services will show the same raw data that Prometheus collects.
|
Visiting the `/metrics` endpoint for these services will show the same raw data that Prometheus collects.
|
||||||
To configure these ports see [`IMMICH_API_METRICS_PORT` & `IMMICH_MICROSERVICES_METRICS_PORT`](/docs/install/environment-variables/#general).
|
To configure these ports see [`IMMICH_API_METRICS_PORT` & `IMMICH_MICROSERVICES_METRICS_PORT`](/docs/install/environment-variables/#general).
|
||||||
:::
|
:::
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Tags
|
# Tags
|
||||||
|
|
||||||
Immich supports hierarchical tags, with the ability to read existing tags from the `TagList` and `Keywords` EXIF properties. Any changes to tags made through Immich are also written back to a [sidecar](/docs/features/xmp-sidecars) file. You can re-run the metadata extraction jobs for all assets to import your existing tags.
|
Immich supports hierarchical tags, with the ability to read existing tags from the XMP `TagsList` field and IPTC `Keywords` field. Any changes to tags made through Immich are also written back to a [sidecar](/docs/features/xmp-sidecars) file. You can re-run the metadata extraction jobs for all assets to import your existing tags.
|
||||||
|
|
||||||
## Enable tags feature
|
## Enable tags feature
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,68 @@
|
|||||||
# XMP Sidecars
|
# XMP Sidecars
|
||||||
|
|
||||||
Immich can ingest XMP sidecars on file upload (via the CLI) as well as detect new sidecars that are placed in the filesystem for existing images.
|
Immich supports XMP sidecar files â external `.xmp` files that store metadata for an image or video in XML format. During the metadata extraction job Immich will read & import metadata from `.xmp` files, and during the Sidecar Write job it will _write_ metadata back to `.xmp`.
|
||||||
|
|
||||||
<img src={require('./img/xmp-sidecars.webp').default} title='XMP sidecars' />
|
:::tip
|
||||||
|
Tools like Lightroom, Darktable, digiKam and other applications can also be configured to write changes to `.xmp` files, in order to avoid modifying the original file.
|
||||||
|
:::
|
||||||
|
|
||||||
XMP sidecars are external XML files that contain metadata related to media files. Many applications read and write these files either exclusively or in addition to the metadata written to image files. They can be a powerful tool for editing and storing metadata of a media file without modifying the media file itself. When Immich receives or detects an XMP sidecar for a media file, it will attempt to extract the metadata from both the sidecar as well as the media file. It will prioritize the metadata for fields in the sidecar but will fall back and use the metadata in the media file if necessary.
|
## Metadata Fields
|
||||||
|
|
||||||
When importing files via the CLI bulk uploader or parsing photo metadata for external libraries, Immich will automatically detect XMP sidecar files as files that exist next to the original media file. Immich will look files that have the same name as the photo, but with the `.xmp` file extension. The same name can either include the photo's file extension or without the photo's file extension. For example, for a photo named `PXL_20230401_203352928.MP.jpg`, Immich will look for an XMP file named either `PXL_20230401_203352928.MP.jpg.xmp` or `PXL_20230401_203352928.MP.xmp`. If both `PXL_20230401_203352928.MP.jpg.xmp` and `PXL_20230401_203352928.MP.xmp` are present, Immich will prefer `PXL_20230401_203352928.MP.jpg.xmp`.
|
Immich does not support _all_ metadata fields. Below is a table showing what fields Immich can _read_ and _write_. It's important to note that writes do not replace the entire file contents, but are merged together with any existing fields.
|
||||||
|
|
||||||
There are 2 administrator jobs associated with sidecar files: `SYNC` and `DISCOVER`. The sync job will re-scan all media with existing sidecar files and queue them for a metadata refresh. This is a great use case when third-party applications are used to modify the metadata of media. The discover job will attempt to scan the filesystem for new sidecar files for all media that does not currently have a sidecar file associated with it.
|
:::info
|
||||||
|
Immich automatically queues a Sidecar Write job after editing the description, rating, or updating tags.
|
||||||
|
:::
|
||||||
|
|
||||||
<img src={require('./img/sidecar-jobs.webp').default} title='Sidecar Administrator Jobs' />
|
| Metadata | Immich writes to XMP | Immich reads from XMP |
|
||||||
|
| --------------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| **Description** | `dc:description`, `tiff:ImageDescription` | `dc:description`, `tiff:ImageDescription` |
|
||||||
|
| **Rating** | `xmp:Rating` | `xmp:Rating` |
|
||||||
|
| **DateTime** | `exif:DateTimeOriginal`, `photoshop:DateCreated` | In prioritized order:<br/>`exif:SubSecDateTimeOriginal`<br/>`exif:DateTimeOriginal`<br/>`xmp:SubSecCreateDate`<br/>`xmp:CreateDate`<br/>`xmp:CreationDate`<br/>`xmp:MediaCreateDate`<br/>`xmp:SubSecMediaCreateDate`<br/>`xmp:DateTimeCreated` |
|
||||||
|
| **Location** | `exif:GPSLatitude`, `exif:GPSLongitude` | `exif:GPSLatitude`, `exif:GPSLongitude` |
|
||||||
|
| **Tags** | `digiKam:TagsList` | In prioritized order: <br/>`digiKam:TagsList`<br/>`lr:HierarchicalSubject`<br/>`IPTC:Keywords` |
|
||||||
|
|
||||||
|
:::note
|
||||||
|
All other fields (e.g. `Creator`, `Source`, IPTC, Lightroom edits) remain in the `.xmp` file and are **not searchable** in Immich.
|
||||||
|
:::
|
||||||
|
|
||||||
|
## File Naming Rules
|
||||||
|
|
||||||
|
A sidecar must share the base name of the media file:
|
||||||
|
|
||||||
|
- â
`IMG_0001.jpg.xmp` â preferred
|
||||||
|
- â
`IMG_0001.xmp` â fallback
|
||||||
|
- â `myphoto_meta.xmp` â not recognized
|
||||||
|
|
||||||
|
If both `.jpg.xmp` and `.xmp` are present, Immich uses the **`.jpg.xmp`** file.
|
||||||
|
|
||||||
|
## CLI Support
|
||||||
|
|
||||||
|
1. **Detect** â Immich looks for a `.xmp` file placed next to each media file during upload.
|
||||||
|
2. **Copy** â Both the media and the sidecar file are copied into Immichâs internal library folder.
|
||||||
|
The sidecar is renamed to match the internal filename template, e.g.:
|
||||||
|
`upload/library/<user>/YYYY/YYYY-MM-DD/IMG_0001.jpg`
|
||||||
|
`upload/library/<user>/YYYY/YYYY-MM-DD/IMG_0001.jpg.xmp`
|
||||||
|
3. **Extract** â Selected metadata (title, description, date, rating, tags) is parsed from the sidecar and saved to the database.
|
||||||
|
4. **Write-back** â If you later update tags, rating, or description in the web UI, Immich will update **both** the database _and_ the copied `.xmp` file to stay in sync.
|
||||||
|
|
||||||
|
## External Library (Mounted Folder) Support
|
||||||
|
|
||||||
|
1. **Detect** â The `DISCOVER` job automatically associates `.xmp` files that sit next to existing media files in your mounted folder. No files are moved or renamed.
|
||||||
|
2. **Extract** â Immich reads and saves the same metadata fields from the sidecar to the database.
|
||||||
|
3. **Write-back** â If Immich has **write access** to the mount, any future metadata edits (e.g., rating or tags) are also written back to the original `.xmp` file on disk.
|
||||||
|
|
||||||
|
:::danger
|
||||||
|
If the mount is **read-only**, Immich cannot update either the sidecar **or** the database â **metadata edits will silently fail** with no warning see issue [#10538](https://github.com/immich-app/immich/issues/10538) for more details.
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Admin Jobs
|
||||||
|
|
||||||
|
Immich provides two admin jobs for managing sidecars:
|
||||||
|
|
||||||
|
| Job | What it does |
|
||||||
|
| ---------- | ------------------------------------------------------------------------------------------------- |
|
||||||
|
| `DISCOVER` | Finds new `.xmp` files next to media that donât already have one linked |
|
||||||
|
| `SYNC` | Re-reads existing `.xmp` files and refreshes metadata in the database (e.g. after external edits) |
|
||||||
|
|
||||||
|

|
||||||
|
|||||||
@@ -147,7 +147,10 @@ SELECT "key", "value" FROM "system_metadata" WHERE "key" = 'system-config';
|
|||||||
### File properties
|
### File properties
|
||||||
|
|
||||||
```sql title="Without thumbnails"
|
```sql title="Without thumbnails"
|
||||||
SELECT * FROM "asset" WHERE "asset"."previewPath" IS NULL OR "asset"."thumbnailPath" IS NULL;
|
SELECT * FROM "asset"
|
||||||
|
WHERE (NOT EXISTS (SELECT 1 FROM "asset_file" WHERE "asset"."id" = "asset_file"."assetId" AND "asset_file"."type" = 'thumbnail')
|
||||||
|
OR NOT EXISTS (SELECT 1 FROM "asset_file" WHERE "asset"."id" = "asset_file"."assetId" AND "asset_file"."type" = 'preview'))
|
||||||
|
AND "asset"."visibility" = 'timeline';
|
||||||
```
|
```
|
||||||
|
|
||||||
```sql title="Failed file movements"
|
```sql title="Failed file movements"
|
||||||
|
|||||||
@@ -169,8 +169,6 @@ Redis (Sentinel) URL example JSON before encoding:
|
|||||||
| `MACHINE_LEARNING_ANN_TUNING_LEVEL` | ARM-NN GPU tuning level (1: rapid, 2: normal, 3: exhaustive) | `2` | machine learning |
|
| `MACHINE_LEARNING_ANN_TUNING_LEVEL` | ARM-NN GPU tuning level (1: rapid, 2: normal, 3: exhaustive) | `2` | machine learning |
|
||||||
| `MACHINE_LEARNING_DEVICE_IDS`<sup>\*4</sup> | Device IDs to use in multi-GPU environments | `0` | machine learning |
|
| `MACHINE_LEARNING_DEVICE_IDS`<sup>\*4</sup> | Device IDs to use in multi-GPU environments | `0` | machine learning |
|
||||||
| `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_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` | 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 |
|
| `MACHINE_LEARNING_RKNN_THREADS` | How many threads of RKNN runtime should be spinned up while inferencing. | `1` | machine learning |
|
||||||
|
|
||||||
|
|||||||
@@ -42,8 +42,8 @@ const config = {
|
|||||||
],
|
],
|
||||||
presets: [
|
presets: [
|
||||||
[
|
[
|
||||||
'docusaurus-preset-openapi',
|
'classic',
|
||||||
/** @type {import('docusaurus-preset-openapi').Options} */
|
/** @type {import('@docusaurus/preset-classic').Options} */
|
||||||
({
|
({
|
||||||
docs: {
|
docs: {
|
||||||
showLastUpdateAuthor: true,
|
showLastUpdateAuthor: true,
|
||||||
@@ -54,14 +54,6 @@ const config = {
|
|||||||
// Remove this to remove the "edit this page" links.
|
// Remove this to remove the "edit this page" links.
|
||||||
editUrl: 'https://github.com/immich-app/immich/tree/main/docs/',
|
editUrl: 'https://github.com/immich-app/immich/tree/main/docs/',
|
||||||
},
|
},
|
||||||
api: {
|
|
||||||
path: '../open-api/immich-openapi-specs.json',
|
|
||||||
routeBasePath: '/docs/api',
|
|
||||||
},
|
|
||||||
// blog: {
|
|
||||||
// showReadingTime: true,
|
|
||||||
// editUrl: "https://github.com/immich-app/immich/tree/main/docs/",
|
|
||||||
// },
|
|
||||||
theme: {
|
theme: {
|
||||||
customCss: require.resolve('./src/css/custom.css'),
|
customCss: require.resolve('./src/css/custom.css'),
|
||||||
},
|
},
|
||||||
@@ -100,12 +92,12 @@ const config = {
|
|||||||
label: 'Docs',
|
label: 'Docs',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
to: '/roadmap',
|
href: 'https://immich.app/roadmap',
|
||||||
position: 'right',
|
position: 'right',
|
||||||
label: 'Roadmap',
|
label: 'Roadmap',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
to: '/docs/api',
|
href: 'https://api.immich.app/',
|
||||||
position: 'right',
|
position: 'right',
|
||||||
label: 'API',
|
label: 'API',
|
||||||
},
|
},
|
||||||
@@ -161,15 +153,15 @@ const config = {
|
|||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
label: 'Roadmap',
|
label: 'Roadmap',
|
||||||
to: '/roadmap',
|
href: 'https://immich.app/roadmap',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'API',
|
label: 'API',
|
||||||
to: '/docs/api',
|
href: 'https://api.immich.app/',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Cursed Knowledge',
|
label: 'Cursed Knowledge',
|
||||||
to: '/cursed-knowledge',
|
href: 'https://immich.app/cursed-knowledge',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|||||||
Generated
-20545
File diff suppressed because it is too large
Load Diff
+1
-4
@@ -24,10 +24,7 @@
|
|||||||
"@mdi/react": "^1.6.1",
|
"@mdi/react": "^1.6.1",
|
||||||
"@mdx-js/react": "^3.0.0",
|
"@mdx-js/react": "^3.0.0",
|
||||||
"autoprefixer": "^10.4.17",
|
"autoprefixer": "^10.4.17",
|
||||||
"classnames": "^2.3.2",
|
|
||||||
"clsx": "^2.0.0",
|
|
||||||
"docusaurus-lunr-search": "^3.3.2",
|
"docusaurus-lunr-search": "^3.3.2",
|
||||||
"docusaurus-preset-openapi": "^0.7.5",
|
|
||||||
"lunr": "^2.3.9",
|
"lunr": "^2.3.9",
|
||||||
"postcss": "^8.4.25",
|
"postcss": "^8.4.25",
|
||||||
"prism-react-renderer": "^2.3.1",
|
"prism-react-renderer": "^2.3.1",
|
||||||
@@ -60,6 +57,6 @@
|
|||||||
"node": ">=20"
|
"node": ">=20"
|
||||||
},
|
},
|
||||||
"volta": {
|
"volta": {
|
||||||
"node": "22.18.0"
|
"node": "22.19.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,12 @@ const guides: CommunityGuidesProps[] = [
|
|||||||
description: `synchronize folders in imported library with albums having the folders name.`,
|
description: `synchronize folders in imported library with albums having the folders name.`,
|
||||||
url: 'https://github.com/immich-app/immich/discussions/3382',
|
url: 'https://github.com/immich-app/immich/discussions/3382',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: 'Immich Podman Quadlets Handbook',
|
||||||
|
description:
|
||||||
|
'A rewrite of the original Immich Docker Compose file using Podman Quadlets, with a set of extra guides in the repositoryâs wiki.',
|
||||||
|
url: 'https://github.com/linux-universe/immich-podman-quadlets/blob/main/README.md',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: 'Podman/Quadlets Install',
|
title: 'Podman/Quadlets Install',
|
||||||
description: 'Documentation for simple podman setup using quadlets.',
|
description: 'Documentation for simple podman setup using quadlets.',
|
||||||
|
|||||||
@@ -105,6 +105,21 @@ const projects: CommunityProjectProps[] = [
|
|||||||
description: 'Speed up your machine learning by load balancing your requests to multiple computers',
|
description: 'Speed up your machine learning by load balancing your requests to multiple computers',
|
||||||
url: 'https://github.com/apetersson/immich_ml_balancer',
|
url: 'https://github.com/apetersson/immich_ml_balancer',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: 'Immich Drop Uploader',
|
||||||
|
description: 'A tiny, zero-login web app for collecting photos/videos from anyone into your Immich server.',
|
||||||
|
url: 'https://github.com/Nasogaa/immich-drop',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Immich Birthday Sync',
|
||||||
|
description: 'Bulk-upload and -download birthdays, with CardDAV sync support',
|
||||||
|
url: 'https://github.com/sid3windr/immich-birthday',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Immich Stack',
|
||||||
|
description: 'Auto-stack photos with identical filenames and differing extensions (i.e. JPG+RAW)',
|
||||||
|
url: 'https://github.com/sid3windr/immich-stack',
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
function CommunityProject({ title, description, url }: CommunityProjectProps): JSX.Element {
|
function CommunityProject({ title, description, url }: CommunityProjectProps): JSX.Element {
|
||||||
|
|||||||
@@ -1,273 +0,0 @@
|
|||||||
import {
|
|
||||||
mdiBug,
|
|
||||||
mdiCalendarToday,
|
|
||||||
mdiCrosshairsOff,
|
|
||||||
mdiCrop,
|
|
||||||
mdiDatabase,
|
|
||||||
mdiLeadPencil,
|
|
||||||
mdiLockOff,
|
|
||||||
mdiLockOutline,
|
|
||||||
mdiMicrosoftWindows,
|
|
||||||
mdiSecurity,
|
|
||||||
mdiSpeedometerSlow,
|
|
||||||
mdiTrashCan,
|
|
||||||
mdiWeb,
|
|
||||||
mdiWrap,
|
|
||||||
mdiCloudKeyOutline,
|
|
||||||
mdiRegex,
|
|
||||||
mdiCodeJson,
|
|
||||||
mdiClockOutline,
|
|
||||||
mdiAccountOutline,
|
|
||||||
mdiRestart,
|
|
||||||
} from '@mdi/js';
|
|
||||||
import Layout from '@theme/Layout';
|
|
||||||
import React from 'react';
|
|
||||||
import { Timeline, Item as TimelineItem } from '../components/timeline';
|
|
||||||
|
|
||||||
const withLanguage = (date: Date) => (language: string) => date.toLocaleDateString(language);
|
|
||||||
|
|
||||||
type Item = Omit<TimelineItem, 'done' | 'getDateLabel'> & { date: Date };
|
|
||||||
|
|
||||||
const items: Item[] = [
|
|
||||||
{
|
|
||||||
icon: mdiClockOutline,
|
|
||||||
iconColor: 'gray',
|
|
||||||
title: 'setTimeout is cursed',
|
|
||||||
description:
|
|
||||||
'The setTimeout method in JavaScript is cursed when used with small values because the implementation may or may not actually wait the specified time.',
|
|
||||||
link: {
|
|
||||||
url: 'https://github.com/immich-app/immich/pull/20655',
|
|
||||||
text: '#20655',
|
|
||||||
},
|
|
||||||
date: new Date(2025, 7, 4),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: mdiAccountOutline,
|
|
||||||
iconColor: '#DAB1DA',
|
|
||||||
title: 'PostgreSQL USER is cursed',
|
|
||||||
description:
|
|
||||||
'The USER keyword in PostgreSQL is cursed because you can select from it like a table, which leads to confusion if you have a table name user as well.',
|
|
||||||
link: {
|
|
||||||
url: 'https://github.com/immich-app/immich/pull/19891',
|
|
||||||
text: '#19891',
|
|
||||||
},
|
|
||||||
date: new Date(2025, 7, 4),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: mdiRestart,
|
|
||||||
iconColor: '#8395e3',
|
|
||||||
title: 'PostgreSQL RESET is cursed',
|
|
||||||
description:
|
|
||||||
'PostgreSQL RESET is cursed because it is impossible to RESET a PostgreSQL extension parameter if the extension has been uninstalled.',
|
|
||||||
link: {
|
|
||||||
url: 'https://github.com/immich-app/immich/pull/19363',
|
|
||||||
text: '#19363',
|
|
||||||
},
|
|
||||||
date: new Date(2025, 5, 20),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: mdiRegex,
|
|
||||||
iconColor: 'purple',
|
|
||||||
title: 'Zitadel Actions are cursed',
|
|
||||||
description:
|
|
||||||
"Zitadel is cursed because its custom scripting feature is executed with a JS engine that doesn't support regex named capture groups.",
|
|
||||||
link: {
|
|
||||||
url: 'https://github.com/dop251/goja',
|
|
||||||
text: 'Go JS engine',
|
|
||||||
},
|
|
||||||
date: new Date(2025, 5, 4),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: mdiCloudKeyOutline,
|
|
||||||
iconColor: '#0078d4',
|
|
||||||
title: 'Entra is cursed',
|
|
||||||
description:
|
|
||||||
"Microsoft Entra supports PKCE, but doesn't include it in its OpenID discovery document. This leads to clients thinking PKCE isn't available.",
|
|
||||||
link: {
|
|
||||||
url: 'https://github.com/immich-app/immich/pull/18725',
|
|
||||||
text: '#18725',
|
|
||||||
},
|
|
||||||
date: new Date(2025, 4, 30),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: mdiCrop,
|
|
||||||
iconColor: 'tomato',
|
|
||||||
title: 'Image dimensions in EXIF metadata are cursed',
|
|
||||||
description:
|
|
||||||
'The dimensions in EXIF metadata can be different from the actual dimensions of the image, causing issues with cropping and resizing.',
|
|
||||||
link: {
|
|
||||||
url: 'https://github.com/immich-app/immich/pull/17974',
|
|
||||||
text: '#17974',
|
|
||||||
},
|
|
||||||
date: new Date(2025, 4, 5),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: mdiCodeJson,
|
|
||||||
iconColor: 'yellow',
|
|
||||||
title: 'YAML whitespace is cursed',
|
|
||||||
description: 'YAML whitespaces are often handled in unintuitive ways.',
|
|
||||||
link: {
|
|
||||||
url: 'https://github.com/immich-app/immich/pull/17309',
|
|
||||||
text: '#17309',
|
|
||||||
},
|
|
||||||
date: new Date(2025, 3, 1),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: mdiMicrosoftWindows,
|
|
||||||
iconColor: '#357EC7',
|
|
||||||
title: 'Hidden files in Windows are cursed',
|
|
||||||
description:
|
|
||||||
'Hidden files in Windows cannot be opened with the "w" flag. That, combined with SMB option "hide dot files" leads to a lot of confusion.',
|
|
||||||
link: {
|
|
||||||
url: 'https://github.com/immich-app/immich/pull/12812',
|
|
||||||
text: '#12812',
|
|
||||||
},
|
|
||||||
date: new Date(2024, 8, 20),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: mdiWrap,
|
|
||||||
iconColor: 'gray',
|
|
||||||
title: 'Carriage returns in bash scripts are cursed',
|
|
||||||
description: 'Git can be configured to automatically convert LF to CRLF on checkout and CRLF breaks bash scripts.',
|
|
||||||
link: {
|
|
||||||
url: 'https://github.com/immich-app/immich/pull/11613',
|
|
||||||
text: '#11613',
|
|
||||||
},
|
|
||||||
date: new Date(2024, 7, 7),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: mdiLockOff,
|
|
||||||
iconColor: 'red',
|
|
||||||
title: 'Fetch inside Cloudflare Workers is cursed',
|
|
||||||
description:
|
|
||||||
'Fetch requests in Cloudflare Workers use http by default, even if you explicitly specify https, which can often cause redirect loops.',
|
|
||||||
link: {
|
|
||||||
url: 'https://community.cloudflare.com/t/does-cloudflare-worker-allow-secure-https-connection-to-fetch-even-on-flexible-ssl/68051/5',
|
|
||||||
text: 'Cloudflare',
|
|
||||||
},
|
|
||||||
date: new Date(2024, 7, 7),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: mdiCrosshairsOff,
|
|
||||||
iconColor: 'gray',
|
|
||||||
title: 'GPS sharing on mobile is cursed',
|
|
||||||
description:
|
|
||||||
'Some phones will silently strip GPS data from images when apps without location permission try to access them.',
|
|
||||||
link: {
|
|
||||||
url: 'https://github.com/immich-app/immich/discussions/11268',
|
|
||||||
text: '#11268',
|
|
||||||
},
|
|
||||||
date: new Date(2024, 6, 21),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: mdiLeadPencil,
|
|
||||||
iconColor: 'gold',
|
|
||||||
title: 'PostgreSQL NOTIFY is cursed',
|
|
||||||
description:
|
|
||||||
'PostgreSQL does everything in a transaction, including NOTIFY. This means using the socket.io postgres-adapter writes to WAL every 5 seconds.',
|
|
||||||
link: { url: 'https://github.com/immich-app/immich/pull/10801', text: '#10801' },
|
|
||||||
date: new Date(2024, 6, 3),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: mdiWeb,
|
|
||||||
iconColor: 'lightskyblue',
|
|
||||||
title: 'npm scripts are cursed',
|
|
||||||
description:
|
|
||||||
'npm scripts make a http call to the npm registry each time they run, which means they are a terrible way to execute a health check.',
|
|
||||||
link: { url: 'https://github.com/immich-app/immich/issues/10796', text: '#10796' },
|
|
||||||
date: new Date(2024, 6, 3),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: mdiSpeedometerSlow,
|
|
||||||
iconColor: 'brown',
|
|
||||||
title: '50 extra packages are cursed',
|
|
||||||
description:
|
|
||||||
'There is a user in the JavaScript community who goes around adding "backwards compatibility" to projects. They do this by adding 50 extra package dependencies to your project, which are maintained by them.',
|
|
||||||
link: { url: 'https://github.com/immich-app/immich/pull/10690', text: '#10690' },
|
|
||||||
date: new Date(2024, 5, 28),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: mdiLockOutline,
|
|
||||||
iconColor: 'gold',
|
|
||||||
title: 'Long passwords are cursed',
|
|
||||||
description:
|
|
||||||
'The bcrypt implementation only uses the first 72 bytes of a string. Any characters after that are ignored.',
|
|
||||||
// link: GHSA-4p64-9f7h-3432
|
|
||||||
date: new Date(2024, 5, 25),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: mdiCalendarToday,
|
|
||||||
iconColor: 'greenyellow',
|
|
||||||
title: 'JavaScript Date objects are cursed',
|
|
||||||
description: 'JavaScript date objects are 1 indexed for years and days, but 0 indexed for months.',
|
|
||||||
link: { url: 'https://github.com/immich-app/immich/pull/6787', text: '#6787' },
|
|
||||||
date: new Date(2024, 0, 31),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: mdiBug,
|
|
||||||
iconColor: 'green',
|
|
||||||
title: 'ESM imports are cursed',
|
|
||||||
description:
|
|
||||||
'Prior to Node.js v20.8 using --experimental-vm-modules in a CommonJS project that imported an ES module that imported a CommonJS modules would create a segfault and crash Node.js',
|
|
||||||
link: {
|
|
||||||
url: 'https://github.com/immich-app/immich/pull/6719',
|
|
||||||
text: '#6179',
|
|
||||||
},
|
|
||||||
date: new Date(2024, 0, 9),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: mdiDatabase,
|
|
||||||
iconColor: 'gray',
|
|
||||||
title: 'PostgreSQL parameters are cursed',
|
|
||||||
description: `PostgresSQL has a limit of ${Number(65535).toLocaleString()} parameters, so bulk inserts can fail with large datasets.`,
|
|
||||||
link: {
|
|
||||||
url: 'https://github.com/immich-app/immich/pull/6034',
|
|
||||||
text: '#6034',
|
|
||||||
},
|
|
||||||
date: new Date(2023, 11, 28),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: mdiSecurity,
|
|
||||||
iconColor: 'gold',
|
|
||||||
title: 'Secure contexts are cursed',
|
|
||||||
description: `Some web features like the clipboard API only work in "secure contexts" (ie. https or localhost)`,
|
|
||||||
link: {
|
|
||||||
url: 'https://github.com/immich-app/immich/issues/2981',
|
|
||||||
text: '#2981',
|
|
||||||
},
|
|
||||||
date: new Date(2023, 5, 26),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
icon: mdiTrashCan,
|
|
||||||
iconColor: 'gray',
|
|
||||||
title: 'TypeORM deletes are cursed',
|
|
||||||
description: `The remove implementation in TypeORM mutates the input, deleting the id property from the original object.`,
|
|
||||||
link: {
|
|
||||||
url: 'https://github.com/typeorm/typeorm/issues/7024#issuecomment-948519328',
|
|
||||||
text: 'typeorm#6034',
|
|
||||||
},
|
|
||||||
date: new Date(2023, 1, 23),
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
export default function CursedKnowledgePage(): JSX.Element {
|
|
||||||
return (
|
|
||||||
<Layout title="Cursed Knowledge" description="Things we wish we didn't know">
|
|
||||||
<section className="my-8">
|
|
||||||
<h1 className="md:text-6xl text-center mb-10 text-immich-primary dark:text-immich-dark-primary px-2">
|
|
||||||
Cursed Knowledge
|
|
||||||
</h1>
|
|
||||||
<p className="text-center text-xl px-2">
|
|
||||||
Cursed knowledge we have learned as a result of building Immich that we wish we never knew.
|
|
||||||
</p>
|
|
||||||
<div className="flex justify-around mt-8 w-full max-w-full">
|
|
||||||
<Timeline
|
|
||||||
items={items
|
|
||||||
.sort((a, b) => b.date.getTime() - a.date.getTime())
|
|
||||||
.map((item) => ({ ...item, getDateLabel: withLanguage(item.date) }))}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
</Layout>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -2,7 +2,17 @@
|
|||||||
|
|
||||||
## TypeORM Upgrade
|
## TypeORM Upgrade
|
||||||
|
|
||||||
In order to update to Immich to `v1.137.0` (or above), the application must be started at least once on a version in the range between `1.132.0` and `1.136.0`. Doing so will complete database schema upgrades that are required for `v1.137.0` (and above). After Immich has successfully updated to a version in this range, you can now attempt to update to v1.137.0 (or above). We recommend users upgrade to `1.132.0` since it does not have any other breaking changes.
|
If you encountered "Migrations failed: Error: Invalid upgrade path" then perform an intermediate upgrade to `v1.132.3` first.
|
||||||
|
|
||||||
|
:::tip
|
||||||
|
We recommend users upgrade to `v1.132.3` since it does not have any breaking changes or bugs on this upgrade path.
|
||||||
|
:::
|
||||||
|
|
||||||
|
In order to update to Immich `v1.137.0` or above, the application must be started at least once on a version in the range between `1.132.0` and `1.136.0`. Doing so will complete database schema upgrades that are required for `v1.137.0` (and above). After Immich has successfully updated to a version in this range, you can now attempt to update to `v1.137.0` (or above).
|
||||||
|
|
||||||
|
:::caution
|
||||||
|
Avoid `v1.136.0` if upgrading from `v1.131.0` (or earlier) due to a bug blocking this upgrade in some installations.
|
||||||
|
:::
|
||||||
|
|
||||||
## Inconsistent Media Location
|
## Inconsistent Media Location
|
||||||
|
|
||||||
|
|||||||
+2
-120
@@ -1,123 +1,5 @@
|
|||||||
import React from 'react';
|
import { Redirect } from '@docusaurus/router';
|
||||||
import Link from '@docusaurus/Link';
|
|
||||||
import Layout from '@theme/Layout';
|
|
||||||
import { discordPath, discordViewBox } from '@site/src/components/svg-paths';
|
|
||||||
import ThemedImage from '@theme/ThemedImage';
|
|
||||||
import Icon from '@mdi/react';
|
|
||||||
|
|
||||||
function HomepageHeader() {
|
|
||||||
return (
|
|
||||||
<header>
|
|
||||||
<div className="top-[calc(12%)] md:top-[calc(30%)] h-screen w-full absolute -z-10">
|
|
||||||
<img src={'img/immich-logo.svg'} className="h-[110%] w-[110%] mb-2 antialiased -z-10" alt="Immich logo" />
|
|
||||||
<div className="w-full h-[120vh] absolute left-0 top-0 backdrop-blur-3xl bg-immich-bg/40 dark:bg-transparent"></div>
|
|
||||||
</div>
|
|
||||||
<section className="text-center pt-12 sm:pt-24 bg-immich-bg/50 dark:bg-immich-dark-bg/80">
|
|
||||||
<a href="https://futo.org" target="_blank" rel="noopener noreferrer">
|
|
||||||
<ThemedImage
|
|
||||||
sources={{ dark: 'img/logomark-dark-with-futo.svg', light: 'img/logomark-light-with-futo.svg' }}
|
|
||||||
className="h-[125px] w-[125px] mb-2 antialiased rounded-none"
|
|
||||||
alt="Immich logo"
|
|
||||||
/>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<div className="mt-8">
|
|
||||||
<p className="text-3xl md:text-5xl sm:leading-tight mb-1 font-extrabold text-black/90 dark:text-white px-4">
|
|
||||||
Self-hosted{' '}
|
|
||||||
<span className="text-immich-primary dark:text-immich-dark-primary">
|
|
||||||
photo and <span className="block"></span>
|
|
||||||
video management{' '}
|
|
||||||
</span>
|
|
||||||
solution<span className="block"></span>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p className="max-w-1/4 m-auto mt-4 px-4 text-lg text-gray-700 dark:text-gray-100">
|
|
||||||
Easily back up, organize, and manage your photos on your own server. Immich helps you
|
|
||||||
<span className="sm:block"></span> browse, search and organize your photos and videos with ease, without
|
|
||||||
sacrificing your privacy.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div className="flex flex-col sm:flex-row place-items-center place-content-center mt-9 gap-4 ">
|
|
||||||
<Link
|
|
||||||
className="flex place-items-center place-content-center py-3 px-8 border bg-immich-primary dark:bg-immich-dark-primary rounded-xl no-underline hover:no-underline text-white hover:text-gray-50 dark:text-immich-dark-bg font-bold"
|
|
||||||
to="docs/overview/quick-start"
|
|
||||||
>
|
|
||||||
Get Started
|
|
||||||
</Link>
|
|
||||||
|
|
||||||
<Link
|
|
||||||
className="flex place-items-center place-content-center py-3 px-8 border bg-white/90 dark:bg-gray-300 rounded-xl hover:no-underline text-immich-primary dark:text-immich-dark-bg font-bold"
|
|
||||||
to="https://demo.immich.app/"
|
|
||||||
>
|
|
||||||
Open Demo
|
|
||||||
</Link>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="my-8 flex gap-1 font-medium place-items-center place-content-center text-immich-primary dark:text-immich-dark-primary">
|
|
||||||
<Icon
|
|
||||||
path={discordPath}
|
|
||||||
viewBox={discordViewBox} /* viewBox may show an error in your IDE but it is normal. */
|
|
||||||
size={1}
|
|
||||||
/>
|
|
||||||
<Link to="https://discord.immich.app/">Join our Discord</Link>
|
|
||||||
</div>
|
|
||||||
<ThemedImage
|
|
||||||
sources={{ dark: '/img/screenshot-dark.webp', light: '/img/screenshot-light.webp' }}
|
|
||||||
alt="screenshots"
|
|
||||||
className="w-[95%] lg:w-[85%] xl:w-[70%] 2xl:w-[60%] "
|
|
||||||
/>
|
|
||||||
<div className="mx-[25%] m-auto my-14 md:my-28">
|
|
||||||
<hr className="border bg-gray-500 dark:bg-gray-400" />
|
|
||||||
</div>
|
|
||||||
<ThemedImage
|
|
||||||
sources={{ dark: 'img/logomark-dark.svg', light: 'img/logomark-light.svg' }}
|
|
||||||
className="h-[115px] w-[115px] mb-2 antialiased rounded-none"
|
|
||||||
alt="Immich logo"
|
|
||||||
/>
|
|
||||||
<div>
|
|
||||||
<p className="font-bold text-2xl md:text-5xl ">Download the mobile app</p>
|
|
||||||
<p className="text-lg">
|
|
||||||
Download the Immich app and start backing up your photos and videos securely to your own server
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div className="flex flex-col sm:flex-row place-items-center place-content-center mt-4 gap-1">
|
|
||||||
<div className="h-24">
|
|
||||||
<a href="https://play.google.com/store/apps/details?id=app.alextran.immich">
|
|
||||||
<img className="h-24" alt="Get it on Google Play" src="/img/google-play-badge.png" />
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="h-24">
|
|
||||||
<a href="https://apps.apple.com/sg/app/immich/id1613945652">
|
|
||||||
<img className="h-24 sm:p-3.5 p-3" alt="Download on the App Store" src="/img/ios-app-store-badge.svg" />
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="h-24">
|
|
||||||
<a href="https://github.com/immich-app/immich/releases/latest">
|
|
||||||
<img className="h-24 sm:p-3.5 p-3" alt="Download APK" src="/img/download-apk-github.svg" />
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<ThemedImage
|
|
||||||
sources={{ dark: '/img/app-qr-code-dark.svg', light: '/img/app-qr-code-light.svg' }}
|
|
||||||
alt="app qr code"
|
|
||||||
width={'150px'}
|
|
||||||
className="shadow-lg p-3 my-8 dark:bg-immich-dark-bg "
|
|
||||||
/>
|
|
||||||
</section>
|
|
||||||
</header>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default function Home(): JSX.Element {
|
export default function Home(): JSX.Element {
|
||||||
return (
|
return <Redirect to="/docs/overview/welcome" />;
|
||||||
<Layout title="Home" description="Self-hosted photo and video management solution" noFooter={true}>
|
|
||||||
<HomepageHeader />
|
|
||||||
<div className="flex flex-col place-items-center text-center place-content-center dark:bg-immich-dark-bg py-8">
|
|
||||||
<p>This project is available under GNU AGPL v3 license.</p>
|
|
||||||
<p className="text-sm">Privacy should not be a luxury</p>
|
|
||||||
</div>
|
|
||||||
</Layout>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,944 +0,0 @@
|
|||||||
import {
|
|
||||||
mdiAccountGroup,
|
|
||||||
mdiAccountGroupOutline,
|
|
||||||
mdiAndroid,
|
|
||||||
mdiAppleIos,
|
|
||||||
mdiArchiveOutline,
|
|
||||||
mdiBash,
|
|
||||||
mdiBookSearchOutline,
|
|
||||||
mdiBookmark,
|
|
||||||
mdiCakeVariant,
|
|
||||||
mdiCameraBurst,
|
|
||||||
mdiChartBoxMultipleOutline,
|
|
||||||
mdiCheckAll,
|
|
||||||
mdiCheckboxMarked,
|
|
||||||
mdiCloudUploadOutline,
|
|
||||||
mdiCollage,
|
|
||||||
mdiContentDuplicate,
|
|
||||||
mdiCrop,
|
|
||||||
mdiDevices,
|
|
||||||
mdiEmailOutline,
|
|
||||||
mdiExpansionCard,
|
|
||||||
mdiEyeOutline,
|
|
||||||
mdiEyeRefreshOutline,
|
|
||||||
mdiFaceMan,
|
|
||||||
mdiFaceManOutline,
|
|
||||||
mdiFile,
|
|
||||||
mdiFileSearch,
|
|
||||||
mdiFlash,
|
|
||||||
mdiFolder,
|
|
||||||
mdiFolderMultiple,
|
|
||||||
mdiForum,
|
|
||||||
mdiHandshakeOutline,
|
|
||||||
mdiHeart,
|
|
||||||
mdiHistory,
|
|
||||||
mdiImage,
|
|
||||||
mdiImageAlbum,
|
|
||||||
mdiImageEdit,
|
|
||||||
mdiImageMultipleOutline,
|
|
||||||
mdiImageSearch,
|
|
||||||
mdiKeyboardSettingsOutline,
|
|
||||||
mdiLicense,
|
|
||||||
mdiLockOutline,
|
|
||||||
mdiMagnify,
|
|
||||||
mdiMagnifyScan,
|
|
||||||
mdiMap,
|
|
||||||
mdiMaterialDesign,
|
|
||||||
mdiMatrix,
|
|
||||||
mdiMerge,
|
|
||||||
mdiMonitor,
|
|
||||||
mdiMotionPlayOutline,
|
|
||||||
mdiPalette,
|
|
||||||
mdiPanVertical,
|
|
||||||
mdiPartyPopper,
|
|
||||||
mdiPencil,
|
|
||||||
mdiRaw,
|
|
||||||
mdiRocketLaunch,
|
|
||||||
mdiRotate360,
|
|
||||||
mdiScaleBalance,
|
|
||||||
mdiSecurity,
|
|
||||||
mdiServer,
|
|
||||||
mdiShare,
|
|
||||||
mdiShareAll,
|
|
||||||
mdiShareCircle,
|
|
||||||
mdiStar,
|
|
||||||
mdiStarOutline,
|
|
||||||
mdiTableKey,
|
|
||||||
mdiTag,
|
|
||||||
mdiTagMultiple,
|
|
||||||
mdiText,
|
|
||||||
mdiThemeLightDark,
|
|
||||||
mdiTrashCanOutline,
|
|
||||||
mdiVectorCombine,
|
|
||||||
mdiFolderSync,
|
|
||||||
mdiFaceRecognition,
|
|
||||||
mdiVideo,
|
|
||||||
mdiWeb,
|
|
||||||
mdiDatabaseOutline,
|
|
||||||
mdiLinkEdit,
|
|
||||||
mdiTagFaces,
|
|
||||||
mdiMovieOpenPlayOutline,
|
|
||||||
mdiCast,
|
|
||||||
} from '@mdi/js';
|
|
||||||
import Layout from '@theme/Layout';
|
|
||||||
import React from 'react';
|
|
||||||
import { Item, Timeline } from '../components/timeline';
|
|
||||||
|
|
||||||
const releases = {
|
|
||||||
'v1.135.0': new Date(2025, 5, 18),
|
|
||||||
'v1.133.0': new Date(2025, 4, 21),
|
|
||||||
'v1.130.0': new Date(2025, 2, 25),
|
|
||||||
'v1.127.0': new Date(2025, 1, 26),
|
|
||||||
'v1.122.0': new Date(2024, 11, 5),
|
|
||||||
'v1.120.0': new Date(2024, 10, 6),
|
|
||||||
'v1.114.0': new Date(2024, 8, 6),
|
|
||||||
'v1.113.0': new Date(2024, 7, 30),
|
|
||||||
'v1.112.0': new Date(2024, 7, 14),
|
|
||||||
'v1.111.0': new Date(2024, 6, 26),
|
|
||||||
'v1.110.0': new Date(2024, 5, 11),
|
|
||||||
'v1.109.0': new Date(2024, 6, 18),
|
|
||||||
'v1.106.1': new Date(2024, 5, 11),
|
|
||||||
'v1.104.0': new Date(2024, 4, 13),
|
|
||||||
'v1.103.0': new Date(2024, 3, 29),
|
|
||||||
'v1.102.0': new Date(2024, 3, 15),
|
|
||||||
'v1.99.0': new Date(2024, 2, 20),
|
|
||||||
'v1.98.0': new Date(2024, 2, 7),
|
|
||||||
'v1.95.0': new Date(2024, 1, 20),
|
|
||||||
'v1.94.0': new Date(2024, 0, 31),
|
|
||||||
'v1.93.0': new Date(2024, 0, 19),
|
|
||||||
'v1.91.0': new Date(2023, 11, 15),
|
|
||||||
'v1.90.0': new Date(2023, 11, 7),
|
|
||||||
'v1.88.0': new Date(2023, 10, 20),
|
|
||||||
'v1.84.0': new Date(2023, 10, 1),
|
|
||||||
'v1.83.0': new Date(2023, 9, 28),
|
|
||||||
'v1.82.0': new Date(2023, 9, 17),
|
|
||||||
'v1.79.0': new Date(2023, 8, 21),
|
|
||||||
'v1.76.0': new Date(2023, 7, 29),
|
|
||||||
'v1.75.0': new Date(2023, 7, 26),
|
|
||||||
'v1.72.0': new Date(2023, 7, 6),
|
|
||||||
'v1.71.0': new Date(2023, 6, 29),
|
|
||||||
'v1.69.0': new Date(2023, 6, 23),
|
|
||||||
'v1.68.0': new Date(2023, 6, 20),
|
|
||||||
'v1.67.0': new Date(2023, 6, 14),
|
|
||||||
'v1.66.0': new Date(2023, 6, 4),
|
|
||||||
'v1.65.0': new Date(2023, 5, 30),
|
|
||||||
'v1.63.0': new Date(2023, 5, 24),
|
|
||||||
'v1.61.0': new Date(2023, 5, 16),
|
|
||||||
'v1.58.0': new Date(2023, 4, 28),
|
|
||||||
'v1.57.0': new Date(2023, 4, 23),
|
|
||||||
'v1.56.0': new Date(2023, 4, 18),
|
|
||||||
'v1.55.0': new Date(2023, 4, 9),
|
|
||||||
'v1.54.0': new Date(2023, 3, 18),
|
|
||||||
'v1.52.0': new Date(2023, 2, 29),
|
|
||||||
'v1.51.0': new Date(2023, 2, 20),
|
|
||||||
'v1.48.0': new Date(2023, 1, 21),
|
|
||||||
'v1.47.0': new Date(2023, 1, 13),
|
|
||||||
'v1.46.0': new Date(2023, 1, 9),
|
|
||||||
'v1.43.0': new Date(2023, 1, 3),
|
|
||||||
'v1.41.0': new Date(2023, 0, 10),
|
|
||||||
'v1.39.0': new Date(2022, 11, 19),
|
|
||||||
'v1.36.0': new Date(2022, 10, 20),
|
|
||||||
'v1.33.1': new Date(2022, 9, 26),
|
|
||||||
'v1.32.0': new Date(2022, 9, 14),
|
|
||||||
'v1.27.0': new Date(2022, 8, 6),
|
|
||||||
'v1.24.0': new Date(2022, 7, 19),
|
|
||||||
'v1.10.0': new Date(2022, 4, 29),
|
|
||||||
'v1.7.0': new Date(2022, 3, 24),
|
|
||||||
'v1.3.0': new Date(2022, 2, 22),
|
|
||||||
'v1.2.0': new Date(2022, 1, 8),
|
|
||||||
} as const;
|
|
||||||
|
|
||||||
const weirdTags = {
|
|
||||||
'v1.41.0': 'v1.41.1_64-dev',
|
|
||||||
'v1.39.0': 'v1.39.0_61-dev',
|
|
||||||
'v1.36.0': 'v1.36.0_55-dev',
|
|
||||||
'v1.33.1': 'v1.33.0_52-dev',
|
|
||||||
'v1.32.0': 'v1.32.0_50-dev',
|
|
||||||
'v1.27.0': 'v1.27.0_37-dev',
|
|
||||||
'v1.24.0': 'v1.24.0_34-dev',
|
|
||||||
'v1.10.0': 'v1.10.0_15-dev',
|
|
||||||
'v1.7.0': 'v1.7.0_11-dev ',
|
|
||||||
'v1.3.0': 'v1.3.0-dev ',
|
|
||||||
'v1.2.0': 'v0.2-dev ',
|
|
||||||
};
|
|
||||||
|
|
||||||
const title = 'Roadmap';
|
|
||||||
const description = 'A list of future plans and goals, as well as past achievements and milestones.';
|
|
||||||
|
|
||||||
const withLanguage = (date: Date) => (language: string) => date.toLocaleDateString(language);
|
|
||||||
|
|
||||||
type Base = { icon: string; iconColor?: React.CSSProperties['color']; title: string; description: string };
|
|
||||||
const withRelease = ({
|
|
||||||
icon,
|
|
||||||
iconColor,
|
|
||||||
title,
|
|
||||||
description,
|
|
||||||
release: version,
|
|
||||||
}: Base & { release: keyof typeof releases }) => {
|
|
||||||
return {
|
|
||||||
icon,
|
|
||||||
iconColor: iconColor ?? 'gray',
|
|
||||||
title,
|
|
||||||
description,
|
|
||||||
link: {
|
|
||||||
url: `https://github.com/immich-app/immich/releases/tag/${weirdTags[version] ?? version}`,
|
|
||||||
text: version,
|
|
||||||
},
|
|
||||||
getDateLabel: withLanguage(releases[version]),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const roadmap: Item[] = [
|
|
||||||
{
|
|
||||||
done: false,
|
|
||||||
icon: mdiFlash,
|
|
||||||
iconColor: 'gold',
|
|
||||||
title: 'Workflows',
|
|
||||||
description: 'Automate tasks with workflows',
|
|
||||||
getDateLabel: () => 'Planned for 2025',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
done: false,
|
|
||||||
icon: mdiImageEdit,
|
|
||||||
iconColor: 'rebeccapurple',
|
|
||||||
title: 'Basic editor',
|
|
||||||
description: 'Basic photo editing capabilities',
|
|
||||||
getDateLabel: () => 'Planned for 2025',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
done: false,
|
|
||||||
icon: mdiRocketLaunch,
|
|
||||||
iconColor: 'indianred',
|
|
||||||
title: 'Stable release',
|
|
||||||
description: 'Immich goes stable',
|
|
||||||
getDateLabel: () => 'Planned for 2025',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
done: false,
|
|
||||||
icon: mdiCloudUploadOutline,
|
|
||||||
iconColor: 'cornflowerblue',
|
|
||||||
title: 'Better background backups',
|
|
||||||
description: 'Rework background backups to be more reliable',
|
|
||||||
getDateLabel: () => 'Planned for 2025',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
done: false,
|
|
||||||
icon: mdiCameraBurst,
|
|
||||||
iconColor: 'rebeccapurple',
|
|
||||||
title: 'Auto stacking',
|
|
||||||
description: 'Auto stack burst photos',
|
|
||||||
getDateLabel: () => 'Planned for 2025',
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
const milestones: Item[] = [
|
|
||||||
{
|
|
||||||
icon: mdiStar,
|
|
||||||
iconColor: 'gold',
|
|
||||||
title: '70,000 Stars',
|
|
||||||
description: 'Reached 70K Stars on GitHub!',
|
|
||||||
getDateLabel: withLanguage(new Date(2025, 6, 9)),
|
|
||||||
},
|
|
||||||
withRelease({
|
|
||||||
icon: mdiTableKey,
|
|
||||||
iconColor: 'gray',
|
|
||||||
title: 'Fine grained access controls',
|
|
||||||
description: 'Granular access controls for api keys',
|
|
||||||
release: 'v1.135.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiCast,
|
|
||||||
iconColor: 'aqua',
|
|
||||||
title: 'Google Cast (web and mobile)',
|
|
||||||
description: 'Cast assets to Google Cast/Chromecast compatible devices',
|
|
||||||
release: 'v1.135.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiLockOutline,
|
|
||||||
iconColor: 'sandybrown',
|
|
||||||
title: 'Private/locked photos',
|
|
||||||
description: 'Private assets with extra protections',
|
|
||||||
release: 'v1.133.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiFolderMultiple,
|
|
||||||
iconColor: 'brown',
|
|
||||||
title: 'Folders view in the mobile app',
|
|
||||||
description: 'Browse your photos and videos in their folder structure inside the mobile app',
|
|
||||||
release: 'v1.130.0',
|
|
||||||
}),
|
|
||||||
{
|
|
||||||
icon: mdiStar,
|
|
||||||
iconColor: 'gold',
|
|
||||||
title: '60,000 Stars',
|
|
||||||
description: 'Reached 60K Stars on GitHub!',
|
|
||||||
getDateLabel: withLanguage(new Date(2025, 2, 4)),
|
|
||||||
},
|
|
||||||
withRelease({
|
|
||||||
icon: mdiTagFaces,
|
|
||||||
iconColor: 'teal',
|
|
||||||
title: 'Manual face tagging',
|
|
||||||
description:
|
|
||||||
'Manually tag or remove faces in photos and videos, even when automatic detection misses or misidentifies them.',
|
|
||||||
release: 'v1.127.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiLinkEdit,
|
|
||||||
iconColor: 'crimson',
|
|
||||||
title: 'Automatic URL switching',
|
|
||||||
description: 'The mobile app now supports automatic switching between different server URLs',
|
|
||||||
release: 'v1.122.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiMovieOpenPlayOutline,
|
|
||||||
iconColor: 'darksalmon',
|
|
||||||
title: 'Native video player',
|
|
||||||
description: 'HDR videos are now fully supported using the Immich native video player',
|
|
||||||
release: 'v1.122.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiDatabaseOutline,
|
|
||||||
iconColor: 'brown',
|
|
||||||
title: 'Automatic database dumps',
|
|
||||||
description: 'Database dumps are now integrated into the Immich server',
|
|
||||||
release: 'v1.120.0',
|
|
||||||
}),
|
|
||||||
{
|
|
||||||
icon: mdiStar,
|
|
||||||
iconColor: 'gold',
|
|
||||||
title: '50,000 Stars',
|
|
||||||
description: 'Reached 50K Stars on GitHub!',
|
|
||||||
getDateLabel: withLanguage(new Date(2024, 10, 1)),
|
|
||||||
},
|
|
||||||
withRelease({
|
|
||||||
icon: mdiFaceRecognition,
|
|
||||||
title: 'Metadata Face Import',
|
|
||||||
description: 'Read face metadata in Digikam format during import',
|
|
||||||
release: 'v1.114.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiTagMultiple,
|
|
||||||
iconColor: 'orange',
|
|
||||||
title: 'Tags',
|
|
||||||
description: 'Tag your photos and videos',
|
|
||||||
release: 'v1.113.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiFolderSync,
|
|
||||||
iconColor: 'green',
|
|
||||||
title: 'Album sync (mobile)',
|
|
||||||
description: 'Sync or mirror an album from your phone to the Immich server',
|
|
||||||
release: 'v1.113.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiFolderMultiple,
|
|
||||||
iconColor: 'brown',
|
|
||||||
title: 'Folders view',
|
|
||||||
description: 'Browse your photos and videos in their folder structure',
|
|
||||||
release: 'v1.113.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiPalette,
|
|
||||||
title: 'Theming (mobile)',
|
|
||||||
description: 'Pick a primary color for the mobile app',
|
|
||||||
release: 'v1.112.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiStarOutline,
|
|
||||||
iconColor: 'gold',
|
|
||||||
title: 'Star rating',
|
|
||||||
description: 'Rate your photos and videos',
|
|
||||||
release: 'v1.112.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiCrop,
|
|
||||||
iconColor: 'royalblue',
|
|
||||||
title: 'Editor (mobile)',
|
|
||||||
description: 'Crop and rotate on mobile',
|
|
||||||
release: 'v1.111.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiMap,
|
|
||||||
iconColor: 'green',
|
|
||||||
title: 'Deploy tiles.immich.cloud',
|
|
||||||
description: 'Dedicated tile server for Immich',
|
|
||||||
release: 'v1.111.0',
|
|
||||||
}),
|
|
||||||
{
|
|
||||||
icon: mdiStar,
|
|
||||||
iconColor: 'gold',
|
|
||||||
title: '40,000 Stars',
|
|
||||||
description: 'Reached 40K Stars on GitHub!',
|
|
||||||
getDateLabel: withLanguage(new Date(2024, 6, 21)),
|
|
||||||
},
|
|
||||||
withRelease({
|
|
||||||
icon: mdiShare,
|
|
||||||
title: 'Deploy my.immich.app',
|
|
||||||
description: 'Url router for immich links',
|
|
||||||
release: 'v1.109.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiLicense,
|
|
||||||
iconColor: 'gold',
|
|
||||||
title: 'Supporter Badge',
|
|
||||||
description: 'The option to buy Immich to support its development!',
|
|
||||||
release: 'v1.109.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiHistory,
|
|
||||||
title: 'Versioned documentation',
|
|
||||||
description: 'View documentation as it was at the time of past releases',
|
|
||||||
release: 'v1.106.1',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiWeb,
|
|
||||||
iconColor: 'royalblue',
|
|
||||||
title: 'Web translations',
|
|
||||||
description: 'Translate the web application to multiple languages',
|
|
||||||
release: 'v1.106.1',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiContentDuplicate,
|
|
||||||
title: 'Similar image detection',
|
|
||||||
description: "Detect duplicate assets that aren't exactly identical",
|
|
||||||
release: 'v1.106.1',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiVectorCombine,
|
|
||||||
title: 'Container consolidation',
|
|
||||||
description:
|
|
||||||
'The microservices container can be run as a worker within the server image, allowing us to remove it from the default stack.',
|
|
||||||
release: 'v1.106.1',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiPencil,
|
|
||||||
iconColor: 'saddlebrown',
|
|
||||||
title: 'Read-write external libraries',
|
|
||||||
description: 'Edit, update, and delete files in external libraries',
|
|
||||||
release: 'v1.104.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiEmailOutline,
|
|
||||||
iconColor: 'crimson',
|
|
||||||
title: 'Email notifications',
|
|
||||||
description: 'Send emails for important events',
|
|
||||||
release: 'v1.104.0',
|
|
||||||
}),
|
|
||||||
{
|
|
||||||
icon: mdiHandshakeOutline,
|
|
||||||
iconColor: 'magenta',
|
|
||||||
title: 'Immich joins FUTO!',
|
|
||||||
description: 'Joined Futo and Immich core team goes full-time',
|
|
||||||
getDateLabel: withLanguage(new Date(2024, 4, 1)),
|
|
||||||
},
|
|
||||||
withRelease({
|
|
||||||
icon: mdiEyeOutline,
|
|
||||||
iconColor: 'darkslategray',
|
|
||||||
title: 'Read-only albums',
|
|
||||||
description: 'Share albums with other users as read-only',
|
|
||||||
release: 'v1.103.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiBookmark,
|
|
||||||
iconColor: 'orangered',
|
|
||||||
title: 'Permanent URLs (Web)',
|
|
||||||
description: 'Assets on the web now have permanent URLs',
|
|
||||||
release: 'v1.103.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiStar,
|
|
||||||
iconColor: 'gold',
|
|
||||||
title: '30,000 Stars',
|
|
||||||
description: 'Reached 30K Stars on GitHub!',
|
|
||||||
release: 'v1.102.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiChartBoxMultipleOutline,
|
|
||||||
iconColor: 'mediumvioletred',
|
|
||||||
title: 'OpenTelemetry metrics',
|
|
||||||
description: 'OpenTelemetry metrics for local evaluation and advanced debugging',
|
|
||||||
release: 'v1.99.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: 'immich',
|
|
||||||
title: 'New logo',
|
|
||||||
description: 'Immich got its new logo',
|
|
||||||
release: 'v1.98.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiMagnifyScan,
|
|
||||||
title: 'Search enhancement with advanced filters',
|
|
||||||
description: 'Advanced search with filters by date, location and more',
|
|
||||||
release: 'v1.95.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiScaleBalance,
|
|
||||||
iconColor: 'gold',
|
|
||||||
title: 'AGPL License',
|
|
||||||
description: 'Immich switches to AGPLv3 license',
|
|
||||||
release: 'v1.95.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiEyeRefreshOutline,
|
|
||||||
title: 'Library watching',
|
|
||||||
description: 'Automatically import files in external libraries when the operating system detects changes.',
|
|
||||||
release: 'v1.94.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiExpansionCard,
|
|
||||||
iconColor: 'green',
|
|
||||||
title: 'GPU acceleration for machine-learning',
|
|
||||||
description: 'Hardware acceleration support for Nvidia and Intel devices through CUDA and OpenVINO.',
|
|
||||||
release: 'v1.94.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiAccountGroupOutline,
|
|
||||||
iconColor: 'gray',
|
|
||||||
title: '250 unique contributors',
|
|
||||||
description: '250 amazing people contributed to Immich',
|
|
||||||
release: 'v1.93.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiMatrix,
|
|
||||||
title: 'Search improvement with pgvecto.rs',
|
|
||||||
description: 'Moved the search from typesense to pgvecto.rs',
|
|
||||||
release: 'v1.91.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiPencil,
|
|
||||||
iconColor: 'saddlebrown',
|
|
||||||
title: 'Edit metadata',
|
|
||||||
description: "Edit a photo or video's date, time, hours, timezone, and GPS information",
|
|
||||||
release: 'v1.90.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiVectorCombine,
|
|
||||||
title: 'Container consolidation',
|
|
||||||
description:
|
|
||||||
'The serving of the web app is merged into the server image, allowing us to remove two containers from the stack.',
|
|
||||||
release: 'v1.88.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiBash,
|
|
||||||
iconColor: 'gray',
|
|
||||||
title: 'CLI v2',
|
|
||||||
description: 'Version 2 of the Immich CLI is released, replacing the legacy v1 CLI.',
|
|
||||||
release: 'v1.88.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiForum,
|
|
||||||
iconColor: 'dodgerblue',
|
|
||||||
title: 'Activity',
|
|
||||||
description: 'Comment a photo or a video in a shared album',
|
|
||||||
release: 'v1.84.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiStar,
|
|
||||||
iconColor: 'gold',
|
|
||||||
title: '20,000 Stars',
|
|
||||||
description: 'Reached 20K Stars on GitHub!',
|
|
||||||
release: 'v1.83.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiCameraBurst,
|
|
||||||
iconColor: 'rebeccapurple',
|
|
||||||
title: 'Stack assets',
|
|
||||||
description: 'Manual asset stacking for grouping and hiding related assets in the main timeline.',
|
|
||||||
release: 'v1.83.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiPalette,
|
|
||||||
iconColor: 'magenta',
|
|
||||||
title: 'Custom theme',
|
|
||||||
description: 'Apply your custom CSS for modifying fonts, colors, and styles in the web application.',
|
|
||||||
release: 'v1.83.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiTrashCanOutline,
|
|
||||||
iconColor: 'brown',
|
|
||||||
title: 'Trash feature',
|
|
||||||
description: 'Trash, restore from trash, and automatically empty the recycle bin after 30 days.',
|
|
||||||
release: 'v1.82.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiBookSearchOutline,
|
|
||||||
title: 'External libraries',
|
|
||||||
description: 'Automatically import media into Immich based on imports paths and ignore patterns.',
|
|
||||||
release: 'v1.79.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiMap,
|
|
||||||
iconColor: 'darksalmon',
|
|
||||||
title: 'Map view (mobile)',
|
|
||||||
description: 'Heat map implementation in the mobile app.',
|
|
||||||
release: 'v1.76.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiFile,
|
|
||||||
iconColor: 'lightblue',
|
|
||||||
title: 'Configuration file',
|
|
||||||
description: 'Auto-configure an Immich installation via a configuration file.',
|
|
||||||
release: 'v1.75.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiMonitor,
|
|
||||||
iconColor: 'darkcyan',
|
|
||||||
title: 'Slideshow mode (web)',
|
|
||||||
description: 'Start a full-screen slideshow from an Album on the web.',
|
|
||||||
release: 'v1.75.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiServer,
|
|
||||||
iconColor: 'lightskyblue',
|
|
||||||
title: 'Hardware transcoding',
|
|
||||||
description: 'Support hardware acceleration (QuickSync, VAAPI, and Nvidia) for video transcoding.',
|
|
||||||
release: 'v1.72.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiImageAlbum,
|
|
||||||
iconColor: 'olivedrab',
|
|
||||||
title: 'View albums via time buckets',
|
|
||||||
description: 'Upgrade albums to use time buckets, an optimized virtual viewport.',
|
|
||||||
release: 'v1.72.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiImageAlbum,
|
|
||||||
iconColor: 'olivedrab',
|
|
||||||
title: 'Album description',
|
|
||||||
description: 'Save an album description.',
|
|
||||||
release: 'v1.72.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiRotate360,
|
|
||||||
title: '360° Photos (web)',
|
|
||||||
description: 'View 360° Photos on the web.',
|
|
||||||
release: 'v1.71.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiMotionPlayOutline,
|
|
||||||
title: 'Android motion photos',
|
|
||||||
description: 'Add support for Android Motion Photos.',
|
|
||||||
release: 'v1.69.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiFaceManOutline,
|
|
||||||
iconColor: 'mistyrose',
|
|
||||||
title: 'Show/hide faces',
|
|
||||||
description: 'Add the options to show or hide faces.',
|
|
||||||
release: 'v1.68.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiMerge,
|
|
||||||
iconColor: 'forestgreen',
|
|
||||||
title: 'Merge faces',
|
|
||||||
description: 'Add the ability to merge multiple faces together.',
|
|
||||||
release: 'v1.67.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiImage,
|
|
||||||
iconColor: 'rebeccapurple',
|
|
||||||
title: 'Feature photo',
|
|
||||||
description: 'Add the option to change the feature photo for a person.',
|
|
||||||
release: 'v1.66.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiKeyboardSettingsOutline,
|
|
||||||
iconColor: 'darkslategray',
|
|
||||||
title: 'Multi-select via SHIFT',
|
|
||||||
description: 'Add the option to multi-select while holding SHIFT.',
|
|
||||||
release: 'v1.66.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiImageMultipleOutline,
|
|
||||||
iconColor: 'rebeccapurple',
|
|
||||||
title: 'Memories (mobile)',
|
|
||||||
description: 'View "On this day..." memories in the mobile app.',
|
|
||||||
release: 'v1.65.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiFaceMan,
|
|
||||||
iconColor: 'mistyrose',
|
|
||||||
title: 'Facial recognition (mobile)',
|
|
||||||
description: 'View detected faces in the mobile app.',
|
|
||||||
release: 'v1.63.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiImageMultipleOutline,
|
|
||||||
iconColor: 'rebeccapurple',
|
|
||||||
title: 'Memories (web)',
|
|
||||||
description: 'View pictures taken in past years on this day on the web.',
|
|
||||||
release: 'v1.61.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiCollage,
|
|
||||||
iconColor: 'deeppink',
|
|
||||||
title: 'Justified layout (web)',
|
|
||||||
description: 'Implement justified layout (collage) on the web.',
|
|
||||||
release: 'v1.61.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiRaw,
|
|
||||||
title: 'RAW file formats',
|
|
||||||
description: 'Support for RAW file formats.',
|
|
||||||
release: 'v1.61.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiShareAll,
|
|
||||||
iconColor: 'darkturquoise',
|
|
||||||
title: 'Partner sharing (mobile)',
|
|
||||||
description: 'View shared partner photos in the mobile app.',
|
|
||||||
release: 'v1.58.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiFile,
|
|
||||||
iconColor: 'lightblue',
|
|
||||||
title: 'XMP sidecar',
|
|
||||||
description: 'Attach XMP sidecar files to assets.',
|
|
||||||
release: 'v1.58.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiFolder,
|
|
||||||
iconColor: 'brown',
|
|
||||||
title: 'Custom storage label',
|
|
||||||
description: 'Replace the user UUID in the storage template with a custom label.',
|
|
||||||
release: 'v1.57.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiShareCircle,
|
|
||||||
title: 'Partner sharing',
|
|
||||||
description: 'Share your entire collection with another user.',
|
|
||||||
release: 'v1.56.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiFaceMan,
|
|
||||||
iconColor: 'mistyrose',
|
|
||||||
title: 'Facial recognition',
|
|
||||||
description: 'Detect faces in pictures and cluster them together as people, which can be named.',
|
|
||||||
release: 'v1.56.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiMap,
|
|
||||||
iconColor: 'darksalmon',
|
|
||||||
title: 'Map view (web)',
|
|
||||||
description: 'View a global map, with clusters of photos based on corresponding GPS data.',
|
|
||||||
release: 'v1.55.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiDevices,
|
|
||||||
iconColor: 'slategray',
|
|
||||||
title: 'Manage auth devices',
|
|
||||||
description: 'Manage logged-in devices and revoke access from User Settings.',
|
|
||||||
release: 'v1.55.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiStar,
|
|
||||||
iconColor: 'gold',
|
|
||||||
title: '10,000 Stars',
|
|
||||||
description: 'Reached 10K stars on GitHub!',
|
|
||||||
release: 'v1.54.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiText,
|
|
||||||
title: 'Asset descriptions',
|
|
||||||
description: 'Save an asset description',
|
|
||||||
release: 'v1.54.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiArchiveOutline,
|
|
||||||
title: 'Archiving',
|
|
||||||
description: 'Remove assets from the main timeline by archiving them.',
|
|
||||||
release: 'v1.54.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiDevices,
|
|
||||||
iconColor: 'slategray',
|
|
||||||
title: 'Responsive web app',
|
|
||||||
description: 'Optimize the web app for small screen.',
|
|
||||||
release: 'v1.54.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiFileSearch,
|
|
||||||
iconColor: 'brown',
|
|
||||||
title: 'Search by metadata',
|
|
||||||
description: 'Search images by filename, description, tagged people, make, model, and other metadata.',
|
|
||||||
release: 'v1.52.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiImageSearch,
|
|
||||||
iconColor: 'rebeccapurple',
|
|
||||||
title: 'CLIP search',
|
|
||||||
description: 'Search images with free-form text like "Sunset at the beach".',
|
|
||||||
release: 'v1.51.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiMagnify,
|
|
||||||
iconColor: 'lightblue',
|
|
||||||
title: 'Explore page',
|
|
||||||
description: 'View tagged places, object, and people.',
|
|
||||||
release: 'v1.51.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiAppleIos,
|
|
||||||
title: 'iOS background uploads',
|
|
||||||
description: 'Automatically backup pictures in the background on iOS.',
|
|
||||||
release: 'v1.48.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiMotionPlayOutline,
|
|
||||||
title: 'Auto-Link live photos',
|
|
||||||
description: 'Automatically link live photos, even when uploaded as separate files.',
|
|
||||||
release: 'v1.48.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiMaterialDesign,
|
|
||||||
iconColor: 'blue',
|
|
||||||
title: 'Material design 3 (mobile)',
|
|
||||||
description: 'Upgrade the mobile app to Material Design 3.',
|
|
||||||
release: 'v1.47.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiHeart,
|
|
||||||
iconColor: 'red',
|
|
||||||
title: 'Favorites (mobile)',
|
|
||||||
description: 'Show favorites on the mobile app.',
|
|
||||||
release: 'v1.46.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiCakeVariant,
|
|
||||||
iconColor: 'deeppink',
|
|
||||||
title: 'Immich turns 1',
|
|
||||||
description: 'Immich is officially one year old.',
|
|
||||||
release: 'v1.43.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiHeart,
|
|
||||||
iconColor: 'red',
|
|
||||||
title: 'Favorites page (web)',
|
|
||||||
description: 'Favorite and view favorites on the web.',
|
|
||||||
release: 'v1.43.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiShareCircle,
|
|
||||||
title: 'Public share links',
|
|
||||||
description: 'Share photos and albums publicly via a shared link.',
|
|
||||||
release: 'v1.41.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiFolder,
|
|
||||||
iconColor: 'lightblue',
|
|
||||||
title: 'User-defined storage structure',
|
|
||||||
description: 'Support custom storage structures.',
|
|
||||||
release: 'v1.39.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiMotionPlayOutline,
|
|
||||||
title: 'iOS live photos',
|
|
||||||
description: 'Backup and display iOS Live Photos.',
|
|
||||||
release: 'v1.36.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiSecurity,
|
|
||||||
iconColor: 'green',
|
|
||||||
title: 'OAuth integration',
|
|
||||||
description: 'Support OAuth2 and OIDC capable identity providers.',
|
|
||||||
release: 'v1.36.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiWeb,
|
|
||||||
iconColor: 'royalblue',
|
|
||||||
title: 'Documentation site',
|
|
||||||
description: 'Release an official documentation website.',
|
|
||||||
release: 'v1.33.1',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiThemeLightDark,
|
|
||||||
iconColor: 'slategray',
|
|
||||||
title: 'Dark mode (web)',
|
|
||||||
description: 'Dark mode on the web.',
|
|
||||||
release: 'v1.32.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiPanVertical,
|
|
||||||
title: 'Virtual scrollbar (web)',
|
|
||||||
description: 'View the main timeline with a virtual scrollbar, allowing to jump to any point in time, instantly.',
|
|
||||||
release: 'v1.27.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiCheckAll,
|
|
||||||
iconColor: 'green',
|
|
||||||
title: 'Checksum duplication check',
|
|
||||||
description: 'Enforce per user sha1 checksum uniqueness.',
|
|
||||||
release: 'v1.27.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiAndroid,
|
|
||||||
iconColor: 'greenyellow',
|
|
||||||
title: 'Android background backup',
|
|
||||||
description: 'Automatic backup in the background on Android.',
|
|
||||||
release: 'v1.24.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiAccountGroup,
|
|
||||||
iconColor: 'gray',
|
|
||||||
title: 'Admin portal',
|
|
||||||
description: 'Manage users and admin settings from the web.',
|
|
||||||
release: 'v1.10.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiShareCircle,
|
|
||||||
title: 'Album sharing',
|
|
||||||
description: 'Share albums with other users.',
|
|
||||||
release: 'v1.7.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiTag,
|
|
||||||
iconColor: 'coral',
|
|
||||||
title: 'Image tagging',
|
|
||||||
description: 'Tag images with custom values.',
|
|
||||||
release: 'v1.7.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiImage,
|
|
||||||
iconColor: 'rebeccapurple',
|
|
||||||
title: 'View exif',
|
|
||||||
description: 'View metadata about assets.',
|
|
||||||
release: 'v1.3.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiCheckboxMarked,
|
|
||||||
iconColor: 'green',
|
|
||||||
title: 'Multi select',
|
|
||||||
description: 'Select and execute actions on multiple assets at the same time.',
|
|
||||||
release: 'v1.2.0',
|
|
||||||
}),
|
|
||||||
withRelease({
|
|
||||||
icon: mdiVideo,
|
|
||||||
iconColor: 'slategray',
|
|
||||||
title: 'Video player',
|
|
||||||
description: 'Play videos in the web and on mobile.',
|
|
||||||
release: 'v1.2.0',
|
|
||||||
}),
|
|
||||||
{
|
|
||||||
icon: mdiPartyPopper,
|
|
||||||
iconColor: 'deeppink',
|
|
||||||
title: 'First commit',
|
|
||||||
description: 'First commit on GitHub, Immich is born.',
|
|
||||||
getDateLabel: withLanguage(new Date(2022, 1, 3)),
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
export default function MilestonePage(): JSX.Element {
|
|
||||||
return (
|
|
||||||
<Layout title={title} description={description}>
|
|
||||||
<section className="my-8">
|
|
||||||
<h1 className="md:text-6xl text-center mb-10 text-immich-primary dark:text-immich-dark-primary px-2">
|
|
||||||
{title}
|
|
||||||
</h1>
|
|
||||||
<p className="text-center text-xl px-2">{description}</p>
|
|
||||||
<div className="flex justify-around mt-8 w-full max-w-full">
|
|
||||||
<Timeline items={[...roadmap, ...milestones]} />
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
</Layout>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
Vendored
-5
@@ -1,5 +0,0 @@
|
|||||||
Policy: https://github.com/immich-app/immich/blob/main/SECURITY.md
|
|
||||||
Contact: mailto:security@immich.app
|
|
||||||
Preferred-Languages: en
|
|
||||||
Expires: 2026-05-01T23:59:00.000Z
|
|
||||||
Canonical: https://immich.app/.well-known/security.txt
|
|
||||||
Vendored
+44
@@ -1,4 +1,48 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"label": "v1.143.1",
|
||||||
|
"url": "https://v1.143.1.archive.immich.app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "v1.143.0",
|
||||||
|
"url": "https://v1.143.0.archive.immich.app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "v1.142.1",
|
||||||
|
"url": "https://v1.142.1.archive.immich.app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "v1.142.0",
|
||||||
|
"url": "https://v1.142.0.archive.immich.app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "v1.141.1",
|
||||||
|
"url": "https://v1.141.1.archive.immich.app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "v1.141.0",
|
||||||
|
"url": "https://v1.141.0.archive.immich.app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "v1.140.1",
|
||||||
|
"url": "https://v1.140.1.archive.immich.app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "v1.140.0",
|
||||||
|
"url": "https://v1.140.0.archive.immich.app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "v1.139.4",
|
||||||
|
"url": "https://v1.139.4.archive.immich.app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "v1.139.3",
|
||||||
|
"url": "https://v1.139.3.archive.immich.app"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "v1.139.2",
|
||||||
|
"url": "https://v1.139.2.archive.immich.app"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"label": "v1.138.1",
|
"label": "v1.138.1",
|
||||||
"url": "https://v1.138.1.archive.immich.app"
|
"url": "https://v1.138.1.archive.immich.app"
|
||||||
|
|||||||
@@ -3,3 +3,4 @@ node_modules/
|
|||||||
/playwright-report/
|
/playwright-report/
|
||||||
/blob-report/
|
/blob-report/
|
||||||
/playwright/.cache/
|
/playwright/.cache/
|
||||||
|
/dist
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
22.18.0
|
22.19.0
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ services:
|
|||||||
image: redis:6.2-alpine@sha256:7fe72c486b910f6b1a9769c937dad5d63648ddee82e056f47417542dd40825bb
|
image: redis:6.2-alpine@sha256:7fe72c486b910f6b1a9769c937dad5d63648ddee82e056f47417542dd40825bb
|
||||||
|
|
||||||
database:
|
database:
|
||||||
image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0@sha256:0e763a2383d56f90364fcd72767ac41400cd30d2627f407f7e7960c9f1923c21
|
image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0@sha256:11ced39d65a92a54d12890ced6a26cc2003f92697d6f0d4d944b98459dba7138
|
||||||
command: -c fsync=off -c shared_preload_libraries=vchord.so -c config_file=/var/lib/postgresql/data/postgresql.conf
|
command: -c fsync=off -c shared_preload_libraries=vchord.so -c config_file=/var/lib/postgresql/data/postgresql.conf
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_PASSWORD: postgres
|
POSTGRES_PASSWORD: postgres
|
||||||
|
|||||||
Generated
-7419
File diff suppressed because it is too large
Load Diff
+4
-6
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "immich-e2e",
|
"name": "immich-e2e",
|
||||||
"version": "1.138.1",
|
"version": "1.143.1",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
@@ -19,19 +19,17 @@
|
|||||||
"author": "",
|
"author": "",
|
||||||
"license": "GNU Affero General Public License version 3",
|
"license": "GNU Affero General Public License version 3",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/eslintrc": "^3.1.0",
|
|
||||||
"@eslint/js": "^9.8.0",
|
"@eslint/js": "^9.8.0",
|
||||||
"@immich/cli": "file:../cli",
|
"@immich/cli": "file:../cli",
|
||||||
"@immich/sdk": "file:../open-api/typescript-sdk",
|
"@immich/sdk": "file:../open-api/typescript-sdk",
|
||||||
"@playwright/test": "^1.44.1",
|
"@playwright/test": "^1.44.1",
|
||||||
"@socket.io/component-emitter": "^3.1.2",
|
"@socket.io/component-emitter": "^3.1.2",
|
||||||
"@types/luxon": "^3.4.2",
|
"@types/luxon": "^3.4.2",
|
||||||
"@types/node": "^22.17.0",
|
"@types/node": "^22.18.1",
|
||||||
"@types/oidc-provider": "^9.0.0",
|
"@types/oidc-provider": "^9.0.0",
|
||||||
"@types/pg": "^8.15.1",
|
"@types/pg": "^8.15.1",
|
||||||
"@types/pngjs": "^6.0.4",
|
"@types/pngjs": "^6.0.4",
|
||||||
"@types/supertest": "^6.0.2",
|
"@types/supertest": "^6.0.2",
|
||||||
"@vitest/coverage-v8": "^3.0.0",
|
|
||||||
"eslint": "^9.14.0",
|
"eslint": "^9.14.0",
|
||||||
"eslint-config-prettier": "^10.1.8",
|
"eslint-config-prettier": "^10.1.8",
|
||||||
"eslint-plugin-prettier": "^5.1.3",
|
"eslint-plugin-prettier": "^5.1.3",
|
||||||
@@ -45,7 +43,7 @@
|
|||||||
"pngjs": "^7.0.0",
|
"pngjs": "^7.0.0",
|
||||||
"prettier": "^3.2.5",
|
"prettier": "^3.2.5",
|
||||||
"prettier-plugin-organize-imports": "^4.0.0",
|
"prettier-plugin-organize-imports": "^4.0.0",
|
||||||
"sharp": "^0.34.0",
|
"sharp": "^0.34.3",
|
||||||
"socket.io-client": "^4.7.4",
|
"socket.io-client": "^4.7.4",
|
||||||
"supertest": "^7.0.0",
|
"supertest": "^7.0.0",
|
||||||
"typescript": "^5.3.3",
|
"typescript": "^5.3.3",
|
||||||
@@ -54,6 +52,6 @@
|
|||||||
"vitest": "^3.0.0"
|
"vitest": "^3.0.0"
|
||||||
},
|
},
|
||||||
"volta": {
|
"volta": {
|
||||||
"node": "22.18.0"
|
"node": "22.19.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1466,10 +1466,10 @@ describe('/asset', () => {
|
|||||||
expectedDate: '2023-04-04T04:00:00.000Z',
|
expectedDate: '2023-04-04T04:00:00.000Z',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'CreateDate when DateTimeOriginal missing',
|
name: 'CreationDate when DateTimeOriginal missing',
|
||||||
exifData: {
|
exifData: {
|
||||||
CreateDate: '2023:05:05 05:00:00', // TESTABLE
|
CreationDate: '2023:05:05 05:00:00', // TESTABLE
|
||||||
CreationDate: '2023:07:07 07:00:00', // TESTABLE
|
CreateDate: '2023:07:07 07:00:00', // TESTABLE
|
||||||
GPSDateTime: '2023:10:10 10:00:00', // TESTABLE
|
GPSDateTime: '2023:10:10 10:00:00', // TESTABLE
|
||||||
},
|
},
|
||||||
expectedDate: '2023-05-05T05:00:00.000Z',
|
expectedDate: '2023-05-05T05:00:00.000Z',
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ describe('/partners', () => {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
createPartner({ id: user2.userId }, { headers: asBearerAuth(user1.accessToken) }),
|
createPartner({ partnerCreateDto: { sharedWithId: user2.userId } }, { headers: asBearerAuth(user1.accessToken) }),
|
||||||
createPartner({ id: user1.userId }, { headers: asBearerAuth(user2.accessToken) }),
|
createPartner({ partnerCreateDto: { sharedWithId: user1.userId } }, { headers: asBearerAuth(user2.accessToken) }),
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -79,7 +79,7 @@ export const tempDir = tmpdir();
|
|||||||
export const asBearerAuth = (accessToken: string) => ({ Authorization: `Bearer ${accessToken}` });
|
export const asBearerAuth = (accessToken: string) => ({ Authorization: `Bearer ${accessToken}` });
|
||||||
export const asKeyAuth = (key: string) => ({ 'x-api-key': key });
|
export const asKeyAuth = (key: string) => ({ 'x-api-key': key });
|
||||||
export const immichCli = (args: string[]) =>
|
export const immichCli = (args: string[]) =>
|
||||||
executeCommand('node', ['node_modules/.bin/immich', '-d', `/${tempDir}/immich/`, ...args]).promise;
|
executeCommand('pnpm', ['exec', 'immich', '-d', `/${tempDir}/immich/`, ...args], { cwd: '../cli' }).promise;
|
||||||
export const immichAdmin = (args: string[]) =>
|
export const immichAdmin = (args: string[]) =>
|
||||||
executeCommand('docker', ['exec', '-i', 'immich-e2e-server', '/bin/bash', '-c', `immich-admin ${args.join(' ')}`]);
|
executeCommand('docker', ['exec', '-i', 'immich-e2e-server', '/bin/bash', '-c', `immich-admin ${args.join(' ')}`]);
|
||||||
export const specialCharStrings = ["'", '"', ',', '{', '}', '*'];
|
export const specialCharStrings = ["'", '"', ',', '{', '}', '*'];
|
||||||
@@ -462,7 +462,8 @@ export const utils = {
|
|||||||
updateLibrary: (accessToken: string, id: string, dto: UpdateLibraryDto) =>
|
updateLibrary: (accessToken: string, id: string, dto: UpdateLibraryDto) =>
|
||||||
updateLibrary({ id, updateLibraryDto: dto }, { headers: asBearerAuth(accessToken) }),
|
updateLibrary({ id, updateLibraryDto: dto }, { headers: asBearerAuth(accessToken) }),
|
||||||
|
|
||||||
createPartner: (accessToken: string, id: string) => createPartner({ id }, { headers: asBearerAuth(accessToken) }),
|
createPartner: (accessToken: string, id: string) =>
|
||||||
|
createPartner({ partnerCreateDto: { sharedWithId: id } }, { headers: asBearerAuth(accessToken) }),
|
||||||
|
|
||||||
updateMyPreferences: (accessToken: string, userPreferencesUpdateDto: UserPreferencesUpdateDto) =>
|
updateMyPreferences: (accessToken: string, userPreferencesUpdateDto: UserPreferencesUpdateDto) =>
|
||||||
updateMyPreferences({ userPreferencesUpdateDto }, { headers: asBearerAuth(accessToken) }),
|
updateMyPreferences({ userPreferencesUpdateDto }, { headers: asBearerAuth(accessToken) }),
|
||||||
|
|||||||
+32
-6
@@ -14,6 +14,7 @@
|
|||||||
"add_a_location": "Voeg 'n ligging by",
|
"add_a_location": "Voeg 'n ligging by",
|
||||||
"add_a_name": "Voeg 'n naam by",
|
"add_a_name": "Voeg 'n naam by",
|
||||||
"add_a_title": "Voeg 'n titel by",
|
"add_a_title": "Voeg 'n titel by",
|
||||||
|
"add_birthday": "Voeg 'n verjaarsdag by",
|
||||||
"add_endpoint": "Voeg Koppelvlakpunt by",
|
"add_endpoint": "Voeg Koppelvlakpunt by",
|
||||||
"add_exclusion_pattern": "Voeg uitsgluitingspatrone by",
|
"add_exclusion_pattern": "Voeg uitsgluitingspatrone by",
|
||||||
"add_import_path": "Voeg invoerpad by",
|
"add_import_path": "Voeg invoerpad by",
|
||||||
@@ -27,6 +28,8 @@
|
|||||||
"add_to_album": "Voeg na album",
|
"add_to_album": "Voeg na album",
|
||||||
"add_to_album_bottom_sheet_added": "By {album} bygevoeg",
|
"add_to_album_bottom_sheet_added": "By {album} bygevoeg",
|
||||||
"add_to_album_bottom_sheet_already_exists": "Reeds in {album}",
|
"add_to_album_bottom_sheet_already_exists": "Reeds in {album}",
|
||||||
|
"add_to_albums": "Voeg by albums",
|
||||||
|
"add_to_albums_count": "Voeg by ({count}) albums",
|
||||||
"add_to_shared_album": "Voeg toe aan gedeelde album",
|
"add_to_shared_album": "Voeg toe aan gedeelde album",
|
||||||
"add_url": "Voeg URL by",
|
"add_url": "Voeg URL by",
|
||||||
"added_to_archive": "By argief toegevoegd",
|
"added_to_archive": "By argief toegevoegd",
|
||||||
@@ -44,6 +47,11 @@
|
|||||||
"backup_database": "Skep DatastortlÃĒer",
|
"backup_database": "Skep DatastortlÃĒer",
|
||||||
"backup_database_enable_description": "Aktiveer databasisrugsteun",
|
"backup_database_enable_description": "Aktiveer databasisrugsteun",
|
||||||
"backup_keep_last_amount": "Aantal vorige rugsteune om te hou",
|
"backup_keep_last_amount": "Aantal vorige rugsteune om te hou",
|
||||||
|
"backup_onboarding_3_description": "totale kopieÃĢ van jou data, insluitende die oorspronklikke lÃĒers. Dit sluit in 1 kopie op 'n ander perseel en 2 kopieÃĢ om die huidige rekenaar.",
|
||||||
|
"backup_onboarding_description": "'N <backblaze-link>3-2-1 rugsteun strategie</backblaze-link> word sterk aanbeveel om jou data veilig te hou. Hou kopieÃĢ van jou fotos/videos so wel as die Immich databasis vir 'n volledige rugsteun oplossing.",
|
||||||
|
"backup_onboarding_footer": "Vir meer inligting oor hoe om 'n rugsteun kopie van Immich te maak, gaan lees asseblief hierdie <link>dokument</link>.",
|
||||||
|
"backup_onboarding_parts_title": "'N 3-2-1 rugsteun sluit in:",
|
||||||
|
"backup_onboarding_title": "Rugsteun kopieÃĢ",
|
||||||
"backup_settings": "Rugsteun instellings",
|
"backup_settings": "Rugsteun instellings",
|
||||||
"backup_settings_description": "Bestuur databasis rugsteun instellings.",
|
"backup_settings_description": "Bestuur databasis rugsteun instellings.",
|
||||||
"cleared_jobs": "Poste gevee vir: {job}",
|
"cleared_jobs": "Poste gevee vir: {job}",
|
||||||
@@ -62,8 +70,8 @@
|
|||||||
"duplicate_detection_job_description": "Begin masjienleer op bates om soortgelyke beelde op te spoor. Maak staat op Smart Search",
|
"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.",
|
"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_management": "Eksterne Biblioteekbestuur",
|
"external_library_management": "Eksterne Biblioteekbestuur",
|
||||||
"face_detection": "Gesig deteksie",
|
"face_detection": "Gesig herkenning",
|
||||||
"face_detection_description": "Detecteer die gesigte in media deur middel van masjienleer. Vir videos word slegs die duimnaelskets oorweeg. âHerlaaiâ (ver)werk al die media weer. âStel terugâ verwyder boonop alle huidige gesigdata. âOnverwerkâ plaas bates in die tou wat nog nie verwerk is nie. Gedekte gesigte sal nÃĄ voltooiing van Gesigdetectie vir Gesigherkenning in die tou geplaas word, om hulle in bestaande of nuwe persone te groepeer.",
|
"face_detection_description": "Identifiseer die gesigte in media deur middel van masjienleer. Vir videos word slegs die duimnaelskets oorweeg. âHerlaaiâ (ver)werk al die media weer. âStel terugâ verwyder alle huidige gesigdata. âOnverwerkâ plaas bates in die tou wat nog nie verwerk is nie. Geidentifiseerde gesigte sal nÃĄ voltooiing van Gesigidentifikasie vir Gesigherkenning in die tou geplaas word, om hulle in bestaande of nuwe persone te groepeer.",
|
||||||
"facial_recognition_job_description": "Groepeer gesigte in mense in. Die stap is vinniger nadat Gesig Deteksie klaar is. \"Herstel\" (her-)groepeer alle gesigte. \"Vermiste\" plaas gesigte in ry wat nie 'n persoon gekoppel het nie.",
|
"facial_recognition_job_description": "Groepeer gesigte in mense in. Die stap is vinniger nadat Gesig Deteksie klaar is. \"Herstel\" (her-)groepeer alle gesigte. \"Vermiste\" plaas gesigte in ry wat nie 'n persoon gekoppel het nie.",
|
||||||
"failed_job_command": "Opdrag {command} het misluk vir werk: {job}",
|
"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.",
|
"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.",
|
||||||
@@ -93,15 +101,33 @@
|
|||||||
"job_status": "Werkstatus",
|
"job_status": "Werkstatus",
|
||||||
"library_created": "Biblioteek geskep: {library}",
|
"library_created": "Biblioteek geskep: {library}",
|
||||||
"library_deleted": "Biblioteek verwyder",
|
"library_deleted": "Biblioteek verwyder",
|
||||||
"library_import_path_description": "Spesifiseer 'n leer om in te neem. Hierdie leer, en al die sub leers, gaan geskandeer for vir prente en videos.",
|
"library_import_path_description": "Spesifiseer 'n leer om in te neem. Hierdie leer, en al die sub leers, gaan deursoek word vir prente en videos.",
|
||||||
"library_scanning": "Periodieke Skandering",
|
"library_scanning": "Periodieke Soek",
|
||||||
"library_scanning_description": "Stel periodieke skandering van biblioteek in",
|
"library_scanning_description": "Stel periodieke deursoek van biblioteek in",
|
||||||
"library_scanning_enable_description": "Aktiveer periodieke biblioteekskandering",
|
"library_scanning_enable_description": "Aktiveer periodieke biblioteekskandering",
|
||||||
"library_settings": "Eksterne Biblioteek",
|
"library_settings": "Eksterne Biblioteek",
|
||||||
|
"library_settings_description": "Eksterne biblioteek verstellings",
|
||||||
|
"library_tasks_description": "Deursoek eksterne biblioteke vir nuwe of veranderde bates",
|
||||||
|
"library_watching_enable_description": "Hou eksterne biblioteke dop vir leer veranderinge",
|
||||||
|
"library_watching_settings": "Biblioteek dop hou (EKSPERIMENTEEL)",
|
||||||
|
"library_watching_settings_description": "Hou automaties dop vir veranderinge",
|
||||||
|
"logging_enable_description": "Aktifeer \"logging\"",
|
||||||
|
"logging_level_description": "Wanneer aktief, watter vlak van \"logs\" om te skep.",
|
||||||
|
"logging_settings": "\"Logs\"",
|
||||||
|
"machine_learning_clip_model": "CLIP model",
|
||||||
|
"machine_learning_duplicate_detection": "Duplikaat herkenning",
|
||||||
|
"machine_learning_duplicate_detection_enabled": "Aktifeer duplikaat herkenning",
|
||||||
|
"machine_learning_enabled": "Aktifeer masjienleer",
|
||||||
|
"machine_learning_facial_recognition": "Gesigsherkenning",
|
||||||
|
"machine_learning_facial_recognition_description": "Herken, identifiseer en groepeer gesigte in fotos",
|
||||||
|
"machine_learning_facial_recognition_model": "Gesigsherkennings model",
|
||||||
|
"machine_learning_facial_recognition_setting": "Aktifeer gesigsherkenning",
|
||||||
|
"machine_learning_max_detection_distance": "Maksimum herkennings afstand",
|
||||||
"map_settings": "Kaart",
|
"map_settings": "Kaart",
|
||||||
"migration_job": "Migrasie",
|
"migration_job": "Migrasie",
|
||||||
"oauth_settings": "OAuth",
|
"oauth_settings": "OAuth",
|
||||||
"transcoding_acceleration_vaapi": "VAAPI"
|
"transcoding_acceleration_vaapi": "VAAPI",
|
||||||
|
"transcoding_preferred_hardware_device": "Verkiesde hardeware"
|
||||||
},
|
},
|
||||||
"administration": "Administrasie",
|
"administration": "Administrasie",
|
||||||
"advanced": "Gevorderde",
|
"advanced": "Gevorderde",
|
||||||
|
|||||||
+96
-17
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"about": "ØšŲ",
|
"about": "ØŲŲŲŲ",
|
||||||
"account": "ØØŗØ§Ø¨",
|
"account": "ØØŗØ§Ø¨",
|
||||||
"account_settings": "ØĨؚداداØĒ Ø§ŲØØŗØ§Ø¨",
|
"account_settings": "ØĨؚداداØĒ Ø§ŲØØŗØ§Ø¨",
|
||||||
"acknowledge": "ØŖŲØ¯ØąŲ ذŲŲ",
|
"acknowledge": "ØŖŲØ¯ØąŲ ذŲŲ",
|
||||||
@@ -14,6 +14,7 @@
|
|||||||
"add_a_location": "ØĨØļØ§ŲØŠ Ų
ŲŲØš",
|
"add_a_location": "ØĨØļØ§ŲØŠ Ų
ŲŲØš",
|
||||||
"add_a_name": "ØĨØļØ§ŲØŠ ØĨØŗŲ
",
|
"add_a_name": "ØĨØļØ§ŲØŠ ØĨØŗŲ
",
|
||||||
"add_a_title": "ØĨØļØ§ŲØŠ ØšŲŲØ§Ų",
|
"add_a_title": "ØĨØļØ§ŲØŠ ØšŲŲØ§Ų",
|
||||||
|
"add_birthday": "ØŖØļŲ ØĒØ§ØąŲØŽ Ø§ŲŲ
ŲŲØ§Ø¯",
|
||||||
"add_endpoint": "اØļŲ ŲŲØˇØŠ ŲŲØ§ŲØŠ",
|
"add_endpoint": "اØļŲ ŲŲØˇØŠ ŲŲØ§ŲØŠ",
|
||||||
"add_exclusion_pattern": "ØĨØļØ§ŲØŠ ŲŲ
Øˇ ØĨØŗØĒØĢŲØ§ØĄ",
|
"add_exclusion_pattern": "ØĨØļØ§ŲØŠ ŲŲ
Øˇ ØĨØŗØĒØĢŲØ§ØĄ",
|
||||||
"add_import_path": "ØĨØļØ§ŲØŠ Ų
ØŗØ§Øą Ø§ŲØĨØŗØĒŲØąØ§Ø¯",
|
"add_import_path": "ØĨØļØ§ŲØŠ Ų
ØŗØ§Øą Ø§ŲØĨØŗØĒŲØąØ§Ø¯",
|
||||||
@@ -25,8 +26,11 @@
|
|||||||
"add_tag": "اØļŲ ØšŲØ§Ų
ØŠ",
|
"add_tag": "اØļŲ ØšŲØ§Ų
ØŠ",
|
||||||
"add_to": "ØĨØļØ§ŲØŠ ØĨŲŲâĻ",
|
"add_to": "ØĨØļØ§ŲØŠ ØĨŲŲâĻ",
|
||||||
"add_to_album": "ØĨØļØ§ŲØŠ ØĨŲŲ ØŖŲØ¨ŲŲ
",
|
"add_to_album": "ØĨØļØ§ŲØŠ ØĨŲŲ ØŖŲØ¨ŲŲ
",
|
||||||
"add_to_album_bottom_sheet_added": "ØĒŲ
ØĒ Ø§ŲØ§ØļØ§ŲØŠ{album}",
|
"add_to_album_bottom_sheet_added": "ØĒŲ
ØĒ Ø§ŲØ§ØļØ§ŲØŠ Ø§ŲŲ {album}",
|
||||||
"add_to_album_bottom_sheet_already_exists": "Ų
ŲØŦŲØ¯ØŠ Ų
ØŗØ¨ŲØ§ {album}",
|
"add_to_album_bottom_sheet_already_exists": "Ų
ŲØŦŲØ¯ Ų
ØŗØ¨ŲØ§ ŲŲ {album}",
|
||||||
|
"add_to_album_toggle": "ØĒبدŲŲ Ø§ŲØĒØØ¯ŲØ¯ ŲŲ{album}",
|
||||||
|
"add_to_albums": "ØĨØļØ§ŲØŠ Ø§ŲŲ Ø§ŲØ¨ŲŲ
اØĒ",
|
||||||
|
"add_to_albums_count": "ØĨØļاŲŲ ØĨŲŲ Ø§ŲØ¨ŲŲ
اØĒ ({count})",
|
||||||
"add_to_shared_album": "ØĨØļØ§ŲØŠ ØĨŲŲ ØŖŲØ¨ŲŲ
Ų
Ø´Ø§ØąŲ",
|
"add_to_shared_album": "ØĨØļØ§ŲØŠ ØĨŲŲ ØŖŲØ¨ŲŲ
Ų
Ø´Ø§ØąŲ",
|
||||||
"add_url": "ØĨØļØ§ŲØŠ ØąØ§Ø¨Øˇ",
|
"add_url": "ØĨØļØ§ŲØŠ ØąØ§Ø¨Øˇ",
|
||||||
"added_to_archive": "ØŖŲØļŲŲØĒ ŲŲØŖØąØ´ŲŲ",
|
"added_to_archive": "ØŖŲØļŲŲØĒ ŲŲØŖØąØ´ŲŲ",
|
||||||
@@ -34,16 +38,23 @@
|
|||||||
"added_to_favorites_count": "ØĒŲ
ØĨØļØ§ŲØŠ {count, number} ØĨŲŲ Ø§ŲŲ
ŲØļŲØ§ØĒ",
|
"added_to_favorites_count": "ØĒŲ
ØĨØļØ§ŲØŠ {count, number} ØĨŲŲ Ø§ŲŲ
ŲØļŲØ§ØĒ",
|
||||||
"admin": {
|
"admin": {
|
||||||
"add_exclusion_pattern_description": "ØĨØļØ§ŲØŠ ØŖŲŲ
Ø§Øˇ Ø§ŲØ§ØŗØĒبؚاد. ŲØ¯ØšŲ
Ø§ŲØĒŲ
ŲŲŲ Ø¨Ø§ØŗØĒ؎داŲ
*Ø **Ø ŲØ. ŲØĒØŦاŲŲ ØŦŲ
ب𠨧ŲŲ
ŲŲØ§ØĒ ŲŲ ØŖŲ Ø¯ŲŲŲ ŲØŗŲ
Ų \"Raw\"Ø Ø§ØŗØĒ؎دŲ
\"**/Raw/**\". ŲØĒØŦاŲŲ ØŦŲ
ب𠨧ŲŲ
ŲŲØ§ØĒ Ø§ŲØĒŲ ØĒŲØĒŲŲ Ø¨Ų \".tif\"Ø Ø§ØŗØĒ؎دŲ
\"**/*.tif\". ŲØĒØŦاŲŲ Ų
ØŗØ§Øą Ų
ØˇŲŲØ Ø§ØŗØĒ؎دŲ
\"/path/to/ignore/**\".",
|
"add_exclusion_pattern_description": "ØĨØļØ§ŲØŠ ØŖŲŲ
Ø§Øˇ Ø§ŲØ§ØŗØĒبؚاد. ŲØ¯ØšŲ
Ø§ŲØĒŲ
ŲŲŲ Ø¨Ø§ØŗØĒ؎داŲ
*Ø **Ø ŲØ. ŲØĒØŦاŲŲ ØŦŲ
ب𠨧ŲŲ
ŲŲØ§ØĒ ŲŲ ØŖŲ Ø¯ŲŲŲ ŲØŗŲ
Ų \"Raw\"Ø Ø§ØŗØĒ؎دŲ
\"**/Raw/**\". ŲØĒØŦاŲŲ ØŦŲ
ب𠨧ŲŲ
ŲŲØ§ØĒ Ø§ŲØĒŲ ØĒŲØĒŲŲ Ø¨Ų \".tif\"Ø Ø§ØŗØĒ؎دŲ
\"**/*.tif\". ŲØĒØŦاŲŲ Ų
ØŗØ§Øą Ų
ØˇŲŲØ Ø§ØŗØĒ؎دŲ
\"/path/to/ignore/**\".",
|
||||||
"admin_user": "Ų
ØŗØĒ؎دŲ
Ų
Ø¯ŲØą",
|
"admin_user": "Ų
ØŗØĒ؎دŲ
Ų
ØŗØ¤ŲŲ",
|
||||||
"asset_offline_description": "ŲŲ
ب𨝠ب°Ø§ Ø§ŲØŖØĩŲ Ø§ŲØŽØ§Øĩ باŲŲ
ŲØĒØ¨ØŠ Ø§ŲØŽØ§ØąØŦŲØŠ Ų
ŲØŦŲØ¯Ųا ØšŲŲ Ø§ŲŲØąØĩ ŲØĒŲ
ŲŲŲŲ ØĨŲŲ ØŗŲØŠ Ø§ŲŲ
ŲŲ
ŲØ§ØĒ. ØĨذا ØĒŲ
ŲŲŲ Ø§ŲŲ
ŲŲ Ø¯Ø§ØŽŲ Ø§ŲŲ
ŲØĒØ¨ØŠØ ŲØĒØŲŲ Ų
Ų Ø§ŲØŦدŲŲ Ø§ŲØ˛Ų
ŲŲ Ø§ŲØŽØ§Øĩ Ø¨Ų ŲŲ
ØšØąŲØŠ Ø§ŲØŖØĩŲ Ø§ŲØŦØ¯ŲØ¯ اŲŲ
ŲØ§Ø¨Ų. ŲØ§ØŗØĒؚاد؊ ŲØ°Ø§ Ø§ŲØŖØĩŲØ ŲØąØŦŲ Ø§ŲØĒØŖŲد Ų
Ų ØĨŲ
ŲØ§ŲŲØŠ Ø§ŲŲØĩŲŲ ØĨŲŲ Ų
ØŗØ§Øą اŲŲ
ŲŲ ØŖØ¯ŲØ§Ų Ø¨ŲØ§ØŗØˇØŠ Immich ŲŲ
Ų ØĢŲ
ŲŲ
بŲ
ØŗØ Ø§ŲŲ
ŲØĒØ¨ØŠ.",
|
"asset_offline_description": "ŲŲ
ب𨝠ب°Ø§ Ø§ŲØŖØĩŲ Ø§ŲØŽØ§Øĩ باŲŲ
ŲØĒØ¨ØŠ Ø§ŲØŽØ§ØąØŦŲØŠ Ų
ŲØŦŲØ¯Ųا ØšŲŲ Ø§ŲŲØąØĩ ŲØĒŲ
ŲŲŲŲ ØĨŲŲ ØŗŲØŠ Ø§ŲŲ
ŲŲ
ŲØ§ØĒ. ØĨذا ØĒŲ
ŲŲŲ Ø§ŲŲ
ŲŲ Ø¯Ø§ØŽŲ Ø§ŲŲ
ŲØĒØ¨ØŠØ ŲØĒØŲŲ Ų
Ų Ø§ŲØŦدŲŲ Ø§ŲØ˛Ų
ŲŲ Ø§ŲØŽØ§Øĩ Ø¨Ų ŲŲ
ØšØąŲØŠ Ø§ŲØŖØĩŲ Ø§ŲØŦØ¯ŲØ¯ اŲŲ
ŲØ§Ø¨Ų. ŲØ§ØŗØĒؚاد؊ ŲØ°Ø§ Ø§ŲØŖØĩŲØ ŲØąØŦŲ Ø§ŲØĒØŖŲد Ų
Ų ØĨŲ
ŲØ§ŲŲØŠ Ø§ŲŲØĩŲŲ ØĨŲŲ Ų
ØŗØ§Øą اŲŲ
ŲŲ ØŖØ¯ŲØ§Ų Ø¨ŲØ§ØŗØˇØŠ Immich ŲŲ
Ų ØĢŲ
ŲŲ
بŲ
ØŗØ Ø§ŲŲ
ŲØĒØ¨ØŠ.",
|
||||||
"authentication_settings": "ØĨؚداداØĒ اŲŲ
ØĩØ§Ø¯ŲØŠ",
|
"authentication_settings": "ØĨؚداداØĒ اŲŲ
ØĩØ§Ø¯ŲØŠ",
|
||||||
"authentication_settings_description": "ØĨØ¯Ø§ØąØŠ ŲŲŲ
ØŠ اŲŲ
ØąŲØą ŲOAuth ŲØĨؚداداØĒ اŲŲ
ØĩØ§Ø¯ŲØŠ Ø§ŲØŖŲØŽØąŲ",
|
"authentication_settings_description": "ØĨØ¯Ø§ØąØŠ ŲŲŲ
ØŠ اŲŲ
ØąŲØą ŲOAuth ŲØĨؚداداØĒ اŲŲ
ØĩØ§Ø¯ŲØŠ Ø§ŲØŖŲØŽØąŲ",
|
||||||
"authentication_settings_disable_all": "ŲŲ ØŖŲØĒ Ų
ØĒØŖŲØ¯ ØŖŲŲ ØĒØąŲØ¯ ØĒØšØˇŲŲ ØŦŲ
ŲØš ŲØŗØ§ØĻŲ ØĒØŗØŦŲŲ Ø§ŲØ¯ØŽŲŲØ ØŗŲØĒŲ
ØĒØšØˇŲŲ ØĒØŗØŦŲŲ Ø§ŲØ¯ØŽŲŲ Ø¨Ø§ŲŲØ§Ų
Ų.",
|
"authentication_settings_disable_all": "ŲŲ ØŖŲØĒ Ų
ØĒØŖŲØ¯ ØŖŲŲ ØĒØąŲØ¯ ØĒØšØˇŲŲ ØŦŲ
ŲØš ŲØŗØ§ØĻŲ ØĒØŗØŦŲŲ Ø§ŲØ¯ØŽŲŲØ ØŗŲØĒŲ
ØĒØšØˇŲŲ ØĒØŗØŦŲŲ Ø§ŲØ¯ØŽŲŲ Ø¨Ø§ŲŲØ§Ų
Ų.",
|
||||||
"authentication_settings_reenable": "ŲØĨؚاد؊ Ø§ŲØĒŲØšŲŲØ Ø§ØŗØĒ؎دŲ
<link>ØŖŲ
Øą Ø§ŲØŽØ§Ø¯Ų
</link>.",
|
"authentication_settings_reenable": "ŲØĨؚاد؊ Ø§ŲØĒŲØšŲŲØ Ø§ØŗØĒ؎دŲ
<link>ØŖŲ
Øą Ø§ŲØŽØ§Ø¯Ų
</link>.",
|
||||||
"background_task_job": "اŲŲ
ŲØ§Ų
Ø§ŲØŽŲŲŲØŠ",
|
"background_task_job": "اŲŲ
ŲØ§Ų
ŲŲ Ø§ŲØŽŲŲŲØŠ",
|
||||||
"backup_database": "Ø§ŲØ´Ø§ØĄ ØĒŲØąŲØē ŲØ§ØšØ¯ØŠ Ø§ŲØ¨ŲØ§ŲØ§ØĒ",
|
"backup_database": "Ø§ŲØ´Ø§ØĄ ØĒŲØąŲØē ŲØ§ØšØ¯ØŠ Ø§ŲØ¨ŲØ§ŲØ§ØĒ",
|
||||||
"backup_database_enable_description": "ØĒŲ
ŲŲŲ ØĒŲØąŲØē ŲØ§ØšØ¯ØŠ Ø§ŲØ¨ŲØ§ŲØ§ØĒ",
|
"backup_database_enable_description": "ØĒŲ
ŲŲŲ ØĒŲØąŲØē ŲØ§ØšØ¯ØŠ Ø§ŲØ¨ŲØ§ŲØ§ØĒ",
|
||||||
"backup_keep_last_amount": "Ų
ŲØ¯Ø§Øą Ø§ŲØĒŲØąŲØēاØĒ Ø§ŲØŗØ§Ø¨ŲØŠ ŲŲØ§ØØĒŲØ§Ø¸ Ø¨ŲØ§",
|
"backup_keep_last_amount": "Ų
ŲØ¯Ø§Øą Ø§ŲØĒŲØąŲØēاØĒ Ø§ŲØŗØ§Ø¨ŲØŠ ŲŲØ§ØØĒŲØ§Ø¸ Ø¨ŲØ§",
|
||||||
|
"backup_onboarding_1_description": "ŲØŗØŽØŠ ØŽØ§ØąØŦ اŲŲ
ŲŲØš ŲŲ Ų
ŲŲØš ØĸØŽØą.",
|
||||||
|
"backup_onboarding_2_description": "ŲØŗØŽ Ų
ØŲŲØŠ ØšŲŲ ØŖØŦŲØ˛ØŠ Ų
ØŽØĒŲŲØŠ. ŲØ´Ų
Ų Ø°ŲŲ Ø§ŲŲ
ŲŲØ§ØĒ Ø§ŲØąØĻŲØŗŲØŠ ŲŲØŗØŽØŠ Ø§ØØĒŲØ§ØˇŲØŠ Ų
ØŲŲØŠ Ų
ŲŲØ§.",
|
||||||
|
"backup_onboarding_3_description": "ØĨØŦŲ
اŲŲ ŲØŗØŽ Ø¨ŲØ§ŲاØĒŲØ بŲ
ا ŲŲ Ø°ŲŲ Ø§ŲŲ
ŲŲØ§ØĒ Ø§ŲØŖØĩŲŲØŠ. ŲØ´Ų
Ų Ø°ŲŲ ŲØŗØŽØŠŲ ŲØ§ØØ¯ØŠŲ ØŽØ§ØąØŦ اŲŲ
ŲŲØš ŲŲØŗØŽØĒŲŲ Ų
ØŲŲØĒŲŲ.",
|
||||||
|
"backup_onboarding_description": "ŲŲŲØĩØ Ø¨Ø§ØĒباؚ <backblaze-link>Ø§ØŗØĒØąØ§ØĒŲØŦŲØŠ Ø§ŲŲØŗØŽ Ø§ŲØ§ØØĒŲØ§ØˇŲ 3-2-1</backblaze-link> ŲØŲ
Ø§ŲØŠ Ø¨ŲØ§ŲاØĒŲ. Ø§ØØĒŲØ¸ Ø¨ŲØŗØŽ Ø§ØØĒŲØ§ØˇŲØŠ Ų
Ų ØĩŲØąŲ/ŲŲØ¯ŲŲŲØ§ØĒŲ Ø§ŲŲ
ØŲ
ŲŲØŠØ Ø¨Ø§ŲØĨØļØ§ŲØŠ ØĨŲŲ ŲØ§ØšØ¯ØŠ Ø¨ŲØ§ŲاØĒ ImmichØ ŲØļŲ
Ø§Ų ØŲ ŲØŗØŽ Ø§ØØĒŲØ§ØˇŲ شاŲ
Ų.",
|
||||||
|
"backup_onboarding_footer": "ŲŲ
Ø˛ŲØ¯ Ų
Ų Ø§ŲŲ
ØšŲŲŲ
اØĒ ØŲŲ Ø§ŲŲØŗØŽ Ø§ŲØ§ØØĒŲØ§ØˇŲ ŲŲ ImmichØ ŲØąØŦŲ Ø§ŲØąØŦŲØš ØĨŲŲ <link> Ø§ŲØĒØšŲŲŲ
اØĒ </link>.",
|
||||||
|
"backup_onboarding_parts_title": "ŲØĒØļŲ
Ų Ø§ŲŲØŗØŽ Ø§ŲØ§ØØĒŲØ§ØˇŲ 3-2-1 Ų
ا ŲŲŲ:",
|
||||||
|
"backup_onboarding_title": "اŲŲØŗØŽ Ø§ŲØ§ØØĒŲØ§ØˇŲØŠ",
|
||||||
"backup_settings": "ØĨؚداداØĒ ØĒŲØąŲØē ŲØ§ØšØ¯ØŠ Ø§ŲØ¨ŲØ§ŲØ§ØĒ",
|
"backup_settings": "ØĨؚداداØĒ ØĒŲØąŲØē ŲØ§ØšØ¯ØŠ Ø§ŲØ¨ŲØ§ŲØ§ØĒ",
|
||||||
"backup_settings_description": "ØĨØ¯Ø§ØąØŠ ØĨؚداداØĒ ØĒŲØąŲØē ŲØ§ØšØ¯ØŠ Ø§ŲØ¨ŲØ§ŲØ§ØĒ.",
|
"backup_settings_description": "ØĨØ¯Ø§ØąØŠ ØĨؚداداØĒ ØĒŲØąŲØē ŲØ§ØšØ¯ØŠ Ø§ŲØ¨ŲØ§ŲØ§ØĒ.",
|
||||||
"cleared_jobs": "ØĒŲ
ØĨØŽŲØ§ØĄ Ų
ŲØ§Ų
: {job}",
|
"cleared_jobs": "ØĒŲ
ØĨØŽŲØ§ØĄ Ų
ŲØ§Ų
: {job}",
|
||||||
@@ -112,6 +123,7 @@
|
|||||||
"logging_enable_description": "ØĒŲØšŲŲ ØĒØŗØŦŲŲ Ø§ŲØŖØØ¯Ø§ØĢ",
|
"logging_enable_description": "ØĒŲØšŲŲ ØĒØŗØŦŲŲ Ø§ŲØŖØØ¯Ø§ØĢ",
|
||||||
"logging_level_description": "ØšŲØ¯ Ø§ŲØĒŲØšŲŲØ ØŖŲ Ų
ØŗØĒŲŲ ØĒØŗØŦŲŲ ØŗŲØŗØĒ؎دŲ
.",
|
"logging_level_description": "ØšŲØ¯ Ø§ŲØĒŲØšŲŲØ ØŖŲ Ų
ØŗØĒŲŲ ØĒØŗØŦŲŲ ØŗŲØŗØĒ؎دŲ
.",
|
||||||
"logging_settings": "ØĒØŗØŦŲŲ Ø§ŲØ§ØØ¯Ø§ØĢ",
|
"logging_settings": "ØĒØŗØŦŲŲ Ø§ŲØ§ØØ¯Ø§ØĢ",
|
||||||
|
"machine_learning_availability_checks": "ØĒØŲŲ Ų
Ų Ø§ŲØĒŲŲØą",
|
||||||
"machine_learning_clip_model": "ŲŲ
ŲØ°ØŦ CLIP",
|
"machine_learning_clip_model": "ŲŲ
ŲØ°ØŦ CLIP",
|
||||||
"machine_learning_clip_model_description": "Ø§ØŗŲ
ŲŲ
ŲØ°ØŦ CLIP Ų
Ø¯ØąØŦŲ <link>ŲŲØ§</link>. ŲØąØŦŲ Ų
ŲØ§ØØ¸ØŠ ØŖŲŲ ŲØŦب ØĨؚاد؊ ØĒØ´ØēŲŲ ŲØ¸ŲŲØŠ \"Ø§ŲØ¨ØØĢ Ø§ŲØ°ŲŲ\" ŲØŦŲ
ب𠨧بĩŲØą Ø¨ØšØ¯ ØĒØēŲŲØą Ø§ŲŲŲ
ŲØ°ØŦ.",
|
"machine_learning_clip_model_description": "Ø§ØŗŲ
ŲŲ
ŲØ°ØŦ CLIP Ų
Ø¯ØąØŦŲ <link>ŲŲØ§</link>. ŲØąØŦŲ Ų
ŲØ§ØØ¸ØŠ ØŖŲŲ ŲØŦب ØĨؚاد؊ ØĒØ´ØēŲŲ ŲØ¸ŲŲØŠ \"Ø§ŲØ¨ØØĢ Ø§ŲØ°ŲŲ\" ŲØŦŲ
ب𠨧بĩŲØą Ø¨ØšØ¯ ØĒØēŲŲØą Ø§ŲŲŲ
ŲØ°ØŦ.",
|
||||||
"machine_learning_duplicate_detection": "ŲØ´Ų Ø§ŲØĒŲØąØ§Øą",
|
"machine_learning_duplicate_detection": "ŲØ´Ų Ø§ŲØĒŲØąØ§Øą",
|
||||||
@@ -210,6 +222,8 @@
|
|||||||
"oauth_mobile_redirect_uri": "ØšŲŲØ§Ų URI ŲØĨؚاد؊ Ø§ŲØĒŲØŦŲŲ ØšŲŲ Ø§ŲŲØ§ØĒŲ",
|
"oauth_mobile_redirect_uri": "ØšŲŲØ§Ų URI ŲØĨؚاد؊ Ø§ŲØĒŲØŦŲŲ ØšŲŲ Ø§ŲŲØ§ØĒŲ",
|
||||||
"oauth_mobile_redirect_uri_override": "ØĒØŦØ§ŲØ˛ ØšŲŲØ§Ų URI ŲØĨؚاد؊ Ø§ŲØĒŲØŦŲŲ ØšŲŲ Ø§ŲŲØ§ØĒŲ",
|
"oauth_mobile_redirect_uri_override": "ØĒØŦØ§ŲØ˛ ØšŲŲØ§Ų URI ŲØĨؚاد؊ Ø§ŲØĒŲØŦŲŲ ØšŲŲ Ø§ŲŲØ§ØĒŲ",
|
||||||
"oauth_mobile_redirect_uri_override_description": "ŲŲ
بØĒŲØšŲŲŲ ØšŲØ¯Ų
ا ŲØ§ ŲØŗŲ
Ø Ų
ŲŲØą OAuth بŲ
ØšØąŲ URI ŲŲØŦŲØ§ŲØ Ų
ØĢŲ ''{callback}''",
|
"oauth_mobile_redirect_uri_override_description": "ŲŲ
بØĒŲØšŲŲŲ ØšŲØ¯Ų
ا ŲØ§ ŲØŗŲ
Ø Ų
ŲŲØą OAuth بŲ
ØšØąŲ URI ŲŲØŦŲØ§ŲØ Ų
ØĢŲ ''{callback}''",
|
||||||
|
"oauth_role_claim": "اŲŲ
ØˇØ§ŲØ¨ØŠ Ø¨Ø§ŲØ¯ŲØą(ØĩŲØ§ØŲاØĒ)",
|
||||||
|
"oauth_role_claim_description": "Ų
ŲØ ŲØĩŲŲ Ø§ŲŲ
ØŗØ¤ŲŲ ØĒŲŲØ§ØĻŲŲØ§ Ø¨ŲØ§ØĄŲ ØšŲŲ ŲØŦŲØ¯ ŲØ°Ø§ Ø§ŲØˇŲب. ŲØ¯ ŲŲŲŲ Ø§ŲØˇŲب ØĨŲ
ا 'Ų
ØŗØĒ؎دŲ
' ØŖŲ 'Ų
ØŗØ¤ŲŲ'.",
|
||||||
"oauth_settings": "OAuth",
|
"oauth_settings": "OAuth",
|
||||||
"oauth_settings_description": "ØĨØ¯Ø§ØąØŠ ØĨؚداداØĒ ØĒØŗØŦŲŲ Ø§ŲØ¯ØŽŲŲ OAuth",
|
"oauth_settings_description": "ØĨØ¯Ø§ØąØŠ ØĨؚداداØĒ ØĒØŗØŦŲŲ Ø§ŲØ¯ØŽŲŲ OAuth",
|
||||||
"oauth_settings_more_details": "ŲŲ
Ø˛ŲØ¯ Ų
Ų Ø§ŲØĒŲØ§ØĩŲŲ ØŲŲ ŲØ°Ų اŲŲ
ŲØ˛ØŠØ ŲØąØŦŲ Ø§ŲØąØŦŲØš ØĨŲŲ <link>اŲŲØĢØ§ØĻŲ</link>.",
|
"oauth_settings_more_details": "ŲŲ
Ø˛ŲØ¯ Ų
Ų Ø§ŲØĒŲØ§ØĩŲŲ ØŲŲ ŲØ°Ų اŲŲ
ŲØ˛ØŠØ ŲØąØŦŲ Ø§ŲØąØŦŲØš ØĨŲŲ <link>اŲŲØĢØ§ØĻŲ</link>.",
|
||||||
@@ -345,6 +359,9 @@
|
|||||||
"trash_number_of_days_description": "ؚدد ØŖŲØ§Ų
Ø§ŲØ§ØØĒŲØ§Ø¸ باŲŲ
ØØĒŲŲØ§ØĒ ŲŲ ØŗŲØŠ Ø§ŲŲ
ŲŲ
ŲØ§ØĒ ŲØ¨Ų ØØ°ŲŲØ§ ŲŲØ§ØĻŲŲØ§",
|
"trash_number_of_days_description": "ؚدد ØŖŲØ§Ų
Ø§ŲØ§ØØĒŲØ§Ø¸ باŲŲ
ØØĒŲŲØ§ØĒ ŲŲ ØŗŲØŠ Ø§ŲŲ
ŲŲ
ŲØ§ØĒ ŲØ¨Ų ØØ°ŲŲØ§ ŲŲØ§ØĻŲŲØ§",
|
||||||
"trash_settings": "ØĨؚداداØĒ ØŗŲØŠ Ø§ŲŲ
ŲŲ
ŲØ§ØĒ",
|
"trash_settings": "ØĨؚداداØĒ ØŗŲØŠ Ø§ŲŲ
ŲŲ
ŲØ§ØĒ",
|
||||||
"trash_settings_description": "ØĨØ¯Ø§ØąØŠ ØĨؚداداØĒ ØŗŲØŠ Ø§ŲŲ
ŲŲ
ŲØ§ØĒ",
|
"trash_settings_description": "ØĨØ¯Ø§ØąØŠ ØĨؚداداØĒ ØŗŲØŠ Ø§ŲŲ
ŲŲ
ŲØ§ØĒ",
|
||||||
|
"unlink_all_oauth_accounts": "Ø§Ø˛Ø§ŲØŠ ØąØ¨Øˇ ØŦŲ
ŲØš ØØŗØ§Ø¨Ø§ØĒ OAuth",
|
||||||
|
"unlink_all_oauth_accounts_description": "ØĒذŲŲØą Ø§Ų ØĒØ˛ŲŲ ØąØ¨Øˇ ØŦŲ
ŲØš ØØŗØ§Ø¨Ø§ØĒ OAuth ŲØ¨Ų Ø§Ų ØĒŲŲŲ Ø§ŲŲ Ų
Ø˛ŲØ¯ ØŦØ¯ŲØ¯.",
|
||||||
|
"unlink_all_oauth_accounts_prompt": "ŲŲ Ø§ŲØĒ Ų
ØĒØŖŲØ¯ Ų
Ų Ø§Ø˛Ø§ŲØŠ ØąØ¨Øˇ ØŦŲ
ŲØš ØØŗØ§Ø¨Ø§ØĒ OAuthØ ŲØ°Ø§ ØŗŲŲŲŲ
باؚاد؊ ØļØ¨Øˇ اŲID Ø§ŲØŽØ§Øĩ باŲOAuth ŲŲŲ Ų
ØŗØĒ؎دŲ
ŲŲØ§ ŲŲ
ŲŲ Ø§ŲØĒØąØ§ØŦØš ØšŲ Ø§ŲØšŲ
ŲŲØŠ.",
|
||||||
"user_cleanup_job": "ØĒŲØ¸ŲŲ Ø§ŲŲ
ØŗØĒ؎دŲ
",
|
"user_cleanup_job": "ØĒŲØ¸ŲŲ Ø§ŲŲ
ØŗØĒ؎دŲ
",
|
||||||
"user_delete_delay": "ØŗŲØĒŲ
ØŦدŲŲØŠ ØØŗØ§Ø¨ <b>{user}</b> ŲŲ
ØØĒŲŲØ§ØĒŲ ŲŲØØ°Ų Ø§ŲŲŲØ§ØĻŲ ŲŲ ØēØļŲŲ {delay, plural, one {# ŲŲŲ
} other {# ØŖŲØ§Ų
}}.",
|
"user_delete_delay": "ØŗŲØĒŲ
ØŦدŲŲØŠ ØØŗØ§Ø¨ <b>{user}</b> ŲŲ
ØØĒŲŲØ§ØĒŲ ŲŲØØ°Ų Ø§ŲŲŲØ§ØĻŲ ŲŲ ØēØļŲŲ {delay, plural, one {# ŲŲŲ
} other {# ØŖŲØ§Ų
}}.",
|
||||||
"user_delete_delay_settings": "ŲØĒØąØŠ Ø§ŲØĒØŖØŽŲØą ŲØ¨Ų Ø§ŲØØ°Ų",
|
"user_delete_delay_settings": "ŲØĒØąØŠ Ø§ŲØĒØŖØŽŲØą ŲØ¨Ų Ø§ŲØØ°Ų",
|
||||||
@@ -374,10 +391,11 @@
|
|||||||
"advanced_settings_enable_alternate_media_filter_subtitle": "Ø§ØŗØĒ؎دŲ
ŲØ°Ø§ Ø§ŲØŽŲØ§Øą ŲØĒØĩŲŲØŠ Ø§ŲŲØŗØ§ØĻØˇ اØĢŲØ§ØĄ اŲŲ
Ø˛Ø§Ų
ŲŲ Ø¨ŲØ§ØĄ ØšŲŲ Ų
ؚاŲŲØą Ø¨Ø¯ŲŲØŠ. ØŦØąØ¨ ŲØ°Ø§ Ø§ŲØŽŲØ§Øą ŲŲØˇ ŲØ§Ų ŲØ¯ŲŲ Ų
شاŲŲ Ų
Øš Ø§ŲØĒØˇØ¨ŲŲ Ø¨Ø§ŲŲØ´Ų ØšŲ ØŦŲ
ب𠨧ب§ŲبŲŲ
اØĒ.",
|
"advanced_settings_enable_alternate_media_filter_subtitle": "Ø§ØŗØĒ؎دŲ
ŲØ°Ø§ Ø§ŲØŽŲØ§Øą ŲØĒØĩŲŲØŠ Ø§ŲŲØŗØ§ØĻØˇ اØĢŲØ§ØĄ اŲŲ
Ø˛Ø§Ų
ŲŲ Ø¨ŲØ§ØĄ ØšŲŲ Ų
ؚاŲŲØą Ø¨Ø¯ŲŲØŠ. ØŦØąØ¨ ŲØ°Ø§ Ø§ŲØŽŲØ§Øą ŲŲØˇ ŲØ§Ų ŲØ¯ŲŲ Ų
شاŲŲ Ų
Øš Ø§ŲØĒØˇØ¨ŲŲ Ø¨Ø§ŲŲØ´Ų ØšŲ ØŦŲ
ب𠨧ب§ŲبŲŲ
اØĒ.",
|
||||||
"advanced_settings_enable_alternate_media_filter_title": "[ØĒØŦØąŲØ¨Ų] Ø§ØŗØĒ؎دŲ
ØŦŲØ§Ø˛ ØĒØĩŲŲØŠ Ų
Ø˛Ø§Ų
ŲŲ Ø§ŲØ¨ŲŲ
اØĒ بدŲŲ",
|
"advanced_settings_enable_alternate_media_filter_title": "[ØĒØŦØąŲØ¨Ų] Ø§ØŗØĒ؎دŲ
ØŦŲØ§Ø˛ ØĒØĩŲŲØŠ Ų
Ø˛Ø§Ų
ŲŲ Ø§ŲØ¨ŲŲ
اØĒ بدŲŲ",
|
||||||
"advanced_settings_log_level_title": "Ų
ØŗØĒŲŲ Ø§ŲØŗØŦŲ: {level}",
|
"advanced_settings_log_level_title": "Ų
ØŗØĒŲŲ Ø§ŲØŗØŦŲ: {level}",
|
||||||
"advanced_settings_prefer_remote_subtitle": "ØĒŲŲŲ Ø¨ØšØļ Ø§ŲØŖØŦŲØ˛ØŠ Ø¨ØˇŲØĻØŠ Ųب稧بРŲŲ ØĒØŲ
ŲŲ Ø§ŲØĩŲØą Ø§ŲŲ
ØĩØēØąØŠ Ų
Ų Ø§ŲØŖØĩŲŲ Ø§ŲŲ
ŲØŦŲØ¯ØŠ ØšŲŲ Ø§ŲØŦŲØ§Ø˛. ŲŲ
بØĒŲØ´ŲØˇ ŲØ°Ø§ Ø§ŲØĨؚداد ŲØĒØŲ
ŲŲ Ø§ŲØĩŲØą Ø§ŲØ¨ØšŲØ¯ØŠ Ø¨Ø¯ŲØ§Ų Ų
Ų Ø°ŲŲ.",
|
"advanced_settings_prefer_remote_subtitle": "ØĒŲŲŲ Ø¨ØšØļ Ø§ŲØŖØŦŲØ˛ØŠ Ø¨ØˇŲØĻØŠ Ųب稧بРŲŲ ØĒØŲ
ŲŲ Ø§ŲØĩŲØą Ø§ŲŲ
ØĩØēØąØŠ Ų
Ų Ø§ŲØŖØĩŲŲ Ø§ŲŲ
ØŲŲØŠ. ŲŲ
بØĒŲØšŲŲ ŲØ°Ø§ Ø§ŲØŽŲØ§Øą ŲØĒØŲ
ŲŲ Ø§ŲØĩŲØą Ø§ŲØ¨ØšŲØ¯ØŠ Ø¨Ø¯ŲØ§Ų Ų
Ų Ø°ŲŲ.",
|
||||||
"advanced_settings_prefer_remote_title": "ØĒŲØļŲ Ø§ŲØĩŲØą Ø§ŲØ¨ØšŲØ¯ØŠ",
|
"advanced_settings_prefer_remote_title": "ØĒŲØļŲ Ø§ŲØĩŲØą Ø§ŲØ¨ØšŲØ¯ØŠ",
|
||||||
"advanced_settings_proxy_headers_subtitle": "ØšØąŲ ØšŲØ§ŲŲŲ Ø§ŲŲŲŲŲ Ø§ŲØĒŲ ŲØŗØĒ؎دŲ
ŲØ§ Immich ŲØ§ØąØŗØ§Ų ŲŲ ØˇŲØ¨ شبŲŲ",
|
"advanced_settings_proxy_headers_subtitle": "ØšØąŲ ØšŲØ§ŲŲŲ Ø§ŲŲŲŲŲ Ø§ŲØĒŲ ŲØŗØĒ؎دŲ
ŲØ§ Immich ŲØ§ØąØŗØ§Ų ŲŲ ØˇŲØ¨ شبŲŲ",
|
||||||
"advanced_settings_proxy_headers_title": "ØšŲØ§ŲŲŲ Ø§ŲŲŲŲŲ",
|
"advanced_settings_proxy_headers_title": "ØšŲØ§ŲŲŲ Ø§ŲŲŲŲŲ",
|
||||||
|
"advanced_settings_readonly_mode_title": "ŲØļØš اŲŲØąØ§ØĄØŠ ŲŲØˇ",
|
||||||
"advanced_settings_self_signed_ssl_subtitle": "ØĒØŽØˇŲ Ø§ŲØĒØŲŲ Ų
Ų Ø´ŲØ§Ø¯ØŠ SSL ŲØŽØ§Ø¯Ų
اŲŲŲØˇØŠ اŲŲŲØ§ØĻŲ. Ų
ŲŲŲØ¨ ŲŲØ´ŲاداØĒ اŲŲ
ŲŲØšØŠ Ø°Ø§ØĒŲØ§.",
|
"advanced_settings_self_signed_ssl_subtitle": "ØĒØŽØˇŲ Ø§ŲØĒØŲŲ Ų
Ų Ø´ŲØ§Ø¯ØŠ SSL ŲØŽØ§Ø¯Ų
اŲŲŲØˇØŠ اŲŲŲØ§ØĻŲ. Ų
ŲŲŲØ¨ ŲŲØ´ŲاداØĒ اŲŲ
ŲŲØšØŠ Ø°Ø§ØĒŲØ§.",
|
||||||
"advanced_settings_self_signed_ssl_title": "Ø§ŲØŗŲ
Ø§Ø Ø¨Ø´ŲØ§Ø¯Ø§ØĒ SSL اŲŲ
ŲŲØšØŠ Ø°Ø§ØĒŲŲØ§",
|
"advanced_settings_self_signed_ssl_title": "Ø§ŲØŗŲ
Ø§Ø Ø¨Ø´ŲØ§Ø¯Ø§ØĒ SSL اŲŲ
ŲŲØšØŠ Ø°Ø§ØĒŲŲØ§",
|
||||||
"advanced_settings_sync_remote_deletions_subtitle": "ØØ°Ų Ø§Ų Ø§ØŗØĒؚاد؊ ØĒŲŲØ§ØĻŲ ŲŲØ§ØĩŲŲ ØšŲŲ ŲØ°Ø§ Ø§ŲØŦŲØ§Ø˛ ØšŲØ¯ ØĒŲŲŲØ° Ø§ŲØšŲ
ŲŲØŠ ØšŲŲ Ø§ŲŲŲØ¨",
|
"advanced_settings_sync_remote_deletions_subtitle": "ØØ°Ų Ø§Ų Ø§ØŗØĒؚاد؊ ØĒŲŲØ§ØĻŲ ŲŲØ§ØĩŲŲ ØšŲŲ ŲØ°Ø§ Ø§ŲØŦŲØ§Ø˛ ØšŲØ¯ ØĒŲŲŲØ° Ø§ŲØšŲ
ŲŲØŠ ØšŲŲ Ø§ŲŲŲØ¨",
|
||||||
@@ -507,7 +525,7 @@
|
|||||||
"back_close_deselect": "Ø§ŲØąØŦŲØš ØŖŲ Ø§ŲØĨØēŲØ§Ų ØŖŲ ØĨŲØēØ§ØĄ Ø§ŲØĒØØ¯ŲØ¯",
|
"back_close_deselect": "Ø§ŲØąØŦŲØš ØŖŲ Ø§ŲØĨØēŲØ§Ų ØŖŲ ØĨŲØēØ§ØĄ Ø§ŲØĒØØ¯ŲØ¯",
|
||||||
"background_location_permission": "Ø§Ø°Ų Ø§ŲŲØĩŲŲ ŲŲŲ
ŲŲØš ŲŲ Ø§ŲØŽŲŲŲØŠ",
|
"background_location_permission": "Ø§Ø°Ų Ø§ŲŲØĩŲŲ ŲŲŲ
ŲŲØš ŲŲ Ø§ŲØŽŲŲŲØŠ",
|
||||||
"background_location_permission_content": "ŲŲØĒŲ
ŲŲ Ų
Ų ØĒبدŲŲ Ø§ŲØ´Ø¨ŲŲ Ø¨Ø§ŲØŽŲŲŲØŠØ Immich ŲØØĒاØŦ*داØĻŲ
ا* ŲŲØØĩŲŲ ØšŲŲ Ų
Ųب𠨝ŲŲŲ ŲŲØĒŲ
ŲŲ Ø§ŲØĒØˇØ¨ŲŲ Ų
Ų ŲØąØ§ØĻØŠ Ø§ØŗŲ
Ø´Ø¨ŲØŠ Ø§ŲWi-Fi",
|
"background_location_permission_content": "ŲŲØĒŲ
ŲŲ Ų
Ų ØĒبدŲŲ Ø§ŲØ´Ø¨ŲŲ Ø¨Ø§ŲØŽŲŲŲØŠØ Immich ŲØØĒاØŦ*داØĻŲ
ا* ŲŲØØĩŲŲ ØšŲŲ Ų
Ųب𠨝ŲŲŲ ŲŲØĒŲ
ŲŲ Ø§ŲØĒØˇØ¨ŲŲ Ų
Ų ŲØąØ§ØĻØŠ Ø§ØŗŲ
Ø´Ø¨ŲØŠ Ø§ŲWi-Fi",
|
||||||
"backup": "دؚŲ
",
|
"backup": "ŲØŗØŽ Ø§ØØĒŲØ§ØˇŲ",
|
||||||
"backup_album_selection_page_albums_device": "Ø§ŲØ§ŲبŲŲ
اØĒ ØšŲŲ Ø§ŲØŦŲØ§Ø˛ ({count})",
|
"backup_album_selection_page_albums_device": "Ø§ŲØ§ŲبŲŲ
اØĒ ØšŲŲ Ø§ŲØŦŲØ§Ø˛ ({count})",
|
||||||
"backup_album_selection_page_albums_tap": "اŲŲØą ŲŲØĒØļŲ
ŲŲØ ŲØ§ŲŲØą ŲŲØąŲا Ų
Ø˛Ø¯ŲØŦŲØ§ ŲŲØ§ØŗØĒØĢŲØ§ØĄ",
|
"backup_album_selection_page_albums_tap": "اŲŲØą ŲŲØĒØļŲ
ŲŲØ ŲØ§ŲŲØą ŲŲØąŲا Ų
Ø˛Ø¯ŲØŦŲØ§ ŲŲØ§ØŗØĒØĢŲØ§ØĄ",
|
||||||
"backup_album_selection_page_assets_scatter": "ŲŲ
ŲŲ ØŖŲ ØĒŲØĒØ´Øą Ø§ŲØŖØĩŲŲ ØšØ¨Øą ØŖŲØ¨ŲŲ
اØĒ Ų
ØĒؚدد؊. ŲØ¨Ø§ŲØĒاŲŲØ ŲŲ
ŲŲ ØĒØļŲ
ŲŲ Ø§ŲØŖŲبŲŲ
اØĒ ØŖŲ Ø§ØŗØĒØ¨ØšØ§Ø¯ŲØ§ ØŖØĢŲØ§ØĄ ØšŲ
ŲŲØŠ Ø§ŲŲØŗØŽ Ø§ŲØ§ØØĒŲØ§ØˇŲ.",
|
"backup_album_selection_page_assets_scatter": "ŲŲ
ŲŲ ØŖŲ ØĒŲØĒØ´Øą Ø§ŲØŖØĩŲŲ ØšØ¨Øą ØŖŲØ¨ŲŲ
اØĒ Ų
ØĒؚدد؊. ŲØ¨Ø§ŲØĒاŲŲØ ŲŲ
ŲŲ ØĒØļŲ
ŲŲ Ø§ŲØŖŲبŲŲ
اØĒ ØŖŲ Ø§ØŗØĒØ¨ØšØ§Ø¯ŲØ§ ØŖØĢŲØ§ØĄ ØšŲ
ŲŲØŠ Ø§ŲŲØŗØŽ Ø§ŲØ§ØØĒŲØ§ØˇŲ.",
|
||||||
@@ -568,11 +586,11 @@
|
|||||||
"backup_manual_in_progress": "ŲŲØ¯ Ø§ŲØĒØŲ
ŲŲ ØØ§ŲŲ Ų
ØąŲ Ø§ØŽØąŲ",
|
"backup_manual_in_progress": "ŲŲØ¯ Ø§ŲØĒØŲ
ŲŲ ØØ§ŲŲ Ų
ØąŲ Ø§ØŽØąŲ",
|
||||||
"backup_manual_success": "ŲØŦاØ",
|
"backup_manual_success": "ŲØŦاØ",
|
||||||
"backup_manual_title": "ØØ§ŲØŠ Ø§ŲØĒØŲ
ŲŲ",
|
"backup_manual_title": "ØØ§ŲØŠ Ø§ŲØĒØŲ
ŲŲ",
|
||||||
|
"backup_options": "ØŽŲØ§ØąØ§ØĒ اŲŲØŗØŽ Ø§ŲØ§ØØĒŲØ§ØˇŲ",
|
||||||
"backup_options_page_title": "ØŽŲØ§ØąØ§ØĒ اŲŲØŗØŽ Ø§ŲØ§ØØĒŲØ§ØˇŲ",
|
"backup_options_page_title": "ØŽŲØ§ØąØ§ØĒ اŲŲØŗØŽ Ø§ŲØ§ØØĒŲØ§ØˇŲ",
|
||||||
"backup_setting_subtitle": "Ø§Ø¯Ø§ØąØŠ اؚداداØĒ Ø§ŲØĒØŲ
ŲŲ ŲŲ Ø§ŲØŽŲŲŲØŠ ŲØ§ŲŲ
ŲØ¯Ų
ØŠ",
|
"backup_setting_subtitle": "Ø§Ø¯Ø§ØąØŠ اؚداداØĒ Ø§ŲØĒØŲ
ŲŲ ŲŲ Ø§ŲØŽŲŲŲØŠ ŲØ§ŲŲ
ŲØ¯Ų
ØŠ",
|
||||||
|
"backup_settings_subtitle": "ØĨØ¯Ø§ØąØŠ ØĨؚداداØĒ Ø§ŲØĒØŲ
ŲŲ",
|
||||||
"backward": "اŲŲ Ø§ŲŲØąØ§ØĄ",
|
"backward": "اŲŲ Ø§ŲŲØąØ§ØĄ",
|
||||||
"beta_sync": "ØØ§ŲØŠ اŲŲ
Ø˛Ø§Ų
ŲØŠ Ø§ŲØĒØŦØąŲØ¨ŲØŠ",
|
|
||||||
"beta_sync_subtitle": "Ø§Ø¯Ø§ØąØŠ ŲØ¸Ø§Ų
اŲŲ
Ø˛Ø§Ų
ŲØŠ Ø§ŲØŦØ¯ŲØ¯",
|
|
||||||
"biometric_auth_enabled": "اŲŲ
ØĩØ§Ø¯ŲØŠ Ø§ŲØ¨Ø§ŲŲŲ
ØĒØąŲØŠ Ų
ŲØšŲŲ",
|
"biometric_auth_enabled": "اŲŲ
ØĩØ§Ø¯ŲØŠ Ø§ŲØ¨Ø§ŲŲŲ
ØĒØąŲØŠ Ų
ŲØšŲŲ",
|
||||||
"biometric_locked_out": "ŲŲØ¯ ŲŲŲØĒ ØšŲŲ Ø§ŲŲ
ØĩØ§Ø¯ŲØŠ Ø§ŲØ¨ŲŲŲ
ØĒØąŲØŠ",
|
"biometric_locked_out": "ŲŲØ¯ ŲŲŲØĒ ØšŲŲ Ø§ŲŲ
ØĩØ§Ø¯ŲØŠ Ø§ŲØ¨ŲŲŲ
ØĒØąŲØŠ",
|
||||||
"biometric_no_options": "ŲØ§ ØĒŲØŦد ØŽŲØ§ØąØ§ØĒ باŲŲŲ
ØĒØąŲØŠ Ų
ØĒŲŲØąØŠ",
|
"biometric_no_options": "ŲØ§ ØĒŲØŦد ØŽŲØ§ØąØ§ØĒ باŲŲŲ
ØĒØąŲØŠ Ų
ØĒŲŲØąØŠ",
|
||||||
@@ -639,6 +657,7 @@
|
|||||||
"clear": "ØĨØŽŲØ§ØĄ",
|
"clear": "ØĨØŽŲØ§ØĄ",
|
||||||
"clear_all": "ØĨØŽŲØ§ØĄ اŲŲŲ",
|
"clear_all": "ØĨØŽŲØ§ØĄ اŲŲŲ",
|
||||||
"clear_all_recent_searches": "Ų
ØŗØ ØŦŲ
ŲØš ØšŲ
ŲŲØ§ØĒ Ø§ŲØ¨ØØĢ Ø§ŲØŖØŽŲØąØŠ",
|
"clear_all_recent_searches": "Ų
ØŗØ ØŦŲ
ŲØš ØšŲ
ŲŲØ§ØĒ Ø§ŲØ¨ØØĢ Ø§ŲØŖØŽŲØąØŠ",
|
||||||
|
"clear_file_cache": "Ų
ØŗØ Ø°Ø§ŲØąØŠ Ø§ŲØĒØŽØ˛ŲŲ Ø§ŲŲ
Ø¤ŲØĒ ŲŲŲ
ŲŲØ§ØĒ",
|
||||||
"clear_message": "ØĨØŽŲØ§ØĄ Ø§ŲØąØŗØ§ŲØŠ",
|
"clear_message": "ØĨØŽŲØ§ØĄ Ø§ŲØąØŗØ§ŲØŠ",
|
||||||
"clear_value": "ØĨØŽŲØ§ØĄ اŲŲŲŲ
ØŠ",
|
"clear_value": "ØĨØŽŲØ§ØĄ اŲŲŲŲ
ØŠ",
|
||||||
"client_cert_dialog_msg_confirm": "ØØŗŲا",
|
"client_cert_dialog_msg_confirm": "ØØŗŲا",
|
||||||
@@ -709,6 +728,7 @@
|
|||||||
"create_new_user": "ØĨŲØ´Ø§ØĄ Ų
ØŗØĒ؎دŲ
ØŦØ¯ŲØ¯",
|
"create_new_user": "ØĨŲØ´Ø§ØĄ Ų
ØŗØĒ؎دŲ
ØŦØ¯ŲØ¯",
|
||||||
"create_shared_album_page_share_add_assets": "ØĨØļØ§ŲØŠ Ø§ŲØŖØĩŲŲ",
|
"create_shared_album_page_share_add_assets": "ØĨØļØ§ŲØŠ Ø§ŲØŖØĩŲŲ",
|
||||||
"create_shared_album_page_share_select_photos": "ØØ¯Ø¯ Ø§ŲØĩŲØą",
|
"create_shared_album_page_share_select_photos": "ØØ¯Ø¯ Ø§ŲØĩŲØą",
|
||||||
|
"create_shared_link": "Ø§ŲØ´Ø§ØĄ ØąØ§Ø¨Øˇ Ų
Ø´ØĒØąŲ",
|
||||||
"create_tag": "ØĨŲØ´Ø§ØĄ ØšŲØ§Ų
ØŠ",
|
"create_tag": "ØĨŲØ´Ø§ØĄ ØšŲØ§Ų
ØŠ",
|
||||||
"create_tag_description": "ØŖŲØ´ØĻ ØšŲØ§Ų
ØŠ ØŦØ¯ŲØ¯ØŠ. باŲŲØŗØ¨ØŠ ŲŲØšŲاŲ
اØĒ اŲŲ
ØĒØ¯Ø§ØŽŲØŠØ ŲØąØŦŲ ØĨØ¯ØŽØ§Ų Ø§ŲŲ
ØŗØ§Øą اŲŲØ§Ų
Ų ŲŲØšŲاŲ
ØŠ بŲ
ا ŲŲ Ø°ŲŲ Ø§ŲØŽØˇŲØˇ اŲŲ
اØĻŲØŠ ŲŲØŖŲ
اŲ
.",
|
"create_tag_description": "ØŖŲØ´ØĻ ØšŲØ§Ų
ØŠ ØŦØ¯ŲØ¯ØŠ. باŲŲØŗØ¨ØŠ ŲŲØšŲاŲ
اØĒ اŲŲ
ØĒØ¯Ø§ØŽŲØŠØ ŲØąØŦŲ ØĨØ¯ØŽØ§Ų Ø§ŲŲ
ØŗØ§Øą اŲŲØ§Ų
Ų ŲŲØšŲاŲ
ØŠ بŲ
ا ŲŲ Ø°ŲŲ Ø§ŲØŽØˇŲØˇ اŲŲ
اØĻŲØŠ ŲŲØŖŲ
اŲ
.",
|
||||||
"create_user": "ØĨŲØ´Ø§ØĄ Ų
ØŗØĒ؎دŲ
",
|
"create_user": "ØĨŲØ´Ø§ØĄ Ų
ØŗØĒ؎دŲ
",
|
||||||
@@ -721,6 +741,7 @@
|
|||||||
"current_server_address": "ØšŲŲØ§Ų Ø§ŲØŽØ§Ø¯Ų
Ø§ŲØØ§ŲŲ",
|
"current_server_address": "ØšŲŲØ§Ų Ø§ŲØŽØ§Ø¯Ų
Ø§ŲØØ§ŲŲ",
|
||||||
"custom_locale": "ŲØēØŠ Ų
ØŽØĩØĩØŠ",
|
"custom_locale": "ŲØēØŠ Ų
ØŽØĩØĩØŠ",
|
||||||
"custom_locale_description": "ØĒŲØŗŲŲ Ø§ŲØĒŲØ§ØąŲØŽ ŲØ§ŲØŖØąŲØ§Ų
Ø¨ŲØ§ØĄŲ ØšŲŲ Ø§ŲŲØēØŠ ŲØ§ŲŲ
ŲØˇŲØŠ",
|
"custom_locale_description": "ØĒŲØŗŲŲ Ø§ŲØĒŲØ§ØąŲØŽ ŲØ§ŲØŖØąŲØ§Ų
Ø¨ŲØ§ØĄŲ ØšŲŲ Ø§ŲŲØēØŠ ŲØ§ŲŲ
ŲØˇŲØŠ",
|
||||||
|
"custom_url": "ØąØ§Ø¨Øˇ Ų
ØŽØĩØĩ",
|
||||||
"daily_title_text_date": "E Ø MMM DD",
|
"daily_title_text_date": "E Ø MMM DD",
|
||||||
"daily_title_text_date_year": "E Ø MMM DD Ø yyyy",
|
"daily_title_text_date_year": "E Ø MMM DD Ø yyyy",
|
||||||
"dark": "Ų
ØšØĒŲ
",
|
"dark": "Ų
ØšØĒŲ
",
|
||||||
@@ -732,6 +753,7 @@
|
|||||||
"date_of_birth_saved": "ØĒŲ
ØŲظ ØĒØ§ØąŲØŽ Ø§ŲŲ
ŲŲØ§Ø¯ Ø¨ŲØŦاØ",
|
"date_of_birth_saved": "ØĒŲ
ØŲظ ØĒØ§ØąŲØŽ Ø§ŲŲ
ŲŲØ§Ø¯ Ø¨ŲØŦاØ",
|
||||||
"date_range": "ŲØˇØ§Ų اŲŲ
ŲØšØ¯",
|
"date_range": "ŲØˇØ§Ų اŲŲ
ŲØšØ¯",
|
||||||
"day": "ŲŲŲ
",
|
"day": "ŲŲŲ
",
|
||||||
|
"days": "Ø§ŲØ§Ų
",
|
||||||
"deduplicate_all": "ØĨŲØēØ§ØĄ ØĒŲØąØ§Øą اŲŲŲ",
|
"deduplicate_all": "ØĨŲØēØ§ØĄ ØĒŲØąØ§Øą اŲŲŲ",
|
||||||
"deduplication_criteria_1": "ØØŦŲ
Ø§ŲØĩŲØąØŠ Ø¨ŲØØ¯Ø§ØĒ Ø§ŲØ¨Ø§ŲØĒ",
|
"deduplication_criteria_1": "ØØŦŲ
Ø§ŲØĩŲØąØŠ Ø¨ŲØØ¯Ø§ØĒ Ø§ŲØ¨Ø§ŲØĒ",
|
||||||
"deduplication_criteria_2": "ؚدد Ø¨ŲØ§ŲاØĒ EXIF",
|
"deduplication_criteria_2": "ؚدد Ø¨ŲØ§ŲاØĒ EXIF",
|
||||||
@@ -816,8 +838,12 @@
|
|||||||
"edit": "ØĒؚدŲŲ",
|
"edit": "ØĒؚدŲŲ",
|
||||||
"edit_album": "ØĒؚدŲŲ Ø§ŲØŖŲبŲŲ
",
|
"edit_album": "ØĒؚدŲŲ Ø§ŲØŖŲبŲŲ
",
|
||||||
"edit_avatar": "ØĒؚدŲŲ Ø§ŲØĩŲØąØŠ Ø§ŲØ´ØŽØĩŲØŠ",
|
"edit_avatar": "ØĒؚدŲŲ Ø§ŲØĩŲØąØŠ Ø§ŲØ´ØŽØĩŲØŠ",
|
||||||
|
"edit_birthday": "ØĒؚدŲŲ ØĒØ§ØąŲØŽ Ø§ŲŲ
ŲŲØ§Ø¯",
|
||||||
"edit_date": "ØĒؚدŲŲ Ø§ŲØĒØ§ØąŲØŽ",
|
"edit_date": "ØĒؚدŲŲ Ø§ŲØĒØ§ØąŲØŽ",
|
||||||
"edit_date_and_time": "ØĒؚدŲŲ Ø§ŲØĒØ§ØąŲØŽ ŲØ§ŲŲŲØĒ",
|
"edit_date_and_time": "ØĒؚدŲŲ Ø§ŲØĒØ§ØąŲØŽ ŲØ§ŲŲŲØĒ",
|
||||||
|
"edit_date_and_time_action_prompt": "ØĒŲ
ØĒؚدŲŲ Ø§ŲØĒØ§ØąŲØŽ ŲØ§ŲŲŲØĒ Ų{count} Ų
ŲŲ(اØĒ)",
|
||||||
|
"edit_date_and_time_by_offset": "ØĒؚدŲŲ Ø§ŲØĒØ§ØąŲØŽ ØØŗØ¨ ŲŲŲ
ØŠ Ø§Ø˛Ø§ØØŠ Ų
ØšŲŲØŠ",
|
||||||
|
"edit_date_and_time_by_offset_interval": "ŲØˇØ§Ų Ø§ŲØĒØ§ØąŲØŽ Ø§ŲØŦØ¯ŲØ¯: {from} - {to}",
|
||||||
"edit_description": "ØĒؚدŲŲ Ø§ŲŲØĩŲ",
|
"edit_description": "ØĒؚدŲŲ Ø§ŲŲØĩŲ",
|
||||||
"edit_description_prompt": "Ø§ŲØąØŦØ§ØĄ ا؎ØĒŲØ§Øą ŲØĩŲ ØŦØ¯ŲØ¯:",
|
"edit_description_prompt": "Ø§ŲØąØŦØ§ØĄ ا؎ØĒŲØ§Øą ŲØĩŲ ØŦØ¯ŲØ¯:",
|
||||||
"edit_exclusion_pattern": "ØĒؚدŲŲ ŲŲ
Øˇ Ø§ŲØ§ØŗØĒبؚاد",
|
"edit_exclusion_pattern": "ØĒؚدŲŲ ŲŲ
Øˇ Ø§ŲØ§ØŗØĒبؚاد",
|
||||||
@@ -890,6 +916,7 @@
|
|||||||
"failed_to_load_notifications": "ŲØ´Ų ØĒØŲ
ŲŲ Ø§ŲØĨØ´ØšØ§ØąØ§ØĒ",
|
"failed_to_load_notifications": "ŲØ´Ų ØĒØŲ
ŲŲ Ø§ŲØĨØ´ØšØ§ØąØ§ØĒ",
|
||||||
"failed_to_load_people": "ŲØ´Ų ØĒØŲ
ŲŲ Ø§ŲØŖØ´ØŽØ§Øĩ",
|
"failed_to_load_people": "ŲØ´Ų ØĒØŲ
ŲŲ Ø§ŲØŖØ´ØŽØ§Øĩ",
|
||||||
"failed_to_remove_product_key": "ØĒØšØ°Øą ØĨØ˛Ø§ŲØŠ Ų
ŲØĒØ§Ø اŲŲ
ŲØĒØŦ",
|
"failed_to_remove_product_key": "ØĒØšØ°Øą ØĨØ˛Ø§ŲØŠ Ų
ŲØĒØ§Ø اŲŲ
ŲØĒØŦ",
|
||||||
|
"failed_to_reset_pin_code": "ŲØ´Ų اؚاد؊ ØĒØšŲŲŲ ØąŲ
Ø˛ اŲPIN",
|
||||||
"failed_to_stack_assets": "ŲØ´Ų ŲŲ ØĒŲØ¯ŲØŗ اŲŲ
ØØĒŲŲØ§ØĒ",
|
"failed_to_stack_assets": "ŲØ´Ų ŲŲ ØĒŲØ¯ŲØŗ اŲŲ
ØØĒŲŲØ§ØĒ",
|
||||||
"failed_to_unstack_assets": "ŲØ´Ų ŲŲ ŲØĩŲ Ø§ŲŲ
ØØĒŲŲØ§ØĒ",
|
"failed_to_unstack_assets": "ŲØ´Ų ŲŲ ŲØĩŲ Ø§ŲŲ
ØØĒŲŲØ§ØĒ",
|
||||||
"failed_to_update_notification_status": "ŲØ´Ų ŲŲ ØĒØØ¯ŲØĢ ØØ§ŲØŠ Ø§ŲØĨØ´ØšØ§Øą",
|
"failed_to_update_notification_status": "ŲØ´Ų ŲŲ ØĒØØ¯ŲØĢ ØØ§ŲØŠ Ø§ŲØĨØ´ØšØ§Øą",
|
||||||
@@ -898,6 +925,7 @@
|
|||||||
"paths_validation_failed": "ŲØ´Ų ŲŲ Ø§ŲØĒØŲŲ Ų
Ų {paths, plural, one {# Ų
ØŗØ§Øą} other {# Ų
ØŗØ§ØąØ§ØĒ}}",
|
"paths_validation_failed": "ŲØ´Ų ŲŲ Ø§ŲØĒØŲŲ Ų
Ų {paths, plural, one {# Ų
ØŗØ§Øą} other {# Ų
ØŗØ§ØąØ§ØĒ}}",
|
||||||
"profile_picture_transparent_pixels": "ŲØ§ ŲŲ
ŲŲ ØŖŲ ØĒØØĒŲŲ ØĩŲØą Ø§ŲŲ
ŲŲ Ø§ŲØ´ØŽØĩŲ ØšŲŲ ØŖØŦØ˛Ø§ØĄ/Ø¨ŲØŗŲاØĒ Ø´ŲØ§ŲØŠ. ŲØąØŦŲ Ø§ŲØĒŲØ¨ŲØą Ų/ØŖŲ ØĒØØąŲŲ Ø§ŲØĩŲØąØŠ.",
|
"profile_picture_transparent_pixels": "ŲØ§ ŲŲ
ŲŲ ØŖŲ ØĒØØĒŲŲ ØĩŲØą Ø§ŲŲ
ŲŲ Ø§ŲØ´ØŽØĩŲ ØšŲŲ ØŖØŦØ˛Ø§ØĄ/Ø¨ŲØŗŲاØĒ Ø´ŲØ§ŲØŠ. ŲØąØŦŲ Ø§ŲØĒŲØ¨ŲØą Ų/ØŖŲ ØĒØØąŲŲ Ø§ŲØĩŲØąØŠ.",
|
||||||
"quota_higher_than_disk_size": "ŲŲØ¯ ŲŲ
ØĒ بØĒØšŲŲŲ ØØĩØŠ ŲØŗØ¨ŲØŠ ØŖØšŲŲ Ų
Ų ØØŦŲ
اŲŲØąØĩ",
|
"quota_higher_than_disk_size": "ŲŲØ¯ ŲŲ
ØĒ بØĒØšŲŲŲ ØØĩØŠ ŲØŗØ¨ŲØŠ ØŖØšŲŲ Ų
Ų ØØŦŲ
اŲŲØąØĩ",
|
||||||
|
"something_went_wrong": "ØØ¯ØĢ ØŽØˇØŖ Ų
ا",
|
||||||
"unable_to_add_album_users": "ØĒØšØ°Øą ØĨØļØ§ŲØŠ Ų
ØŗØĒ؎دŲ
ŲŲ ØĨŲŲ Ø§ŲØŖŲبŲŲ
",
|
"unable_to_add_album_users": "ØĒØšØ°Øą ØĨØļØ§ŲØŠ Ų
ØŗØĒ؎دŲ
ŲŲ ØĨŲŲ Ø§ŲØŖŲبŲŲ
",
|
||||||
"unable_to_add_assets_to_shared_link": "ØĒØšØ°Øą ØĨØļØ§ŲØŠ Ø§ŲŲ
ØØĒŲŲØ§ØĒ ØĨŲŲ Ø§ŲØąØ§Ø¨Øˇ اŲŲ
Ø´ØĒØąŲ",
|
"unable_to_add_assets_to_shared_link": "ØĒØšØ°Øą ØĨØļØ§ŲØŠ Ø§ŲŲ
ØØĒŲŲØ§ØĒ ØĨŲŲ Ø§ŲØąØ§Ø¨Øˇ اŲŲ
Ø´ØĒØąŲ",
|
||||||
"unable_to_add_comment": "ØĒØšØ°Øą ØĨØļØ§ŲØŠ Ø§ŲØĒØšŲŲŲ",
|
"unable_to_add_comment": "ØĒØšØ°Øą ØĨØļØ§ŲØŠ Ø§ŲØĒØšŲŲŲ",
|
||||||
@@ -983,13 +1011,11 @@
|
|||||||
},
|
},
|
||||||
"exif": "Exif (ØĩŲØēØŠ Ų
ŲŲ ØĩŲØąŲ ŲØ§Ø¨Ų ŲŲØĒØ¨Ø§Ø¯Ų)",
|
"exif": "Exif (ØĩŲØēØŠ Ų
ŲŲ ØĩŲØąŲ ŲØ§Ø¨Ų ŲŲØĒØ¨Ø§Ø¯Ų)",
|
||||||
"exif_bottom_sheet_description": "اØļŲ ŲØĩŲØ§...",
|
"exif_bottom_sheet_description": "اØļŲ ŲØĩŲØ§...",
|
||||||
|
"exif_bottom_sheet_description_error": "ØŽØˇØŖ ŲŲ ØĒØØ¯ŲØĢ اŲŲØĩŲ",
|
||||||
"exif_bottom_sheet_details": "ØĒŲØ§ØĩŲŲ",
|
"exif_bottom_sheet_details": "ØĒŲØ§ØĩŲŲ",
|
||||||
"exif_bottom_sheet_location": "Ų
ŲŲØš",
|
"exif_bottom_sheet_location": "Ų
ŲŲØš",
|
||||||
"exif_bottom_sheet_people": "اŲŲØ§Øŗ",
|
"exif_bottom_sheet_people": "اŲŲØ§Øŗ",
|
||||||
"exif_bottom_sheet_person_add_person": "اØļŲ Ø§ØŗŲ
ا",
|
"exif_bottom_sheet_person_add_person": "اØļŲ Ø§ØŗŲ
ا",
|
||||||
"exif_bottom_sheet_person_age_months": "Ø§ŲØšŲ
Øą {months} Ø§Ø´ŲØą",
|
|
||||||
"exif_bottom_sheet_person_age_year_months": "Ø§ŲØšŲ
Øą ŲĄ ØŗŲØŠØ{months} Ø§Ø´ŲØą",
|
|
||||||
"exif_bottom_sheet_person_age_years": "Ø§ŲØšŲ
Øą {years}",
|
|
||||||
"exit_slideshow": "ØŽØąŲØŦ Ų
Ų Ø§ŲØšØąØļ Ø§ŲØĒŲØ¯ŲŲ
Ų",
|
"exit_slideshow": "ØŽØąŲØŦ Ų
Ų Ø§ŲØšØąØļ Ø§ŲØĒŲØ¯ŲŲ
Ų",
|
||||||
"expand_all": "ØĒŲØŗŲØš اŲŲŲ",
|
"expand_all": "ØĒŲØŗŲØš اŲŲŲ",
|
||||||
"experimental_settings_new_asset_list_subtitle": "ØŖØšŲ
Ø§Ų ØŦØ§ØąŲØŠ",
|
"experimental_settings_new_asset_list_subtitle": "ØŖØšŲ
Ø§Ų ØŦØ§ØąŲØŠ",
|
||||||
@@ -1031,11 +1057,13 @@
|
|||||||
"filter_people": "ØĒØĩŲŲØŠ Ø§ŲØ§Ø´ØŽØ§Øĩ",
|
"filter_people": "ØĒØĩŲŲØŠ Ø§ŲØ§Ø´ØŽØ§Øĩ",
|
||||||
"filter_places": "ØĒØĩŲŲØŠ Ø§ŲØ§Ų
اŲŲ",
|
"filter_places": "ØĒØĩŲŲØŠ Ø§ŲØ§Ų
اŲŲ",
|
||||||
"find_them_fast": "ŲŲ
ŲŲŲ Ø§ŲØšØĢŲØą ØšŲŲŲØ§ Ø¨ØŗØąØšØŠ Ø¨Ø§ŲØ§ØŗŲ
Ų
Ų ØŽŲØ§Ų Ø§ŲØ¨ØØĢ",
|
"find_them_fast": "ŲŲ
ŲŲŲ Ø§ŲØšØĢŲØą ØšŲŲŲØ§ Ø¨ØŗØąØšØŠ Ø¨Ø§ŲØ§ØŗŲ
Ų
Ų ØŽŲØ§Ų Ø§ŲØ¨ØØĢ",
|
||||||
|
"first": "Ø§ŲØ§ŲŲ",
|
||||||
"fix_incorrect_match": "ØĨØĩŲØ§Ø اŲŲ
ØˇØ§Ø¨ŲØŠ ØēŲØą Ø§ŲØĩØŲØØŠ",
|
"fix_incorrect_match": "ØĨØĩŲØ§Ø اŲŲ
ØˇØ§Ø¨ŲØŠ ØēŲØą Ø§ŲØĩØŲØØŠ",
|
||||||
"folder": "Ų
ØŦŲØ¯",
|
"folder": "Ų
ØŦŲØ¯",
|
||||||
"folder_not_found": "ŲŲ
ŲØĒŲ
Ø§ŲØšØĢŲØą ØšŲŲ Ø§ŲŲ
ØŦŲØ¯",
|
"folder_not_found": "ŲŲ
ŲØĒŲ
Ø§ŲØšØĢŲØą ØšŲŲ Ø§ŲŲ
ØŦŲØ¯",
|
||||||
"folders": "اŲŲ
ØŦŲØ¯Ø§ØĒ",
|
"folders": "اŲŲ
ØŦŲØ¯Ø§ØĒ",
|
||||||
"folders_feature_description": "ØĒØĩŲØ ØšØąØļ اŲŲ
ØŦŲØ¯ ŲŲØĩŲØą ŲŲ
ŲØ§ØˇØš اŲŲŲØ¯ŲŲ Ø§ŲŲ
ŲØŦŲØ¯ØŠ ØšŲŲ ŲØ¸Ø§Ų
اŲŲ
ŲŲØ§ØĒ",
|
"folders_feature_description": "ØĒØĩŲØ ØšØąØļ اŲŲ
ØŦŲØ¯ ŲŲØĩŲØą ŲŲ
ŲØ§ØˇØš اŲŲŲØ¯ŲŲ Ø§ŲŲ
ŲØŦŲØ¯ØŠ ØšŲŲ ŲØ¸Ø§Ų
اŲŲ
ŲŲØ§ØĒ",
|
||||||
|
"forgot_pin_code_question": "ŲŲ ŲØŗŲØĒ ØąŲ
Ø˛ اŲPIN Ø§ŲØŽØ§Øĩ Ø¨ŲØ",
|
||||||
"forward": "ØĨŲŲ Ø§ŲØŖŲ
اŲ
",
|
"forward": "ØĨŲŲ Ø§ŲØŖŲ
اŲ
",
|
||||||
"gcast_enabled": "ŲŲŲŲ ŲØ§ØŗØĒ",
|
"gcast_enabled": "ŲŲŲŲ ŲØ§ØŗØĒ",
|
||||||
"gcast_enabled_description": "ØĒŲŲŲ
ŲØ°Ų اŲŲ
ŲØ˛ØŠ بØĒØŲ
ŲŲ Ø§ŲŲ
ŲØ§ØąØ¯ Ø§ŲØŽØ§ØąØŦŲØŠ Ų
Ų Google ØØĒŲ ØĒØšŲ
Ų.",
|
"gcast_enabled_description": "ØĒŲŲŲ
ŲØ°Ų اŲŲ
ŲØ˛ØŠ بØĒØŲ
ŲŲ Ø§ŲŲ
ŲØ§ØąØ¯ Ø§ŲØŽØ§ØąØŦŲØŠ Ų
Ų Google ØØĒŲ ØĒØšŲ
Ų.",
|
||||||
@@ -1056,6 +1084,9 @@
|
|||||||
"haptic_feedback_switch": "ØĒŲ
ŲŲŲ ØąØ¯ŲØ¯ اŲŲØšŲ اŲŲŲ
ØŗŲØŠ",
|
"haptic_feedback_switch": "ØĒŲ
ŲŲŲ ØąØ¯ŲØ¯ اŲŲØšŲ اŲŲŲ
ØŗŲØŠ",
|
||||||
"haptic_feedback_title": "ØąØ¯ŲØ¯ ŲØšŲ ŲŲ
ØŗŲØŠ",
|
"haptic_feedback_title": "ØąØ¯ŲØ¯ ŲØšŲ ŲŲ
ØŗŲØŠ",
|
||||||
"has_quota": "Ų
ØØ¯Ø¯ Ø¨ØØĩØŠ",
|
"has_quota": "Ų
ØØ¯Ø¯ Ø¨ØØĩØŠ",
|
||||||
|
"hash_asset": "ØšŲ
Ų Hash ŲŲØŖØĩŲ (ŲŲŲ
ŲŲ)",
|
||||||
|
"hashed_assets": "ØŖØĩŲŲ (Ų
ŲŲØ§ØĒ) ØĒŲ
ØšŲ
Ų Hash ŲŲØ§",
|
||||||
|
"hashing": "ŲØĒŲ
ØšŲ
Ų Hash",
|
||||||
"header_settings_add_header_tip": "اØļØ§Ų ØąØ§Øŗ",
|
"header_settings_add_header_tip": "اØļØ§Ų ØąØ§Øŗ",
|
||||||
"header_settings_field_validator_msg": "اŲŲŲŲ
ØŠ ŲØ§ ŲŲ
ŲŲ Ø§Ų ØĒŲŲŲ ŲØ§ØąØēØŠ",
|
"header_settings_field_validator_msg": "اŲŲŲŲ
ØŠ ŲØ§ ŲŲ
ŲŲ Ø§Ų ØĒŲŲŲ ŲØ§ØąØēØŠ",
|
||||||
"header_settings_header_name_input": "Ø§ØŗŲ
Ø§ŲØąØŖØŗ",
|
"header_settings_header_name_input": "Ø§ØŗŲ
Ø§ŲØąØŖØŗ",
|
||||||
@@ -1069,9 +1100,9 @@
|
|||||||
"hide_password": "Ø§ØŽŲØ§ØĄ ŲŲŲ
ØŠ اŲŲ
ØąŲØą",
|
"hide_password": "Ø§ØŽŲØ§ØĄ ŲŲŲ
ØŠ اŲŲ
ØąŲØą",
|
||||||
"hide_person": "Ø§ØŽŲØ§ØĄ Ø§ŲØ´ØŽØĩ",
|
"hide_person": "Ø§ØŽŲØ§ØĄ Ø§ŲØ´ØŽØĩ",
|
||||||
"hide_unnamed_people": "ØĨØŽŲØ§ØĄ Ø§ŲØŖØ´ØŽØ§Øĩ بدŲŲ ØĨØŗŲ
",
|
"hide_unnamed_people": "ØĨØŽŲØ§ØĄ Ø§ŲØŖØ´ØŽØ§Øĩ بدŲŲ ØĨØŗŲ
",
|
||||||
"home_page_add_to_album_conflicts": "ØĒŲ
ØĒ ØĨØļØ§ŲØŠ {ØĒŲ
ØĒ ØĨØļØ§ŲØŠ} Ø§ŲØŖØĩŲŲ ØĨŲŲ Ø§ŲØŖŲبŲŲ
{Ø§ŲØŖŲبŲŲ
}.{ŲØ´Ų} Ø§ŲØŖØĩŲŲ Ų
ŲØŦŲØ¯ØŠ باŲŲØšŲ ŲŲ Ø§ŲØŖŲبŲŲ
.",
|
"home_page_add_to_album_conflicts": "ØĒŲ
ØĒ ØĨØļØ§ŲØŠ {added} ØŖØĩŲŲ ØĨŲŲ Ø§ŲØŖŲبŲŲ
{album}. {failed} ØŖØĩŲŲ Ų
ŲØŦŲØ¯ØŠ باŲŲØšŲ ŲŲ Ø§ŲØŖŲبŲŲ
.",
|
||||||
"home_page_add_to_album_err_local": "ŲØ§ ŲŲ
ŲŲ ØĨØļØ§ŲØŠ Ø§ŲØŖØĩŲŲ Ø§ŲŲ
ØŲŲØŠ ØĨŲŲ Ø§ŲØŖŲبŲŲ
اØĒ ØØĒŲ Ø§ŲØĸŲ Ø ØŗŲŲ ŲØĒØŽØˇŲ",
|
"home_page_add_to_album_err_local": "ŲØ§ ŲŲ
ŲŲ ØĨØļØ§ŲØŠ Ø§ŲØŖØĩŲŲ Ø§ŲŲ
ØŲŲØŠ ØĨŲŲ Ø§ŲØŖŲبŲŲ
اØĒ ØØĒŲ Ø§ŲØĸŲ Ø ØŗŲŲ ŲØĒØŽØˇŲ",
|
||||||
"home_page_add_to_album_success": "ØĒŲ
ØĒ ØĨØļØ§ŲØŠ {ØĒŲ
ØĒ ØĨØļØ§ŲØŠ} Ø§ŲØŖØĩŲŲ ØĨŲŲ Ø§ŲØŖŲبŲŲ
{Ø§ŲØŖŲبŲŲ
}.",
|
"home_page_add_to_album_success": "ØĒŲ
ØĒ ØĨØļØ§ŲØŠ {added} ØŖØĩŲŲ ØĨŲŲ Ø§ŲØŖŲبŲŲ
{album}.",
|
||||||
"home_page_album_err_partner": "ŲØ§ ŲŲ
ŲŲ ØĨØļØ§ŲØŠ ØŖØĩŲŲ Ø´ØąŲŲØŠ ØĨŲŲ ØŖŲØ¨ŲŲ
ØØĒŲ Ø§ŲØĸŲ Ø ØŗŲŲ ŲØĒØŽØˇŲ",
|
"home_page_album_err_partner": "ŲØ§ ŲŲ
ŲŲ ØĨØļØ§ŲØŠ ØŖØĩŲŲ Ø´ØąŲŲØŠ ØĨŲŲ ØŖŲØ¨ŲŲ
ØØĒŲ Ø§ŲØĸŲ Ø ØŗŲŲ ŲØĒØŽØˇŲ",
|
||||||
"home_page_archive_err_local": "ŲØ§ ŲŲ
ŲŲ ØŖØąØ´ŲØŠ Ø§ŲØŖØĩŲŲ Ø§ŲŲ
ØŲŲØŠ ØØĒŲ Ø§ŲØĸŲ Ø ØŗŲŲ ŲØĒØŽØˇŲ",
|
"home_page_archive_err_local": "ŲØ§ ŲŲ
ŲŲ ØŖØąØ´ŲØŠ Ø§ŲØŖØĩŲŲ Ø§ŲŲ
ØŲŲØŠ ØØĒŲ Ø§ŲØĸŲ Ø ØŗŲŲ ŲØĒØŽØˇŲ",
|
||||||
"home_page_archive_err_partner": "ŲØ§ ŲŲ
ŲŲ ØŖØąØ´ŲØŠ Ø§ŲØŖØĩŲŲ Ø§ŲØ´ØąŲŲØŠ Ø ØŗŲŲ ŲØĒØŽØˇŲ",
|
"home_page_archive_err_partner": "ŲØ§ ŲŲ
ŲŲ ØŖØąØ´ŲØŠ Ø§ŲØŖØĩŲŲ Ø§ŲØ´ØąŲŲØŠ Ø ØŗŲŲ ŲØĒØŽØˇŲ",
|
||||||
@@ -1087,7 +1118,9 @@
|
|||||||
"home_page_upload_err_limit": "ŲØ§ ŲŲ
ŲŲ ØĨŲØ§ ØĒØŲ
ŲŲ 30 ØŖØØ¯ Ø§ŲØŖØĩŲŲ ŲŲ ŲŲØĒ ŲØ§ØØ¯ Ø ØŗŲŲ ŲØĒØŽØˇŲ",
|
"home_page_upload_err_limit": "ŲØ§ ŲŲ
ŲŲ ØĨŲØ§ ØĒØŲ
ŲŲ 30 ØŖØØ¯ Ø§ŲØŖØĩŲŲ ŲŲ ŲŲØĒ ŲØ§ØØ¯ Ø ØŗŲŲ ŲØĒØŽØˇŲ",
|
||||||
"host": "اŲŲ
ØļŲŲ",
|
"host": "اŲŲ
ØļŲŲ",
|
||||||
"hour": "ØŗØ§ØšØŠ",
|
"hour": "ØŗØ§ØšØŠ",
|
||||||
|
"hours": "ØŗØ§ØšØ§ØĒ",
|
||||||
"id": "اŲŲ
ØšØąŲ",
|
"id": "اŲŲ
ØšØąŲ",
|
||||||
|
"idle": "؎اŲ
Ų",
|
||||||
"ignore_icloud_photos": "ØĒØŦاŲŲ ØĩŲØą iCloud",
|
"ignore_icloud_photos": "ØĒØŦاŲŲ ØĩŲØą iCloud",
|
||||||
"ignore_icloud_photos_description": "Ø§ŲØĩŲØą Ø§ŲŲ
ØŽØ˛ŲØŠ ŲŲ Cloud ŲŲ ŲØĒŲ
ØĒØŲ
ŲŲŲØ§ ØĨŲŲ ØŽØ§Ø¯Ų
Immich",
|
"ignore_icloud_photos_description": "Ø§ŲØĩŲØą Ø§ŲŲ
ØŽØ˛ŲØŠ ŲŲ Cloud ŲŲ ŲØĒŲ
ØĒØŲ
ŲŲŲØ§ ØĨŲŲ ØŽØ§Ø¯Ų
Immich",
|
||||||
"image": "ØĩŲØąØŠ",
|
"image": "ØĩŲØąØŠ",
|
||||||
@@ -1145,10 +1178,13 @@
|
|||||||
"language_no_results_title": "ŲŲ
ŲØĒŲ
Ø§ŲØšØĢŲØą ØšŲŲ ŲØēØ§ØĒ",
|
"language_no_results_title": "ŲŲ
ŲØĒŲ
Ø§ŲØšØĢŲØą ØšŲŲ ŲØēØ§ØĒ",
|
||||||
"language_search_hint": "Ø§ŲØ¨ØØĢ ØšŲ ŲØēØ§ØĒ...",
|
"language_search_hint": "Ø§ŲØ¨ØØĢ ØšŲ ŲØēØ§ØĒ...",
|
||||||
"language_setting_description": "ا؎ØĒØą ŲØēØĒŲ Ø§ŲŲ
ŲØļŲØŠ",
|
"language_setting_description": "ا؎ØĒØą ŲØēØĒŲ Ø§ŲŲ
ŲØļŲØŠ",
|
||||||
|
"large_files": "Ų
ŲŲØ§ØĒ ŲØ¨ŲØąØŠ",
|
||||||
|
"last": "Ø§ŲØ§ØŽŲØą",
|
||||||
"last_seen": "Ø§ØŽØą ظŲŲØą",
|
"last_seen": "Ø§ØŽØą ظŲŲØą",
|
||||||
"latest_version": "Ø§ØØ¯ØĢ اØĩØ¯Ø§Øą",
|
"latest_version": "Ø§ØØ¯ØĢ اØĩØ¯Ø§Øą",
|
||||||
"latitude": "ØŽØˇ Ø§ŲØšØąØļ",
|
"latitude": "ØŽØˇ Ø§ŲØšØąØļ",
|
||||||
"leave": "Ų
ØēØ§Ø¯ØąØŠ",
|
"leave": "Ų
ØēØ§Ø¯ØąØŠ",
|
||||||
|
"leave_album": "اØĒØąŲ Ø§ŲØ§ŲبŲŲ
",
|
||||||
"lens_model": "ŲŲ
ŲØ°ØŦ Ø§ŲØšØ¯ØŗØ§ØĒ",
|
"lens_model": "ŲŲ
ŲØ°ØŦ Ø§ŲØšØ¯ØŗØ§ØĒ",
|
||||||
"let_others_respond": "دؚ Ø§ŲØĸØŽØąŲŲ ŲØŗØĒØŦŲØ¨ŲŲ",
|
"let_others_respond": "دؚ Ø§ŲØĸØŽØąŲŲ ŲØŗØĒØŦŲØ¨ŲŲ",
|
||||||
"level": "اŲŲ
ØŗØĒŲŲ",
|
"level": "اŲŲ
ØŗØĒŲŲ",
|
||||||
@@ -1160,7 +1196,9 @@
|
|||||||
"library_page_sort_created": "ØĒØ§ØąŲØŽ Ø§ŲØĨŲØ´Ø§ØĄ",
|
"library_page_sort_created": "ØĒØ§ØąŲØŽ Ø§ŲØĨŲØ´Ø§ØĄ",
|
||||||
"library_page_sort_last_modified": "ØĸØŽØą ØĒؚدŲŲ",
|
"library_page_sort_last_modified": "ØĸØŽØą ØĒؚدŲŲ",
|
||||||
"library_page_sort_title": "ØšŲŲØ§Ų Ø§ŲØŖŲبŲŲ
",
|
"library_page_sort_title": "ØšŲŲØ§Ų Ø§ŲØŖŲبŲŲ
",
|
||||||
|
"licenses": "ØąŲØŽŲØĩ",
|
||||||
"light": "اŲŲ
ØļŲØĻ",
|
"light": "اŲŲ
ØļŲØĻ",
|
||||||
|
"like": "اؚØŦاب",
|
||||||
"like_deleted": "ØĒŲ
ØØ°Ų Ø§ŲØĨØšØŦاب",
|
"like_deleted": "ØĒŲ
ØØ°Ų Ø§ŲØĨØšØŦاب",
|
||||||
"link_motion_video": "ØąØ§Ø¨Øˇ ŲŲØ¯ŲŲ Ø§ŲØØąŲØŠ",
|
"link_motion_video": "ØąØ§Ø¨Øˇ ŲŲØ¯ŲŲ Ø§ŲØØąŲØŠ",
|
||||||
"link_to_oauth": "Ø§ŲØąØ¨Øˇ Ų
Øš OAuth",
|
"link_to_oauth": "Ø§ŲØąØ¨Øˇ Ų
Øš OAuth",
|
||||||
@@ -1168,7 +1206,9 @@
|
|||||||
"list": "ŲØ§ØĻŲ
ØŠ",
|
"list": "ŲØ§ØĻŲ
ØŠ",
|
||||||
"loading": "ØĒØŲ
ŲŲ",
|
"loading": "ØĒØŲ
ŲŲ",
|
||||||
"loading_search_results_failed": "ŲØ´Ų ØĒØŲ
ŲŲ ŲØĒØ§ØĻØŦ Ø§ŲØ¨ØØĢ",
|
"loading_search_results_failed": "ŲØ´Ų ØĒØŲ
ŲŲ ŲØĒØ§ØĻØŦ Ø§ŲØ¨ØØĢ",
|
||||||
|
"local": "Ų
ØŲŲŲ",
|
||||||
"local_asset_cast_failed": "ØēŲØą ŲØ§Ø¯Øą ØšŲŲ Ø¨ØĢ ØŖØĩŲ ŲŲ
ŲØĒŲ
ØĒØŲ
ŲŲŲ ØĨŲŲ Ø§ŲØŽØ§Ø¯Ų
",
|
"local_asset_cast_failed": "ØēŲØą ŲØ§Ø¯Øą ØšŲŲ Ø¨ØĢ ØŖØĩŲ ŲŲ
ŲØĒŲ
ØĒØŲ
ŲŲŲ ØĨŲŲ Ø§ŲØŽØ§Ø¯Ų
",
|
||||||
|
"local_assets": "ØŖŲØĩŲŲ (Ų
ŲŲØ§ØĒ) Ų
ØŲŲØŠ",
|
||||||
"local_network": "Ø´Ø¨ŲØŠ Ų
ØŲŲØŠ",
|
"local_network": "Ø´Ø¨ŲØŠ Ų
ØŲŲØŠ",
|
||||||
"local_network_sheet_info": "ØŗŲØĒØĩŲ Ø§ŲØĒØˇØ¨ŲŲ Ø¨Ø§ŲØŽØ§Ø¯Ų
Ų
Ų ØŽŲØ§Ų ØšŲŲØ§Ų URL ŲØ°Ø§ ØšŲØ¯ Ø§ØŗØĒ؎داŲ
Ø´Ø¨ŲØŠ Wi-Fi اŲŲ
ØØ¯Ø¯ØŠ",
|
"local_network_sheet_info": "ØŗŲØĒØĩŲ Ø§ŲØĒØˇØ¨ŲŲ Ø¨Ø§ŲØŽØ§Ø¯Ų
Ų
Ų ØŽŲØ§Ų ØšŲŲØ§Ų URL ŲØ°Ø§ ØšŲØ¯ Ø§ØŗØĒ؎داŲ
Ø´Ø¨ŲØŠ Wi-Fi اŲŲ
ØØ¯Ø¯ØŠ",
|
||||||
"location_permission": "Ø§Ø°Ų Ø§ŲŲ
ŲŲØš",
|
"location_permission": "Ø§Ø°Ų Ø§ŲŲ
ŲŲØš",
|
||||||
@@ -1225,7 +1265,7 @@
|
|||||||
"manage_your_devices": "ØĨØ¯Ø§ØąØŠ Ø§ŲØŖØŦŲØ˛ØŠ Ø§ŲØĒŲ ØĒŲ
ØĒØŗØŦŲŲ Ø§ŲØ¯ØŽŲŲ ØĨŲŲŲØ§",
|
"manage_your_devices": "ØĨØ¯Ø§ØąØŠ Ø§ŲØŖØŦŲØ˛ØŠ Ø§ŲØĒŲ ØĒŲ
ØĒØŗØŦŲŲ Ø§ŲØ¯ØŽŲŲ ØĨŲŲŲØ§",
|
||||||
"manage_your_oauth_connection": "ØĨØ¯Ø§ØąØŠ اØĒØĩØ§Ų OAuth Ø§ŲØŽØ§Øĩ بŲ",
|
"manage_your_oauth_connection": "ØĨØ¯Ø§ØąØŠ اØĒØĩØ§Ų OAuth Ø§ŲØŽØ§Øĩ بŲ",
|
||||||
"map": "Ø§ŲØŽØąŲØˇØŠ",
|
"map": "Ø§ŲØŽØąŲØˇØŠ",
|
||||||
"map_assets_in_bounds": "{count} ØĩŲØą",
|
"map_assets_in_bounds": "{count, plural, =0 {ŲØ§ŲŲØŦد ØĩŲØą ŲŲ ŲØ°Ų اŲŲ
ŲØˇŲØŠ} one {# ØĩŲØąØŠ} other {# ØĩŲØą}}",
|
||||||
"map_cannot_get_user_location": "ŲØ§ ŲŲ
ŲŲ Ø§ŲØØĩŲŲ ØšŲŲ Ų
Ųب𠨧ŲŲ
ØŗØĒ؎دŲ
",
|
"map_cannot_get_user_location": "ŲØ§ ŲŲ
ŲŲ Ø§ŲØØĩŲŲ ØšŲŲ Ų
Ųب𠨧ŲŲ
ØŗØĒ؎دŲ
",
|
||||||
"map_location_dialog_yes": "ŲØšŲ
",
|
"map_location_dialog_yes": "ŲØšŲ
",
|
||||||
"map_location_picker_page_use_location": "Ø§ØŗØĒ؎دŲ
ŲØ°Ø§ اŲŲ
ŲŲØš",
|
"map_location_picker_page_use_location": "Ø§ØŗØĒ؎دŲ
ŲØ°Ø§ اŲŲ
ŲŲØš",
|
||||||
@@ -1233,7 +1273,6 @@
|
|||||||
"map_location_service_disabled_title": "؎دŲ
ØŠ اŲŲ
ŲŲØš Ų
ØšØˇŲ",
|
"map_location_service_disabled_title": "؎دŲ
ØŠ اŲŲ
ŲŲØš Ų
ØšØˇŲ",
|
||||||
"map_marker_for_images": "ØšŲØ§Ų
ØŠ Ø§ŲØŽØąŲØˇØŠ ŲŲØĩŲØą Ø§ŲŲ
ŲØĒŲØˇØŠ ŲŲ {city}Ø {country}",
|
"map_marker_for_images": "ØšŲØ§Ų
ØŠ Ø§ŲØŽØąŲØˇØŠ ŲŲØĩŲØą Ø§ŲŲ
ŲØĒŲØˇØŠ ŲŲ {city}Ø {country}",
|
||||||
"map_marker_with_image": "ØšŲØ§Ų
ØŠ Ø§ŲØŽØąŲØˇØŠ Ų
Øš Ø§ŲØĩŲØąØŠ",
|
"map_marker_with_image": "ØšŲØ§Ų
ØŠ Ø§ŲØŽØąŲØˇØŠ Ų
Øš Ø§ŲØĩŲØąØŠ",
|
||||||
"map_no_assets_in_bounds": "ŲØ§ ØĒŲØŦد ØĩŲØą ŲŲ ŲØ°Ø§ اŲŲ
ØŦاŲ",
|
|
||||||
"map_no_location_permission_content": "ŲŲØ§Ų ØØ§ØŦØŠ ØĨŲŲ ØĨØ°Ų Ø§ŲŲ
ŲŲØš ŲØšØąØļ Ø§ŲØŖØĩŲŲ Ų
Ų Ų
ŲŲØšŲ Ø§ŲØØ§ŲŲ.ŲŲ ØĒØąŲØ¯ Ø§ŲØŗŲ
Ø§Ø Ø¨Ų Ø§ŲØĸŲØ",
|
"map_no_location_permission_content": "ŲŲØ§Ų ØØ§ØŦØŠ ØĨŲŲ ØĨØ°Ų Ø§ŲŲ
ŲŲØš ŲØšØąØļ Ø§ŲØŖØĩŲŲ Ų
Ų Ų
ŲŲØšŲ Ø§ŲØØ§ŲŲ.ŲŲ ØĒØąŲØ¯ Ø§ŲØŗŲ
Ø§Ø Ø¨Ų Ø§ŲØĸŲØ",
|
||||||
"map_no_location_permission_title": "ØĒŲ
ØąŲØļ ØĨØ°Ų Ø§ŲŲ
ŲŲØš",
|
"map_no_location_permission_title": "ØĒŲ
ØąŲØļ ØĨØ°Ų Ø§ŲŲ
ŲŲØš",
|
||||||
"map_settings": "ØĨؚداداØĒ Ø§ŲØŽØąŲØˇØŠ",
|
"map_settings": "ØĨؚداداØĒ Ø§ŲØŽØąŲØˇØŠ",
|
||||||
@@ -1270,6 +1309,7 @@
|
|||||||
"merged_people_count": "دŲ
ØŦ {count, plural, one {Ø´ØŽØĩ ŲØ§ØØ¯} other {# ØŖØ´ØŽØ§Øĩ}}",
|
"merged_people_count": "دŲ
ØŦ {count, plural, one {Ø´ØŽØĩ ŲØ§ØØ¯} other {# ØŖØ´ØŽØ§Øĩ}}",
|
||||||
"minimize": "ØĒØĩØēŲØą",
|
"minimize": "ØĒØĩØēŲØą",
|
||||||
"minute": "دŲŲŲØŠ",
|
"minute": "دŲŲŲØŠ",
|
||||||
|
"minutes": "Ø¯ŲØ§ØĻŲ",
|
||||||
"missing": "اŲŲ
ŲŲŲØ¯ØŠ",
|
"missing": "اŲŲ
ŲŲŲØ¯ØŠ",
|
||||||
"model": "ŲŲ
ŲØ°ØŦ",
|
"model": "ŲŲ
ŲØ°ØŦ",
|
||||||
"month": "Ø´ŲØą",
|
"month": "Ø´ŲØą",
|
||||||
@@ -1289,6 +1329,9 @@
|
|||||||
"my_albums": "ØŖŲØ¨ŲŲ
اØĒŲ",
|
"my_albums": "ØŖŲØ¨ŲŲ
اØĒŲ",
|
||||||
"name": "Ø§ŲØ§ØŗŲ
",
|
"name": "Ø§ŲØ§ØŗŲ
",
|
||||||
"name_or_nickname": "Ø§ŲØ§ØŗŲ
ØŖŲ Ø§ŲŲŲØ¨",
|
"name_or_nickname": "Ø§ŲØ§ØŗŲ
ØŖŲ Ø§ŲŲŲØ¨",
|
||||||
|
"network_requirement_photos_upload": "Ø§ØŗØĒ؎داŲ
Ø¨ŲØ§ŲاØĒ اŲŲØ§ØĒŲ Ø§ŲŲ
ØŲ
ŲŲ ŲØšŲ
Ų ŲØŗØŽØŠ Ø§ØØĒŲØ§ØˇŲØŠ ŲŲØĩŲØą",
|
||||||
|
"network_requirement_videos_upload": "Ø§ØŗØĒ؎داŲ
Ø¨ŲØ§ŲاØĒ اŲŲØ§ØĒŲ Ø§ŲŲ
ØŲ
ŲŲ ŲØšŲ
Ų ŲØŗØŽØŠ Ø§ØØĒŲØ§ØˇŲØŠ ŲŲ
ŲØ§ØˇØš اŲŲŲØ¯ŲŲ",
|
||||||
|
"network_requirements_updated": "ØĒŲ
ØĒØēŲŲØą Ų
ØĒØˇŲØ¨Ø§ØĒ Ø§ŲØ´Ø¨ŲØŠØ ŲØĒŲ
ØĨؚاد؊ ØĒØšŲŲŲ ŲØ§ØĻŲ
ØŠ Ø§ŲØĒØ¸Ø§Øą اŲŲØŗØŽ Ø§ŲØ§ØØĒŲØ§ØˇŲ",
|
||||||
"networking_settings": "Ø§ŲØ´Ø¨ŲاØĒ",
|
"networking_settings": "Ø§ŲØ´Ø¨ŲاØĒ",
|
||||||
"networking_subtitle": "ØĨØ¯Ø§ØąØŠ ØĨؚداداØĒ ŲŲØˇØŠ Ø§ŲØŽØ§Ø¯Ų
اŲŲŲØ§ØĻŲØŠ",
|
"networking_subtitle": "ØĨØ¯Ø§ØąØŠ ØĨؚداداØĒ ŲŲØˇØŠ Ø§ŲØŽØ§Ø¯Ų
اŲŲŲØ§ØĻŲØŠ",
|
||||||
"never": "ØŖØ¨Ø¯Ø§Ų",
|
"never": "ØŖØ¨Ø¯Ø§Ų",
|
||||||
@@ -1324,6 +1367,7 @@
|
|||||||
"no_results": "ŲØ§ ŲŲØŦد ŲØĒØ§ØĻØŦ",
|
"no_results": "ŲØ§ ŲŲØŦد ŲØĒØ§ØĻØŦ",
|
||||||
"no_results_description": "ØŦØąØ¨ ŲŲŲ
ØŠ ØąØĻŲØŗŲØŠ Ų
ØąØ§Ø¯ŲØŠ ØŖŲ ØŖŲØĢØą ØšŲ
ŲŲ
ŲØŠ",
|
"no_results_description": "ØŦØąØ¨ ŲŲŲ
ØŠ ØąØĻŲØŗŲØŠ Ų
ØąØ§Ø¯ŲØŠ ØŖŲ ØŖŲØĢØą ØšŲ
ŲŲ
ŲØŠ",
|
||||||
"no_shared_albums_message": "ŲŲ
بØĨŲØ´Ø§ØĄ ØŖŲØ¨ŲŲ
ŲŲ
Ø´Ø§ØąŲØŠ Ø§ŲØĩŲØą ŲŲ
ŲØ§ØˇØš اŲŲŲØ¯ŲŲ Ų
Øš Ø§ŲØŖØ´ØŽØ§Øĩ ŲŲ Ø´Ø¨ŲØĒŲ",
|
"no_shared_albums_message": "ŲŲ
بØĨŲØ´Ø§ØĄ ØŖŲØ¨ŲŲ
ŲŲ
Ø´Ø§ØąŲØŠ Ø§ŲØĩŲØą ŲŲ
ŲØ§ØˇØš اŲŲŲØ¯ŲŲ Ų
Øš Ø§ŲØŖØ´ØŽØ§Øĩ ŲŲ Ø´Ø¨ŲØĒŲ",
|
||||||
|
"no_uploads_in_progress": "ŲØ§ ŲŲØŦد Ø§Ų Ų
ŲŲØ§ØĒ ŲŲØ¯ Ø§ŲØąŲØš",
|
||||||
"not_in_any_album": "ŲŲØŗØĒ ŲŲ ØŖŲ ØŖŲØ¨ŲŲ
",
|
"not_in_any_album": "ŲŲØŗØĒ ŲŲ ØŖŲ ØŖŲØ¨ŲŲ
",
|
||||||
"not_selected": "ŲŲ
ŲØŽØĒØ§Øą",
|
"not_selected": "ŲŲ
ŲØŽØĒØ§Øą",
|
||||||
"note_apply_storage_label_to_previously_uploaded assets": "Ų
ŲØ§ØØ¸ØŠ: ŲØĒØˇØ¨ŲŲ ØŗŲ
ØŠ Ø§ŲØĒØŽØ˛ŲŲ ØšŲŲ Ø§ŲŲ
ØØĒŲŲØ§ØĒ Ø§ŲØĒŲ ØĒŲ
ØąŲØšŲا Ų
ØŗØ¨ŲŲØ§Ø ŲŲ
بØĒØ´ØēŲŲ",
|
"note_apply_storage_label_to_previously_uploaded assets": "Ų
ŲØ§ØØ¸ØŠ: ŲØĒØˇØ¨ŲŲ ØŗŲ
ØŠ Ø§ŲØĒØŽØ˛ŲŲ ØšŲŲ Ø§ŲŲ
ØØĒŲŲØ§ØĒ Ø§ŲØĒŲ ØĒŲ
ØąŲØšŲا Ų
ØŗØ¨ŲŲØ§Ø ŲŲ
بØĒØ´ØēŲŲ",
|
||||||
@@ -1339,6 +1383,7 @@
|
|||||||
"oauth": "OAuth",
|
"oauth": "OAuth",
|
||||||
"official_immich_resources": "اŲŲ
ŲØ§ØąØ¯ Ø§ŲØąØŗŲ
ŲØŠ ŲØ´ØąŲØŠ Immich",
|
"official_immich_resources": "اŲŲ
ŲØ§ØąØ¯ Ø§ŲØąØŗŲ
ŲØŠ ŲØ´ØąŲØŠ Immich",
|
||||||
"offline": "ØēŲØą Ų
ØĒØĩŲ",
|
"offline": "ØēŲØą Ų
ØĒØĩŲ",
|
||||||
|
"offset": "Ø§Ø˛Ø§ØØŠ",
|
||||||
"ok": "ŲØšŲ
",
|
"ok": "ŲØšŲ
",
|
||||||
"oldest_first": "Ø§ŲØŖŲدŲ
ØŖŲŲØ§",
|
"oldest_first": "Ø§ŲØŖŲدŲ
ØŖŲŲØ§",
|
||||||
"on_this_device": "ØšŲŲ ŲØ°Ø§ Ø§ŲØŦŲØ§Ø˛",
|
"on_this_device": "ØšŲŲ ŲØ°Ø§ Ø§ŲØŦŲØ§Ø˛",
|
||||||
@@ -1361,6 +1406,7 @@
|
|||||||
"original": "ØŖØĩŲŲ",
|
"original": "ØŖØĩŲŲ",
|
||||||
"other": "ØŖØŽØąŲ",
|
"other": "ØŖØŽØąŲ",
|
||||||
"other_devices": "ØŖØŦŲØ˛ØŠ ØŖØŽØąŲ",
|
"other_devices": "ØŖØŦŲØ˛ØŠ ØŖØŽØąŲ",
|
||||||
|
"other_entities": "ŲŲØ§ŲاØĒ ØŖØŽØąŲ",
|
||||||
"other_variables": "Ų
ØĒØēبਧØĒ ØŖØŽØąŲ",
|
"other_variables": "Ų
ØĒØēبਧØĒ ØŖØŽØąŲ",
|
||||||
"owned": "Ų
Ų
ŲŲŲØŠ",
|
"owned": "Ų
Ų
ŲŲŲØŠ",
|
||||||
"owner": "اŲŲ
اŲŲ",
|
"owner": "اŲŲ
اŲŲ",
|
||||||
@@ -1415,7 +1461,10 @@
|
|||||||
"permission_onboarding_permission_limited": "ØĨØ°Ų Ų
ØØ¯Ųد. ŲŲØŗŲ
Ø§Ø Ø¨Ø§ŲŲØŗØŽ Ø§ŲØ§ØØĒŲØ§ØˇŲ ŲŲØĒØˇØ¨ŲŲ ŲØĨØ¯Ø§ØąØŠ Ų
ØŦŲ
ŲØšØŠ Ø§ŲŲ
ØšØąØļ باŲŲØ§Ų
ŲØ اŲ
ŲØ ØŖØ°ŲŲØ§ØĒ Ø§ŲØĩŲØą ŲØ§ŲŲŲØ¯ŲŲ ŲŲ Ø§ŲØĨؚداداØĒ.",
|
"permission_onboarding_permission_limited": "ØĨØ°Ų Ų
ØØ¯Ųد. ŲŲØŗŲ
Ø§Ø Ø¨Ø§ŲŲØŗØŽ Ø§ŲØ§ØØĒŲØ§ØˇŲ ŲŲØĒØˇØ¨ŲŲ ŲØĨØ¯Ø§ØąØŠ Ų
ØŦŲ
ŲØšØŠ Ø§ŲŲ
ØšØąØļ باŲŲØ§Ų
ŲØ اŲ
ŲØ ØŖØ°ŲŲØ§ØĒ Ø§ŲØĩŲØą ŲØ§ŲŲŲØ¯ŲŲ ŲŲ Ø§ŲØĨؚداداØĒ.",
|
||||||
"permission_onboarding_request": "ŲØĒØˇŲب Ø§ŲØĒØˇØ¨ŲŲ ØĨذŲŲØ§ ŲØšØąØļ Ø§ŲØĩŲØą ŲŲ
ŲØ§ØˇØš اŲŲŲØ¯ŲŲ Ø§ŲØŽØ§ØĩØŠ بŲ.",
|
"permission_onboarding_request": "ŲØĒØˇŲب Ø§ŲØĒØˇØ¨ŲŲ ØĨذŲŲØ§ ŲØšØąØļ Ø§ŲØĩŲØą ŲŲ
ŲØ§ØˇØš اŲŲŲØ¯ŲŲ Ø§ŲØŽØ§ØĩØŠ بŲ.",
|
||||||
"person": "Ø´ØŽØĩ",
|
"person": "Ø´ØŽØĩ",
|
||||||
"person_birthdate": "ØĒØ§ØąŲØŽ Ø§ŲŲ
ŲŲØ§Ø¯ {Ø§ŲØĒØ§ØąŲØŽ}",
|
"person_age_months": "{months, plural, one {# Ø´ŲØą} other {# Ø§Ø´ŲØą}} Ų
Ų Ø§ŲØšŲ
Øą",
|
||||||
|
"person_age_year_months": "1 ؚاŲ
, {months, plural, one {# Ø´ŲØą} other {# Ø§Ø´ŲØą}} Ų
Ų Ø§ŲØšŲ
Øą",
|
||||||
|
"person_age_years": "{years, plural, other {# Ø§ØšŲØ§Ų
}} Ų
Ų Ø§ŲØšŲ
Øą",
|
||||||
|
"person_birthdate": "ŲŲØ¯ ŲŲ {date}",
|
||||||
"person_hidden": "{name}{hidden, select, true { (Ų
ØŽŲŲ)} other {}}",
|
"person_hidden": "{name}{hidden, select, true { (Ų
ØŽŲŲ)} other {}}",
|
||||||
"photo_shared_all_users": "ŲØ¨Ø¯Ų ØŖŲŲ Ø´Ø§ØąŲØĒ ØĩŲØąŲ Ų
Øš ØŦŲ
ب𠨧ŲŲ
ØŗØĒ؎دŲ
ŲŲ ØŖŲ ŲŲØŗ ŲØ¯ŲŲ ØŖŲ Ų
ØŗØĒ؎دŲ
ŲŲŲ
Ø´Ø§ØąŲØŠ Ų
ØšŲ.",
|
"photo_shared_all_users": "ŲØ¨Ø¯Ų ØŖŲŲ Ø´Ø§ØąŲØĒ ØĩŲØąŲ Ų
Øš ØŦŲ
ب𠨧ŲŲ
ØŗØĒ؎دŲ
ŲŲ ØŖŲ ŲŲØŗ ŲØ¯ŲŲ ØŖŲ Ų
ØŗØĒ؎دŲ
ŲŲŲ
Ø´Ø§ØąŲØŠ Ų
ØšŲ.",
|
||||||
"photos": "Ø§ŲØĩŲØą",
|
"photos": "Ø§ŲØĩŲØą",
|
||||||
@@ -1492,6 +1541,7 @@
|
|||||||
"purchase_server_description_2": "ØØ§ŲØŠ Ø§ŲØ¯Ø§ØšŲ
",
|
"purchase_server_description_2": "ØØ§ŲØŠ Ø§ŲØ¯Ø§ØšŲ
",
|
||||||
"purchase_server_title": "Ø§ŲØŽØ§Ø¯Ų
",
|
"purchase_server_title": "Ø§ŲØŽØ§Ø¯Ų
",
|
||||||
"purchase_settings_server_activated": "ŲØĒŲ
ØĨØ¯Ø§ØąØŠ Ų
ŲØĒØ§Ø Ų
ŲØĒØŦ Ø§ŲØŽØ§Ø¯Ų
Ų
Ų ŲØ¨Ų Ų
Ø¯ŲØą Ø§ŲŲØ¸Ø§Ų
",
|
"purchase_settings_server_activated": "ŲØĒŲ
ØĨØ¯Ø§ØąØŠ Ų
ŲØĒØ§Ø Ų
ŲØĒØŦ Ø§ŲØŽØ§Ø¯Ų
Ų
Ų ŲØ¨Ų Ų
Ø¯ŲØą Ø§ŲŲØ¸Ø§Ų
",
|
||||||
|
"queue_status": "ŲØĒŲ
Ø§ŲØ§ØļØ§ŲØŠ Ø§ŲŲ ŲØ§ØĻŲ
ØŠ Ø§ŲØĒØ¸Ø§Øą اŲŲØŗØŽ Ø§ŲØ§ØØĒŲØ§ØˇŲ {count}/{total}",
|
||||||
"rating": "ØĒŲŲŲŲ
ŲØŦŲ
Ų",
|
"rating": "ØĒŲŲŲŲ
ŲØŦŲ
Ų",
|
||||||
"rating_clear": "Ų
ØŗØ Ø§ŲØĒŲŲŲŲ
",
|
"rating_clear": "Ų
ØŗØ Ø§ŲØĒŲŲŲŲ
",
|
||||||
"rating_count": "{count, plural, one {# ŲØŦŲ
ØŠ} other {# ŲØŦŲŲ
}}",
|
"rating_count": "{count, plural, one {# ŲØŦŲ
ØŠ} other {# ŲØŦŲŲ
}}",
|
||||||
@@ -1520,6 +1570,8 @@
|
|||||||
"refreshing_faces": "ØŦØ§ØąŲ ØĒØØ¯ŲØĢ اŲŲØŦŲŲ",
|
"refreshing_faces": "ØŦØ§ØąŲ ØĒØØ¯ŲØĢ اŲŲØŦŲŲ",
|
||||||
"refreshing_metadata": "ØŦØ§ØąŲ ØĒØØ¯ŲØĢ Ø§ŲØ¨ŲØ§ŲØ§ØĒ اŲŲØĩŲŲØŠ",
|
"refreshing_metadata": "ØŦØ§ØąŲ ØĒØØ¯ŲØĢ Ø§ŲØ¨ŲØ§ŲØ§ØĒ اŲŲØĩŲŲØŠ",
|
||||||
"regenerating_thumbnails": "ØŦØ§ØąŲ ØĒØŦØ¯ŲØ¯ Ø§ŲØĩŲØą Ø§ŲŲ
ØĩØēØąØŠ",
|
"regenerating_thumbnails": "ØŦØ§ØąŲ ØĒØŦØ¯ŲØ¯ Ø§ŲØĩŲØą Ø§ŲŲ
ØĩØēØąØŠ",
|
||||||
|
"remote": "Ø¨ØšŲØ¯",
|
||||||
|
"remote_assets": "Ø§ŲØŖŲØĩŲŲ Ø§ŲØ¨ØšŲد؊",
|
||||||
"remove": "ØĨØ˛Ø§ŲØŠ",
|
"remove": "ØĨØ˛Ø§ŲØŠ",
|
||||||
"remove_assets_album_confirmation": "ŲŲ ØŖŲØĒ Ų
ØĒØŖŲØ¯ ØŖŲŲ ØĒØąŲØ¯ ØĨØ˛Ø§ŲØŠ {count, plural, one {# اŲŲ
ØØĒŲŲ} other {# اŲŲ
ØØĒŲŲØ§ØĒ}} Ų
Ų Ø§ŲØŖŲبŲŲ
Ø",
|
"remove_assets_album_confirmation": "ŲŲ ØŖŲØĒ Ų
ØĒØŖŲØ¯ ØŖŲŲ ØĒØąŲØ¯ ØĨØ˛Ø§ŲØŠ {count, plural, one {# اŲŲ
ØØĒŲŲ} other {# اŲŲ
ØØĒŲŲØ§ØĒ}} Ų
Ų Ø§ŲØŖŲبŲŲ
Ø",
|
||||||
"remove_assets_shared_link_confirmation": "ŲŲ ØŖŲØĒ Ų
ØĒØŖŲØ¯ ØŖŲŲ ØĒØąŲØ¯ ØĨØ˛Ø§ŲØŠ {count, plural, one {# اŲŲ
ØØĒŲŲ} other {# اŲŲ
ØØĒŲŲØ§ØĒ}} Ų
Ų ØąØ§Ø¨Øˇ اŲŲ
Ø´Ø§ØąŲØŠ ŲØ°Ø§Ø",
|
"remove_assets_shared_link_confirmation": "ŲŲ ØŖŲØĒ Ų
ØĒØŖŲØ¯ ØŖŲŲ ØĒØąŲØ¯ ØĨØ˛Ø§ŲØŠ {count, plural, one {# اŲŲ
ØØĒŲŲ} other {# اŲŲ
ØØĒŲŲØ§ØĒ}} Ų
Ų ØąØ§Ø¨Øˇ اŲŲ
Ø´Ø§ØąŲØŠ ŲØ°Ø§Ø",
|
||||||
@@ -1527,6 +1579,7 @@
|
|||||||
"remove_custom_date_range": "ØĨØ˛Ø§ŲØŠ Ø§ŲŲØˇØ§Ų Ø§ŲØ˛Ų
ŲŲ Ø§ŲŲ
ØŽØĩØĩ",
|
"remove_custom_date_range": "ØĨØ˛Ø§ŲØŠ Ø§ŲŲØˇØ§Ų Ø§ŲØ˛Ų
ŲŲ Ø§ŲŲ
ØŽØĩØĩ",
|
||||||
"remove_deleted_assets": "ØĨØ˛Ø§ŲØŠ Ø§ŲŲ
ŲŲØ§ØĒ Ø§ŲØēŲØą Ų
ØĒØĩŲØŠ",
|
"remove_deleted_assets": "ØĨØ˛Ø§ŲØŠ Ø§ŲŲ
ŲŲØ§ØĒ Ø§ŲØēŲØą Ų
ØĒØĩŲØŠ",
|
||||||
"remove_from_album": "ØĨØ˛Ø§ŲØŠ Ų
Ų Ø§ŲØŖŲبŲŲ
",
|
"remove_from_album": "ØĨØ˛Ø§ŲØŠ Ų
Ų Ø§ŲØŖŲبŲŲ
",
|
||||||
|
"remove_from_album_action_prompt": "ØĒŲ
Ø§Ø˛Ø§ŲØŠ {count} Ų
Ų Ø§ŲØ§ŲبŲŲ
",
|
||||||
"remove_from_favorites": "ØĨØ˛Ø§ŲØŠ Ų
Ų Ø§ŲŲ
ŲØļŲØŠ",
|
"remove_from_favorites": "ØĨØ˛Ø§ŲØŠ Ų
Ų Ø§ŲŲ
ŲØļŲØŠ",
|
||||||
"remove_from_lock_folder_action_prompt": "{count} ØŖŲŲŲ Ų
Ų Ø§ŲŲ
ØŦŲØ¯ اŲŲ
ŲŲŲ",
|
"remove_from_lock_folder_action_prompt": "{count} ØŖŲŲŲ Ų
Ų Ø§ŲŲ
ØŦŲØ¯ اŲŲ
ŲŲŲ",
|
||||||
"remove_from_locked_folder": "Ø§Ø˛Ø§ŲØŠ Ų
Ų Ø§ŲŲ
ØŦŲØ¯ اŲŲ
ŲŲŲ",
|
"remove_from_locked_folder": "Ø§Ø˛Ø§ŲØŠ Ų
Ų Ø§ŲŲ
ØŦŲØ¯ اŲŲ
ŲŲŲ",
|
||||||
@@ -1556,19 +1609,28 @@
|
|||||||
"reset_password": "ØĨؚاد؊ ØĒØšŲŲŲ ŲŲŲ
ØŠ اŲŲ
ØąŲØą",
|
"reset_password": "ØĨؚاد؊ ØĒØšŲŲŲ ŲŲŲ
ØŠ اŲŲ
ØąŲØą",
|
||||||
"reset_people_visibility": "ØĨؚاد؊ ØļØ¨Øˇ ظŲŲØą Ø§ŲØŖØ´ØŽØ§Øĩ",
|
"reset_people_visibility": "ØĨؚاد؊ ØļØ¨Øˇ ظŲŲØą Ø§ŲØŖØ´ØŽØ§Øĩ",
|
||||||
"reset_pin_code": "اؚاد؊ ØĒØšŲŲŲ ØąŲ
Ø˛ PIN",
|
"reset_pin_code": "اؚاد؊ ØĒØšŲŲŲ ØąŲ
Ø˛ PIN",
|
||||||
|
"reset_pin_code_description": "اذا ŲØŗŲØĒ ØąŲ
Ø˛ اŲPIN Ø§ŲØŽØ§Øĩ Ø¨ŲØ باŲ
ŲØ§ŲŲ Ø§ŲØĒŲØ§ØĩŲ Ų
Øš Ų
Ø¯ŲØą Ø§Ų؎ادŲ
ŲØ¯ŲŲ ŲØ§ØšØ§Ø¯ØŠ ØĒØšŲŲŲŲ",
|
||||||
|
"reset_pin_code_success": "ØĒŲ
اؚاد؊ ØĒØšŲŲŲ ØąŲ
Ø˛ اŲPIN Ø¨ŲØŦاØ",
|
||||||
|
"reset_pin_code_with_password": "ŲŲ
ŲŲŲ Ø¯Ø§ØĻŲ
ا اؚاد؊ ØĒØšŲŲŲ ØąŲ
Ø˛ اŲPIN Ø§ŲØŽØ§Øĩ Ø¨Ų ØšŲ ØˇØąŲŲ ŲŲŲ
ØŠ اŲŲ
ØąŲØą Ø§Ų؎اØĩØŠ بŲ",
|
||||||
|
"reset_sqlite": "ØĨؚاد؊ ØĒØšŲŲŲ ŲØ§ØšØ¯ØŠ Ø¨ŲØ§ŲاØĒ SQLite",
|
||||||
|
"reset_sqlite_confirmation": "ŲŲ ØŖŲØĒ Ų
ØĒØŖŲØ¯ Ų
Ų ØąØēبØĒŲ ŲŲ ØĨؚاد؊ ØļØ¨Øˇ ŲØ§ØšØ¯ØŠ Ø¨ŲØ§ŲاØĒ SQLiteØ ØŗØĒØØĒØ§ØŦ ØĨŲŲ ØĒØŗØŦŲŲ Ø§ŲØŽØąŲØŦ ØĢŲ
ØĒØŗØŦŲŲ Ø§ŲØ¯ØŽŲŲ Ų
ØąØŠ ØŖØŽØąŲ ŲØĨؚاد؊ Ų
Ø˛Ø§Ų
ŲØŠ Ø§ŲØ¨ŲØ§ŲØ§ØĒ",
|
||||||
|
"reset_sqlite_success": "ØĒŲ
ØĨؚاد؊ ØĒØšŲŲŲ ŲØ§ØšØ¯ØŠ Ø¨ŲØ§ŲاØĒ SQLite Ø¨ŲØŦاØ",
|
||||||
"reset_to_default": "ØĨؚاد؊ Ø§ŲØĒØšŲŲŲ ØĨŲŲ Ø§ŲØ§ŲØĒØąØ§ØļŲ",
|
"reset_to_default": "ØĨؚاد؊ Ø§ŲØĒØšŲŲŲ ØĨŲŲ Ø§ŲØ§ŲØĒØąØ§ØļŲ",
|
||||||
"resolve_duplicates": "Ų
ØšØ§ŲØŦØŠ اŲŲØŗØŽ اŲŲ
ŲØąØąØŠ",
|
"resolve_duplicates": "Ų
ØšØ§ŲØŦØŠ اŲŲØŗØŽ اŲŲ
ŲØąØąØŠ",
|
||||||
"resolved_all_duplicates": "ØĒŲ
ØŲ ØŦŲ
ب𠨧بĒŲØąØ§ØąØ§ØĒ",
|
"resolved_all_duplicates": "ØĒŲ
ØŲ ØŦŲ
ب𠨧بĒŲØąØ§ØąØ§ØĒ",
|
||||||
"restore": "Ø§ŲØ§ØŗØĒØšØ§Ø¯Ų Ų
Ų ØŗŲØŠ Ø§ŲŲ
ŲŲ
ŲØ§ØĒ",
|
"restore": "Ø§ŲØ§ØŗØĒØšØ§Ø¯Ų Ų
Ų ØŗŲØŠ Ø§ŲŲ
ŲŲ
ŲØ§ØĒ",
|
||||||
"restore_all": "Ø§ØŗØĒؚاد؊ اŲŲŲ",
|
"restore_all": "Ø§ØŗØĒؚاد؊ اŲŲŲ",
|
||||||
|
"restore_trash_action_prompt": "ØĒŲ
Ø§ØŗØĒؚاد؊ {count} Ų
Ų Ø§ŲŲ
ŲŲ
ŲØ§ØĒ",
|
||||||
"restore_user": "Ø§ØŗØĒؚاد؊ اŲŲ
ØŗØĒ؎دŲ
",
|
"restore_user": "Ø§ØŗØĒؚاد؊ اŲŲ
ØŗØĒ؎دŲ
",
|
||||||
"restored_asset": "اŲŲ
ØØĒŲŲØ§ØĒ اŲŲ
ØŗØĒؚاد؊",
|
"restored_asset": "اŲŲ
ØØĒŲŲØ§ØĒ اŲŲ
ØŗØĒؚاد؊",
|
||||||
"resume": "Ø§ØŗØĒØĻŲØ§Ų",
|
"resume": "Ø§ØŗØĒØĻŲØ§Ų",
|
||||||
"retry_upload": "ØŖØšØ¯ Ų
ØØ§ŲŲØŠ Ø§ŲØąŲØš",
|
"retry_upload": "ØŖØšØ¯ Ų
ØØ§ŲŲØŠ Ø§ŲØąŲØš",
|
||||||
"review_duplicates": "Ų
ØąØ§ØŦؚ؊ Ø§ŲØĒŲØąØ§ØąØ§ØĒ",
|
"review_duplicates": "Ų
ØąØ§ØŦؚ؊ Ø§ŲØĒŲØąØ§ØąØ§ØĒ",
|
||||||
|
"review_large_files": "Ų
ØąØ§ØŦؚ؊ اŲŲ
ŲŲØ§ØĒ اŲŲØ¨ŲØąØŠ",
|
||||||
"role": "Ø§ŲØ¯ŲØą",
|
"role": "Ø§ŲØ¯ŲØą",
|
||||||
"role_editor": "اŲŲ
ØØąØą",
|
"role_editor": "اŲŲ
ØØąØą",
|
||||||
"role_viewer": "Ø§ŲØšØ§ØąØļ",
|
"role_viewer": "Ø§ŲØšØ§ØąØļ",
|
||||||
|
"running": "ŲŲØ¯ Ø§ŲØĒØ´ØēŲŲ",
|
||||||
"save": "ØŲظ",
|
"save": "ØŲظ",
|
||||||
"save_to_gallery": "ØŲظ اŲŲ Ø§ŲŲ
ØšØąØļ",
|
"save_to_gallery": "ØŲظ اŲŲ Ø§ŲŲ
ØšØąØļ",
|
||||||
"saved_api_key": "ØĒŲ
ØŲظ Ų
ŲØĒØ§Ø اŲŲ API",
|
"saved_api_key": "ØĒŲ
ØŲظ Ų
ŲØĒØ§Ø اŲŲ API",
|
||||||
@@ -1700,6 +1762,7 @@
|
|||||||
"settings_saved": "ØĒŲ
ØŲظ Ø§ŲØĨؚداداØĒ",
|
"settings_saved": "ØĒŲ
ØŲظ Ø§ŲØĨؚداداØĒ",
|
||||||
"setup_pin_code": "ØĒØØ¯Ųد ØąŲ
Ø˛ PIN",
|
"setup_pin_code": "ØĒØØ¯Ųد ØąŲ
Ø˛ PIN",
|
||||||
"share": "Ų
Ø´Ø§ØąŲØŠ",
|
"share": "Ų
Ø´Ø§ØąŲØŠ",
|
||||||
|
"share_action_prompt": "ØĒŲ
Ų
Ø´Ø§ØąŲØŠ {count} ØŖØĩŲ (Ų
ŲŲ)",
|
||||||
"share_add_photos": "ØĨØļØ§ŲØŠ Ø§ŲØĩŲØą",
|
"share_add_photos": "ØĨØļØ§ŲØŠ Ø§ŲØĩŲØą",
|
||||||
"share_assets_selected": "ا؎ØĒŲØ§Øą {count}",
|
"share_assets_selected": "ا؎ØĒŲØ§Øą {count}",
|
||||||
"share_dialog_preparing": "ØĒØØļŲØą...",
|
"share_dialog_preparing": "ØĒØØļŲØą...",
|
||||||
@@ -1721,6 +1784,7 @@
|
|||||||
"shared_link_clipboard_copied_massage": "ŲØŗØŽ ØĨŲŲ Ø§ŲØØ§ŲØ¸ØŠ",
|
"shared_link_clipboard_copied_massage": "ŲØŗØŽ ØĨŲŲ Ø§ŲØØ§ŲØ¸ØŠ",
|
||||||
"shared_link_clipboard_text": "ØąØ§Ø¨Øˇ: {link}\nŲŲŲ
ØŠ اŲŲ
ØąŲØą: {password}",
|
"shared_link_clipboard_text": "ØąØ§Ø¨Øˇ: {link}\nŲŲŲ
ØŠ اŲŲ
ØąŲØą: {password}",
|
||||||
"shared_link_create_error": "ØŽØˇØŖ ØŖØĢŲØ§ØĄ ØĨŲØ´Ø§ØĄ ØąØ§Ø¨Øˇ Ų
Ø´ØĒØąŲ",
|
"shared_link_create_error": "ØŽØˇØŖ ØŖØĢŲØ§ØĄ ØĨŲØ´Ø§ØĄ ØąØ§Ø¨Øˇ Ų
Ø´ØĒØąŲ",
|
||||||
|
"shared_link_custom_url_description": "اŲŲØĩŲŲ ØĨŲŲ ŲØ°Ø§ Ø§ŲØąØ§Ø¨Øˇ اŲŲ
Ø´ØĒØąŲ Ø¨Ø§ØŗØĒ؎داŲ
ØšŲŲØ§Ų URL Ų
ØŽØĩØĩ",
|
||||||
"shared_link_edit_description_hint": "ØŖØ¯ØŽŲ ŲØĩŲ Ø§ŲŲ
Ø´Ø§ØąŲØŠ",
|
"shared_link_edit_description_hint": "ØŖØ¯ØŽŲ ŲØĩŲ Ø§ŲŲ
Ø´Ø§ØąŲØŠ",
|
||||||
"shared_link_edit_expire_after_option_day": "ŲŲŲ
1",
|
"shared_link_edit_expire_after_option_day": "ŲŲŲ
1",
|
||||||
"shared_link_edit_expire_after_option_days": "{count} Ø§ŲØ§Ų
",
|
"shared_link_edit_expire_after_option_days": "{count} Ø§ŲØ§Ų
",
|
||||||
@@ -1746,6 +1810,7 @@
|
|||||||
"shared_link_info_chip_metadata": "EXIF",
|
"shared_link_info_chip_metadata": "EXIF",
|
||||||
"shared_link_manage_links": "ØĨØ¯Ø§ØąØŠ Ø§ŲØąŲØ§Ø¨Øˇ اŲŲ
Ø´ØĒØąŲØŠ",
|
"shared_link_manage_links": "ØĨØ¯Ø§ØąØŠ Ø§ŲØąŲØ§Ø¨Øˇ اŲŲ
Ø´ØĒØąŲØŠ",
|
||||||
"shared_link_options": "ØŽŲØ§ØąØ§ØĒ Ø§ŲØąØ§Ø¨Øˇ اŲŲ
Ø´ØĒØąŲ",
|
"shared_link_options": "ØŽŲØ§ØąØ§ØĒ Ø§ŲØąØ§Ø¨Øˇ اŲŲ
Ø´ØĒØąŲ",
|
||||||
|
"shared_link_password_description": "ØˇŲØ¨ ŲŲŲ
ØŠ Ų
ØąŲØą ŲŲŲØĩŲŲ ØĨŲŲ ŲØ°Ø§ Ø§ŲØąØ§Ø¨Øˇ اŲŲ
Ø´ØĒØąŲ",
|
||||||
"shared_links": "ØąŲØ§Ø¨Øˇ Ų
Ø´ØĒØąŲØŠ",
|
"shared_links": "ØąŲØ§Ø¨Øˇ Ų
Ø´ØĒØąŲØŠ",
|
||||||
"shared_links_description": "ŲØĩŲ Ø§ŲØąŲØ§Ø¨Øˇ اŲŲ
Ø´ØĒØąŲØŠ",
|
"shared_links_description": "ŲØĩŲ Ø§ŲØąŲØ§Ø¨Øˇ اŲŲ
Ø´ØĒØąŲØŠ",
|
||||||
"shared_photos_and_videos_count": "{assetCount, plural, other {# Ø§ŲØĩŲØą ŲŲ
ŲØ§ØˇØš اŲŲŲØ¯ŲŲ Ø§ŲŲ
ŲØ´Ø§ØąŲŲØŠ.}}",
|
"shared_photos_and_videos_count": "{assetCount, plural, other {# Ø§ŲØĩŲØą ŲŲ
ŲØ§ØˇØš اŲŲŲØ¯ŲŲ Ø§ŲŲ
ŲØ´Ø§ØąŲŲØŠ.}}",
|
||||||
@@ -1795,12 +1860,14 @@
|
|||||||
"sort_created": "ØĒØ§ØąŲØŽ Ø§ŲØĨŲØ´Ø§ØĄ",
|
"sort_created": "ØĒØ§ØąŲØŽ Ø§ŲØĨŲØ´Ø§ØĄ",
|
||||||
"sort_items": "ؚدد Ø§ŲØšŲاØĩØą",
|
"sort_items": "ؚدد Ø§ŲØšŲاØĩØą",
|
||||||
"sort_modified": "ØĒŲ
ØĒؚدŲŲ Ø§ŲØĒØ§ØąŲØŽ",
|
"sort_modified": "ØĒŲ
ØĒؚدŲŲ Ø§ŲØĒØ§ØąŲØŽ",
|
||||||
|
"sort_newest": "Ø§ØØ¯ØĢ ØĩŲØąØŠ",
|
||||||
"sort_oldest": "ØŖŲØ¯Ų
ØĩŲØąØŠ",
|
"sort_oldest": "ØŖŲØ¯Ų
ØĩŲØąØŠ",
|
||||||
"sort_people_by_similarity": "ØąØĒب Ø§ŲØŖØ´ØŽØ§Øĩ ØØŗØ¨ Ø§ŲØĒØ´Ø§Ø¨Ų",
|
"sort_people_by_similarity": "ØąØĒب Ø§ŲØŖØ´ØŽØ§Øĩ ØØŗØ¨ Ø§ŲØĒØ´Ø§Ø¨Ų",
|
||||||
"sort_recent": "ØŖØØ¯ØĢ ØĩŲØąØŠ",
|
"sort_recent": "ØŖØØ¯ØĢ ØĩŲØąØŠ",
|
||||||
"sort_title": "Ø§ŲØšŲŲØ§Ų",
|
"sort_title": "Ø§ŲØšŲŲØ§Ų",
|
||||||
"source": "اŲŲ
ØĩØ¯Øą",
|
"source": "اŲŲ
ØĩØ¯Øą",
|
||||||
"stack": "ØĒØŦŲ
ŲØš",
|
"stack": "ØĒØŦŲ
ŲØš",
|
||||||
|
"stack_action_prompt": "{count} Ų
ŲØ¯ØŗØŠ",
|
||||||
"stack_duplicates": "ØĒØŦŲ
ب𠨧ŲŲØŗØŽ اŲŲ
ŲØąØąØŠ",
|
"stack_duplicates": "ØĒØŦŲ
ب𠨧ŲŲØŗØŽ اŲŲ
ŲØąØąØŠ",
|
||||||
"stack_select_one_photo": "ØØ¯Ø¯ ØĩŲØąØŠ ØąØĻŲØŗŲØŠ ŲØ§ØØ¯ØŠ ŲŲŲ
ØŦŲ
ŲØšØŠ",
|
"stack_select_one_photo": "ØØ¯Ø¯ ØĩŲØąØŠ ØąØĻŲØŗŲØŠ ŲØ§ØØ¯ØŠ ŲŲŲ
ØŦŲ
ŲØšØŠ",
|
||||||
"stack_selected_photos": "ŲØ¯Øŗ Ø§ŲØĩŲØą Ø§ŲŲ
ØØ¯Ø¯ØŠ",
|
"stack_selected_photos": "ŲØ¯Øŗ Ø§ŲØĩŲØą Ø§ŲŲ
ØØ¯Ø¯ØŠ",
|
||||||
@@ -1820,6 +1887,7 @@
|
|||||||
"storage_quota": "ØØĩØŠ Ø§ŲØŽØ˛Ų",
|
"storage_quota": "ØØĩØŠ Ø§ŲØŽØ˛Ų",
|
||||||
"storage_usage": "{used} Ų
Ų {available} Ų
ŲØŗØĒØŽŲØ¯Ų
",
|
"storage_usage": "{used} Ų
Ų {available} Ų
ŲØŗØĒØŽŲØ¯Ų
",
|
||||||
"submit": "ØĨØąØŗØ§Ų",
|
"submit": "ØĨØąØŗØ§Ų",
|
||||||
|
"success": "ØĒŲ
Ø¨ŲØŦاØ",
|
||||||
"suggestions": "Ø§ŲØĒØąØ§ØØ§ØĒ",
|
"suggestions": "Ø§ŲØĒØąØ§ØØ§ØĒ",
|
||||||
"sunrise_on_the_beach": "Ø´ØąŲŲ Ø§ŲØ´Ų
Øŗ ØšŲŲ Ø§ŲØ´Ø§ØˇØĻ",
|
"sunrise_on_the_beach": "Ø´ØąŲŲ Ø§ŲØ´Ų
Øŗ ØšŲŲ Ø§ŲØ´Ø§ØˇØĻ",
|
||||||
"support": "Ø§ŲØ¯ØšŲ
",
|
"support": "Ø§ŲØ¯ØšŲ
",
|
||||||
@@ -1829,6 +1897,8 @@
|
|||||||
"sync": "Ų
Ø˛Ø§Ų
ŲØŠ",
|
"sync": "Ų
Ø˛Ø§Ų
ŲØŠ",
|
||||||
"sync_albums": "Ų
Ø˛Ø§Ų
ŲØŠ Ø§ŲØ§ŲبŲŲ
اØĒ",
|
"sync_albums": "Ų
Ø˛Ø§Ų
ŲØŠ Ø§ŲØ§ŲبŲŲ
اØĒ",
|
||||||
"sync_albums_manual_subtitle": "Ų
Ø˛Ø§Ų
ŲØŠ ØŦŲ
ب𠨧ŲŲØ¯ŲŲŲØ§ØĒ ŲØ§ŲØĩŲØą Ø§ŲŲ
ØąŲŲØšØŠ Ø§ŲŲ Ø§ŲØ¨ŲŲ
اØĒ Ø§ŲØŽØ˛Ų Ø§ŲØ§ØØĒŲØ§ØˇŲ اŲŲ
ØŽØĒØ§ØąØŠ",
|
"sync_albums_manual_subtitle": "Ų
Ø˛Ø§Ų
ŲØŠ ØŦŲ
ب𠨧ŲŲØ¯ŲŲŲØ§ØĒ ŲØ§ŲØĩŲØą Ø§ŲŲ
ØąŲŲØšØŠ Ø§ŲŲ Ø§ŲØ¨ŲŲ
اØĒ Ø§ŲØŽØ˛Ų Ø§ŲØ§ØØĒŲØ§ØˇŲ اŲŲ
ØŽØĒØ§ØąØŠ",
|
||||||
|
"sync_local": "Ų
Ø˛Ø§Ų
ŲØŠ Ø§ŲŲ
ŲŲØ§ØĒ اŲŲ
ØŲŲØŠ",
|
||||||
|
"sync_remote": "Ų
Ø˛Ø§Ų
ŲØŠ Ø§ŲŲ
ŲŲØ§ØĒ Ø§ŲØ¨ØšŲد؊",
|
||||||
"sync_upload_album_setting_subtitle": "Ø§ŲØ´ØĻ Ų Ø§ØąŲØš ØĩŲØąŲ Ų ŲØ¯ŲŲŲØ§ØĒŲ Ø§ŲØ§ŲبŲŲ
اØĒ اŲŲ
ØŽØĒØ§ØąØŠ ŲŲ Immich",
|
"sync_upload_album_setting_subtitle": "Ø§ŲØ´ØĻ Ų Ø§ØąŲØš ØĩŲØąŲ Ų ŲØ¯ŲŲŲØ§ØĒŲ Ø§ŲØ§ŲبŲŲ
اØĒ اŲŲ
ØŽØĒØ§ØąØŠ ŲŲ Immich",
|
||||||
"tag": "Ø§ŲØšŲاŲ
ØŠ",
|
"tag": "Ø§ŲØšŲاŲ
ØŠ",
|
||||||
"tag_assets": "ØŖØĩŲŲ Ø§ŲØšŲاŲ
ØŠ",
|
"tag_assets": "ØŖØĩŲŲ Ø§ŲØšŲاŲ
ØŠ",
|
||||||
@@ -1839,6 +1909,7 @@
|
|||||||
"tag_updated": "ØĒŲ
ØĒØØ¯ŲØĢ Ø§ŲØšŲاŲ
ØŠ: {tag}",
|
"tag_updated": "ØĒŲ
ØĒØØ¯ŲØĢ Ø§ŲØšŲاŲ
ØŠ: {tag}",
|
||||||
"tagged_assets": "ØĒŲ
ŲØļØš ØšŲØ§Ų
ØŠ {count, plural, one {# asset} other {# assets}}",
|
"tagged_assets": "ØĒŲ
ŲØļØš ØšŲØ§Ų
ØŠ {count, plural, one {# asset} other {# assets}}",
|
||||||
"tags": "Ø§ŲØšŲاŲ
اØĒ",
|
"tags": "Ø§ŲØšŲاŲ
اØĒ",
|
||||||
|
"tap_to_run_job": "اŲŲØą ŲØĒØ´ØēŲŲ Ø§ŲŲ
ŲŲ
ØŠ",
|
||||||
"template": "اŲŲŲ
ŲØ°ØŦ",
|
"template": "اŲŲŲ
ŲØ°ØŦ",
|
||||||
"theme": "Ų
Ø¸ŲØą",
|
"theme": "Ų
Ø¸ŲØą",
|
||||||
"theme_selection": "ا؎ØĒŲØ§Øą Ø§ŲØŗŲ
ØŠ",
|
"theme_selection": "ا؎ØĒŲØ§Øą Ø§ŲØŗŲ
ØŠ",
|
||||||
@@ -1911,15 +1982,20 @@
|
|||||||
"unselect_all_duplicates": "ØĨŲØēØ§ØĄ ØĒØØ¯Ųد ŲØ§ŲØŠ اŲŲØŗØŽ اŲŲ
ŲØąØąØŠ",
|
"unselect_all_duplicates": "ØĨŲØēØ§ØĄ ØĒØØ¯Ųد ŲØ§ŲØŠ اŲŲØŗØŽ اŲŲ
ŲØąØąØŠ",
|
||||||
"unselect_all_in": "ØĨŲØēØ§ØĄ ØĒØØ¯Ųد اŲŲŲ ŲŲ {group}",
|
"unselect_all_in": "ØĨŲØēØ§ØĄ ØĒØØ¯Ųد اŲŲŲ ŲŲ {group}",
|
||||||
"unstack": "ŲŲ Ø§ŲŲŲŲ
Ų",
|
"unstack": "ŲŲ Ø§ŲŲŲŲ
Ų",
|
||||||
|
"unstack_action_prompt": "ØĒŲ
Ø§Ø˛Ø§ŲØŠ ØĒŲØ¯ŲØŗ {count}",
|
||||||
"unstacked_assets_count": "ØĒŲ
ØĨØŽØąØ§ØŦ {count, plural, one {# Ø§ŲØŖØĩŲ} other {# Ø§ŲØŖØĩŲŲ}} Ų
Ų Ø§ŲØĒŲØ¯ŲØŗ",
|
"unstacked_assets_count": "ØĒŲ
ØĨØŽØąØ§ØŦ {count, plural, one {# Ø§ŲØŖØĩŲ} other {# Ø§ŲØŖØĩŲŲ}} Ų
Ų Ø§ŲØĒŲØ¯ŲØŗ",
|
||||||
|
"untagged": "ØēŲØą Ų
ŲØšŲŲŲŲŲ
",
|
||||||
"up_next": "Ø§ŲØĒØ§ŲŲ",
|
"up_next": "Ø§ŲØĒØ§ŲŲ",
|
||||||
"updated_at": "ØĒŲ
Ø§ŲØĒØØ¯ŲØĢ",
|
"updated_at": "ØĒŲ
Ø§ŲØĒØØ¯ŲØĢ",
|
||||||
"updated_password": "ØĒŲ
ØĒØØ¯ŲØĢ ŲŲŲ
ØŠ اŲŲ
ØąŲØą",
|
"updated_password": "ØĒŲ
ØĒØØ¯ŲØĢ ŲŲŲ
ØŠ اŲŲ
ØąŲØą",
|
||||||
"upload": "ØąŲØš",
|
"upload": "ØąŲØš",
|
||||||
|
"upload_action_prompt": "{count} Ų
ŲŲ ŲŲ ŲØ§ØĻŲ
ØŠ Ø§ŲØ§ŲØĒØ¸Ø§Øą ŲŲØąŲØš",
|
||||||
"upload_concurrency": "Ø§ŲØąŲØš اŲŲ
ØĒØ˛Ø§Ų
Ų",
|
"upload_concurrency": "Ø§ŲØąŲØš اŲŲ
ØĒØ˛Ø§Ų
Ų",
|
||||||
|
"upload_details": "ØĒŲØ§ØĩŲŲ Ø§ŲØąŲØš",
|
||||||
"upload_dialog_info": "ŲŲ ØĒØąŲØ¯ اŲŲØŗØŽ Ø§ŲØ§ØØĒŲØ§ØˇŲ ŲŲØŖØĩŲŲ (Ø§ŲØŖØĩŲŲ) اŲŲ
ØØ¯Ø¯ØŠ ØĨŲŲ Ø§ŲØŽØ§Ø¯Ų
Ø",
|
"upload_dialog_info": "ŲŲ ØĒØąŲØ¯ اŲŲØŗØŽ Ø§ŲØ§ØØĒŲØ§ØˇŲ ŲŲØŖØĩŲŲ (Ø§ŲØŖØĩŲŲ) اŲŲ
ØØ¯Ø¯ØŠ ØĨŲŲ Ø§ŲØŽØ§Ø¯Ų
Ø",
|
||||||
"upload_dialog_title": "ØĒØŲ
ŲŲ Ø§ŲØŖØĩŲŲ",
|
"upload_dialog_title": "ØĒØŲ
ŲŲ Ø§ŲØŖØĩŲŲ",
|
||||||
"upload_errors": "ØĨŲØĒŲ
Ų Ø§ŲØąŲØš Ų
Øš {count, plural, one {# ØŽØˇØŖ} other {# ØŖØŽØˇØ§ØĄ}}, ŲŲ
بØĒØØ¯ŲØĢ Ø§ŲØĩŲØØŠ ŲØąØ¤ŲØŠ Ø§ŲŲ
ØØĒŲŲØ§ØĒ Ø§ŲØŦØ¯ŲØ¯ØŠ Ø§ŲØĒŲ ØĒŲ
ØąŲØšŲا.",
|
"upload_errors": "ØĨŲØĒŲ
Ų Ø§ŲØąŲØš Ų
Øš {count, plural, one {# ØŽØˇØŖ} other {# ØŖØŽØˇØ§ØĄ}}, ŲŲ
بØĒØØ¯ŲØĢ Ø§ŲØĩŲØØŠ ŲØąØ¤ŲØŠ Ø§ŲŲ
ØØĒŲŲØ§ØĒ Ø§ŲØŦØ¯ŲØ¯ØŠ Ø§ŲØĒŲ ØĒŲ
ØąŲØšŲا.",
|
||||||
|
"upload_finished": "ØĒŲ
Ø§ŲØ§ŲØĒŲØ§ØĄ Ų
Ų Ø§ŲØąŲØš",
|
||||||
"upload_progress": "Ų
ØĒبŲŲØŠ {remaining, number} - Ų
ØšØ§ŲØŦØŠ {processed, number}/{total, number}",
|
"upload_progress": "Ų
ØĒبŲŲØŠ {remaining, number} - Ų
ØšØ§ŲØŦØŠ {processed, number}/{total, number}",
|
||||||
"upload_skipped_duplicates": "ØĒŲ
ØĒØŽØˇŲ {count, plural, one {# Ų
ØØĒŲŲ Ų
ŲØąØą} other {# Ų
ØØĒŲŲØ§ØĒ Ų
ŲØąØąØŠ }}",
|
"upload_skipped_duplicates": "ØĒŲ
ØĒØŽØˇŲ {count, plural, one {# Ų
ØØĒŲŲ Ų
ŲØąØą} other {# Ų
ØØĒŲŲØ§ØĒ Ų
ŲØąØąØŠ }}",
|
||||||
"upload_status_duplicates": "Ø§ŲØĒŲØąØ§ØąØ§ØĒ",
|
"upload_status_duplicates": "Ø§ŲØĒŲØąØ§ØąØ§ØĒ",
|
||||||
@@ -1928,6 +2004,7 @@
|
|||||||
"upload_success": "ØĒŲ
Ø§ŲØąŲØš Ø¨ŲØŦØ§ØØ ŲŲ
بØĒØØ¯ŲØĢ Ø§ŲØĩŲØØŠ ŲØąØ¤ŲØŠ Ø§ŲŲ
ØØĒŲŲØ§ØĒ اŲŲ
ØąŲŲØšØŠ Ø§ŲØŦØ¯ŲØ¯ØŠ.",
|
"upload_success": "ØĒŲ
Ø§ŲØąŲØš Ø¨ŲØŦØ§ØØ ŲŲ
بØĒØØ¯ŲØĢ Ø§ŲØĩŲØØŠ ŲØąØ¤ŲØŠ Ø§ŲŲ
ØØĒŲŲØ§ØĒ اŲŲ
ØąŲŲØšØŠ Ø§ŲØŦØ¯ŲØ¯ØŠ.",
|
||||||
"upload_to_immich": "Ø§ŲØąŲØš اŲŲImmich â â ({count})",
|
"upload_to_immich": "Ø§ŲØąŲØš اŲŲImmich â â ({count})",
|
||||||
"uploading": "ØŦØ§ØąŲ Ø§ŲØąŲØš",
|
"uploading": "ØŦØ§ØąŲ Ø§ŲØąŲØš",
|
||||||
|
"uploading_media": "ØąŲØš Ø§ŲŲØŗØ§ØĻØˇ",
|
||||||
"url": "ØšŲŲØ§Ų URL",
|
"url": "ØšŲŲØ§Ų URL",
|
||||||
"usage": "Ø§ŲØ§ØŗØĒ؎داŲ
",
|
"usage": "Ø§ŲØ§ØŗØĒ؎داŲ
",
|
||||||
"use_biometric": "Ø§ØŗØĒ؎دŲ
Ø§ŲØ¨Ø§ŲŲŲ
ØĒØąŲ",
|
"use_biometric": "Ø§ØŗØĒ؎دŲ
Ø§ŲØ¨Ø§ŲŲŲ
ØĒØąŲ",
|
||||||
@@ -1948,6 +2025,7 @@
|
|||||||
"user_usage_stats_description": "ØšØąØļ ØĨØØĩاØĻŲØ§ØĒ Ø§ØŗØĒ؎داŲ
Ø§ŲØØŗØ§Ø¨",
|
"user_usage_stats_description": "ØšØąØļ ØĨØØĩاØĻŲØ§ØĒ Ø§ØŗØĒ؎داŲ
Ø§ŲØØŗØ§Ø¨",
|
||||||
"username": "Ø§ØŗŲ
اŲŲ
ØŗØĒ؎دŲ
",
|
"username": "Ø§ØŗŲ
اŲŲ
ØŗØĒ؎دŲ
",
|
||||||
"users": "اŲŲ
ØŗØĒ؎دŲ
ŲŲ",
|
"users": "اŲŲ
ØŗØĒ؎دŲ
ŲŲ",
|
||||||
|
"users_added_to_album_count": "ØĒŲ
اØļØ§ŲØŠ{count, plural, one {# Ų
ØŗØĒ؎دŲ
} other {# Ų
ØŗØĒ؎دŲ
ŲŲ}} اŲŲ Ø§ŲØ§ŲبŲŲ
",
|
||||||
"utilities": "ØŖØ¯ŲØ§ØĒ",
|
"utilities": "ØŖØ¯ŲØ§ØĒ",
|
||||||
"validate": "ØĒØŲŲŲ",
|
"validate": "ØĒØŲŲŲ",
|
||||||
"validate_endpoint_error": "Ø§ŲØąØŦØ§ØĄ Ø§Ø¯ØŽØ§Ų ØšŲŲØ§Ų URL ØĩØ§ŲØ",
|
"validate_endpoint_error": "Ø§ŲØąØŦØ§ØĄ Ø§Ø¯ØŽØ§Ų ØšŲŲØ§Ų URL ØĩØ§ŲØ",
|
||||||
@@ -1966,6 +2044,7 @@
|
|||||||
"view_album": "ØšØąØļ Ø§ŲØŖŲبŲŲ
",
|
"view_album": "ØšØąØļ Ø§ŲØŖŲبŲŲ
",
|
||||||
"view_all": "ØšØąØļ اŲŲŲ",
|
"view_all": "ØšØąØļ اŲŲŲ",
|
||||||
"view_all_users": "ØšØąØļ ŲØ§ŲØŠ اŲŲ
ØŗØĒ؎دŲ
ŲŲ",
|
"view_all_users": "ØšØąØļ ŲØ§ŲØŠ اŲŲ
ØŗØĒ؎دŲ
ŲŲ",
|
||||||
|
"view_details": "ØąØ¤ŲØŠ Ø§ŲØĒŲØ§ØĩŲŲ",
|
||||||
"view_in_timeline": "ØšØąØļ ŲŲ Ø§ŲØŦدŲŲ Ø§ŲØ˛Ų
ŲŲ",
|
"view_in_timeline": "ØšØąØļ ŲŲ Ø§ŲØŦدŲŲ Ø§ŲØ˛Ų
ŲŲ",
|
||||||
"view_link": "ØšØąØļ Ø§ŲØąØ§Ø¨Øˇ",
|
"view_link": "ØšØąØļ Ø§ŲØąØ§Ø¨Øˇ",
|
||||||
"view_links": "ØšØąØļ Ø§ŲØąŲØ§Ø¨Øˇ",
|
"view_links": "ØšØąØļ Ø§ŲØąŲØ§Ø¨Øˇ",
|
||||||
|
|||||||
+23
-6
@@ -1,37 +1,53 @@
|
|||||||
{
|
{
|
||||||
"about": "Haqqinda",
|
"about": "HaqqÄąnda",
|
||||||
"account": "Hesab",
|
"account": "Hesab",
|
||||||
"account_settings": "Hesab parametrlÉri",
|
"account_settings": "Hesab parametrlÉri",
|
||||||
"acknowledge": "TÉsdiq et",
|
"acknowledge": "TÉsdiq et",
|
||||||
"action": "ÆmÉliyyat",
|
"action": "ÆmÉliyyat",
|
||||||
|
"action_common_update": "YenilÉ",
|
||||||
"actions": "ÆmÉliyyatlar",
|
"actions": "ÆmÉliyyatlar",
|
||||||
"active": "Aktiv",
|
"active": "Aktiv",
|
||||||
"activity": "FÉaliyyÉt",
|
"activity": "FÉaliyyÉt",
|
||||||
|
"activity_changed": "FÉaliyyÉt {enabled, select, true {aktivdir} other {aktiv deyil}}",
|
||||||
"add": "ÆlavÉ et",
|
"add": "ÆlavÉ et",
|
||||||
"add_a_description": "TÉsviri ÉlavÉ et",
|
"add_a_description": "TÉsviri ÉlavÉ et",
|
||||||
"add_a_location": "MÉkan ÉlavÉ et",
|
"add_a_location": "MÉkan ÉlavÉ et",
|
||||||
"add_a_name": "Ad ÉlavÉ et",
|
"add_a_name": "Ad ÉlavÉ et",
|
||||||
"add_a_title": "BaÅlÄąq ÉlavÉ et",
|
"add_a_title": "BaÅlÄąq ÉlavÉ et",
|
||||||
|
"add_birthday": "DoÄum gÃŧnÃŧ ÉlavÉ et",
|
||||||
|
"add_endpoint": "Son nÃļqtÉ ÉlavÉ et",
|
||||||
"add_exclusion_pattern": "İstisna nÃŧmunÉsi ÉlavÉ et",
|
"add_exclusion_pattern": "İstisna nÃŧmunÉsi ÉlavÉ et",
|
||||||
"add_import_path": "Import yolunu ÉlavÉ et",
|
"add_import_path": "Import yolunu ÉlavÉ et",
|
||||||
"add_location": "MÉkanÄą ÉlavÉ et",
|
"add_location": "MÉkan ÉlavÉ et",
|
||||||
"add_more_users": "Daha çox istifadÉçi ÉlavÉ et",
|
"add_more_users": "Daha çox istifadÉçi ÉlavÉ et",
|
||||||
"add_partner": "Partnyor ÉlavÉ et",
|
"add_partner": "Partnyor ÉlavÉ et",
|
||||||
"add_path": "Yol ÉlavÉ et",
|
"add_path": "Yol ÉlavÉ et",
|
||||||
"add_photos": "ÅÉkillÉri ÉlavÉ et",
|
"add_photos": "ÅÉkillÉr ÉlavÉ et",
|
||||||
"add_to": "... ÉlavÉ et",
|
"add_tag": "Etiket ÉlavÉ et",
|
||||||
|
"add_to": "Bura ÉlavÉ etâĻ",
|
||||||
"add_to_album": "Albom ÉlavÉ et",
|
"add_to_album": "Albom ÉlavÉ et",
|
||||||
|
"add_to_album_bottom_sheet_added": "{album} albomuna ÉlavÉ edildi",
|
||||||
|
"add_to_album_bottom_sheet_already_exists": "ArtÄąq {album} albomunda var",
|
||||||
|
"add_to_album_toggle": "{album} ÃŧçÃŧn seçimi dÉyiÅin",
|
||||||
|
"add_to_albums": "Albomlara ÉlavÉ et",
|
||||||
|
"add_to_albums_count": "Albomlara ÉlavÉ et ({count})",
|
||||||
"add_to_shared_album": "PaylaÅÄąlan alboma ÉlavÉ et",
|
"add_to_shared_album": "PaylaÅÄąlan alboma ÉlavÉ et",
|
||||||
|
"add_url": "URL ÉlavÉ et",
|
||||||
"added_to_archive": "ArxivÉ ÉlavÉ edildi",
|
"added_to_archive": "ArxivÉ ÉlavÉ edildi",
|
||||||
"added_to_favorites": "SevimlilÉlÉrÉ ÉlavÉ edildi",
|
"added_to_favorites": "SevimlilÉlÉrÉ ÉlavÉ edildi",
|
||||||
"added_to_favorites_count": "{count, number} ÅÉkil sevimlilÉlÉrÉ ÉlavÉ edildi",
|
"added_to_favorites_count": "{count, number} ÅÉkil sevimlilÉlÉrÉ ÉlavÉ edildi",
|
||||||
"admin": {
|
"admin": {
|
||||||
|
"add_exclusion_pattern_description": "İstisna ÅablonlarÄąnÄą ÉlavÉ edin. *, ** vÉ ? ilÉ Globbing dÉstÉklÉnir. MÉs.: \"Raw\" adlanan hÉr hansÄąsa bir qovluqda bÃŧtÃŧn fayllarÄą saymamaq ÃŧçÃŧn \"**/Raw/**\"-dan istifadÉ edin. \".tif\" ilÉ bitÉn bÃŧtÃŧn fayllarÄą saymamaq ÃŧçÃŧn \"**/*.tif\"-dÉn istifadÉ edin. FaylÄą mÃŧtlÉq yoldan istifadÉ etmÉklÉ saymamaq istÉyirsinizsÉ \"/path/to/ignore/**\"-dan istifadÉ edin.",
|
||||||
|
"admin_user": "Admin İstifadÉçi",
|
||||||
|
"asset_offline_description": "Bu xarici kitabxana varlÄąÄÄą diskdÉ artÄąq tapÄąlmadÄą vÉ zibil qutusuna kÃļçÃŧrÃŧldÃŧ. ÆgÉr fayl kitabxana içÉrisindÉ kÃļçÃŧrÃŧlÃŧbsÉ, zaman ÅkalanÄązÄą yeni uyÄun gÉlÉn varlÄąq ÃŧçÃŧn yoxlayÄąn. VarlÄąÄÄą yenidÉn qaytarmaq ÃŧçÃŧn aÅaÄÄąda verilmiÅ fayl yolunun Immich tÉrÉfindÉn Élçatan olduÄundan Émin olduqdan sonra kitabxananÄą skan edin.",
|
||||||
"authentication_settings": "SÉlahiyyÉtlÉndirmÉ parametrlÉri",
|
"authentication_settings": "SÉlahiyyÉtlÉndirmÉ parametrlÉri",
|
||||||
"authentication_settings_description": "ÅifrÉ, OAuth vÉ digÉr sÉlahiyyÉtlÉndirmÉ parametrlÉri",
|
"authentication_settings_description": "ÅifrÉ, OAuth vÉ digÉr sÉlahiyyÉtlÉndirmÉ parametrlÉri",
|
||||||
"authentication_settings_disable_all": "BÃŧtÃŧn giriÅ etmÉ metodlarÄąnÄą sÃļndÃŧrmÉk istÉdiyinizdÉn Éminsinizmi? GiriÅ etmÉ funksiyasÄą tamamilÉ sÃļndÃŧrÃŧlÉcÉkdir.",
|
"authentication_settings_disable_all": "BÃŧtÃŧn giriÅ etmÉ metodlarÄąnÄą sÃļndÃŧrmÉk istÉdiyinizdÉn Éminsinizmi? GiriÅ etmÉ funksiyasÄą tamamilÉ sÃļndÃŧrÃŧlÉcÉkdir.",
|
||||||
"authentication_settings_reenable": "YenidÉn aktiv etmÉk ÃŧçÃŧn <link> Server Æmri</link> -ni istifadÉ edin.",
|
"authentication_settings_reenable": "YenidÉn aktiv etmÉk ÃŧçÃŧn <link> Server Æmri</link> -ni istifadÉ edin.",
|
||||||
"background_task_job": "Arxa plan tapÅÄąrÄąqlarÄą",
|
"background_task_job": "Arxa plan tapÅÄąrÄąqlarÄą",
|
||||||
"backup_database_enable_description": "VerilÉnlÉr bazasÄąnÄąn ehtiyat nÃŧsxÉlÉrini aktiv et",
|
"backup_database": "VerilÉnlÉr bazasÄąnÄąn dump-ÄąnÄą yaradÄąn",
|
||||||
|
"backup_database_enable_description": "VerilÉnlÉr bazasÄąnÄąn artÄąq nÃŧsxÉlÉrini aktiv et",
|
||||||
|
"backup_keep_last_amount": "TutulmasÄą gÉrÉkÉn nÃŧsxÉlÉrin sayÄą",
|
||||||
"backup_settings": "Ehtiyat NÃŧsxÉ ParametrlÉri",
|
"backup_settings": "Ehtiyat NÃŧsxÉ ParametrlÉri",
|
||||||
"backup_settings_description": "VerilÉnlÉr bazasÄąnÄąn ehtiyat nÃŧsxÉ parametrlÉrini idarÉ et",
|
"backup_settings_description": "VerilÉnlÉr bazasÄąnÄąn ehtiyat nÃŧsxÉ parametrlÉrini idarÉ et",
|
||||||
"config_set_by_file": "Konfiqurasiya hal-hazÄąrda konfiqurasiya faylÄą ilÉ tÉyin olunub",
|
"config_set_by_file": "Konfiqurasiya hal-hazÄąrda konfiqurasiya faylÄą ilÉ tÉyin olunub",
|
||||||
@@ -84,5 +100,6 @@
|
|||||||
"machine_learning_facial_recognition": "Ãz TanÄąma",
|
"machine_learning_facial_recognition": "Ãz TanÄąma",
|
||||||
"machine_learning_facial_recognition_description": "ÅÉkillÉrdÉki ÃŧzlÉri aÅkarla, tanÄą vÉ qruplaÅdÄąr",
|
"machine_learning_facial_recognition_description": "ÅÉkillÉrdÉki ÃŧzlÉri aÅkarla, tanÄą vÉ qruplaÅdÄąr",
|
||||||
"machine_learning_facial_recognition_model": "Ãz tanÄąma modeli"
|
"machine_learning_facial_recognition_model": "Ãz tanÄąma modeli"
|
||||||
}
|
},
|
||||||
|
"timeline": "Zaman ÅkalasÄą"
|
||||||
}
|
}
|
||||||
|
|||||||
+47
-6
@@ -14,6 +14,7 @@
|
|||||||
"add_a_location": "ĐадаŅŅ ĐŧĐĩŅŅа",
|
"add_a_location": "ĐадаŅŅ ĐŧĐĩŅŅа",
|
||||||
"add_a_name": "ĐадаŅŅ ŅĐŧŅ",
|
"add_a_name": "ĐадаŅŅ ŅĐŧŅ",
|
||||||
"add_a_title": "ĐадаŅŅ ĐˇĐ°ĐŗĐ°ĐģОваĐē",
|
"add_a_title": "ĐадаŅŅ ĐˇĐ°ĐŗĐ°ĐģОваĐē",
|
||||||
|
"add_birthday": "ĐадаŅŅ Đ´ĐˇĐĩĐŊŅ ĐŊаŅадĐļŅĐŊĐŊŅ",
|
||||||
"add_endpoint": "ĐадаŅŅ ĐēŅĐžĐŋĐēŅ Đ´ĐžŅŅŅĐŋŅ",
|
"add_endpoint": "ĐадаŅŅ ĐēŅĐžĐŋĐēŅ Đ´ĐžŅŅŅĐŋŅ",
|
||||||
"add_exclusion_pattern": "ĐадаŅŅ ŅайĐģĐžĐŊ вŅĐēĐģŅŅŅĐŊĐŊŅ",
|
"add_exclusion_pattern": "ĐадаŅŅ ŅайĐģĐžĐŊ вŅĐēĐģŅŅŅĐŊĐŊŅ",
|
||||||
"add_import_path": "ĐадаŅŅ ŅĐģŅŅ
ŅĐŧĐŋаŅŅŅ",
|
"add_import_path": "ĐадаŅŅ ŅĐģŅŅ
ŅĐŧĐŋаŅŅŅ",
|
||||||
@@ -27,6 +28,8 @@
|
|||||||
"add_to_album": "ĐадаŅŅ Ņ Đ°ĐģŅйОĐŧ",
|
"add_to_album": "ĐадаŅŅ Ņ Đ°ĐģŅйОĐŧ",
|
||||||
"add_to_album_bottom_sheet_added": "ĐададСĐĩĐŊа да {album}",
|
"add_to_album_bottom_sheet_added": "ĐададСĐĩĐŊа да {album}",
|
||||||
"add_to_album_bottom_sheet_already_exists": "ĐŖĐļĐž СĐŊаŅ
ОдСŅŅŅа Ņ {album}",
|
"add_to_album_bottom_sheet_already_exists": "ĐŖĐļĐž СĐŊаŅ
ОдСŅŅŅа Ņ {album}",
|
||||||
|
"add_to_albums": "ĐадаŅŅ Ņ Đ°ĐģŅйОĐŧŅ",
|
||||||
|
"add_to_albums_count": "ĐадаŅŅ Ņ Đ°ĐģŅйОĐŧŅ ({count})",
|
||||||
"add_to_shared_album": "ĐадаŅŅ Ņ Đ°ĐŗŅĐģŅĐŊŅ Đ°ĐģŅйОĐŧ",
|
"add_to_shared_album": "ĐадаŅŅ Ņ Đ°ĐŗŅĐģŅĐŊŅ Đ°ĐģŅйОĐŧ",
|
||||||
"add_url": "ĐадаŅŅ URL",
|
"add_url": "ĐадаŅŅ URL",
|
||||||
"added_to_archive": "ĐададСĐĩĐŊа Ņ Đ°ŅŅ
ŅŅ",
|
"added_to_archive": "ĐададСĐĩĐŊа Ņ Đ°ŅŅ
ŅŅ",
|
||||||
@@ -44,6 +47,10 @@
|
|||||||
"backup_database": "ĐĄŅваŅŅŅŅ ŅŅСĐĩŅвОвŅŅ ĐēĐžĐŋŅŅ ĐąĐ°ĐˇŅ Đ´Đ°ĐŊŅŅ
",
|
"backup_database": "ĐĄŅваŅŅŅŅ ŅŅСĐĩŅвОвŅŅ ĐēĐžĐŋŅŅ ĐąĐ°ĐˇŅ Đ´Đ°ĐŊŅŅ
",
|
||||||
"backup_database_enable_description": "ĐŖĐēĐģŅŅŅŅŅ ŅŅСĐĩŅваваĐŊĐŊĐĩ ĐąĐ°ĐˇŅ Đ´Đ°ĐŊŅŅ
",
|
"backup_database_enable_description": "ĐŖĐēĐģŅŅŅŅŅ ŅŅСĐĩŅваваĐŊĐŊĐĩ ĐąĐ°ĐˇŅ Đ´Đ°ĐŊŅŅ
",
|
||||||
"backup_keep_last_amount": "ĐĐžĐģŅĐēаŅŅŅ ĐŋаĐŋŅŅŅĐ´ĐŊŅŅ
ŅŅСĐĩŅвОвŅŅ
ĐēĐžĐŋŅĐš Đ´ĐģŅ ĐˇĐ°Ņ
аваĐŊĐŊŅ",
|
"backup_keep_last_amount": "ĐĐžĐģŅĐēаŅŅŅ ĐŋаĐŋŅŅŅĐ´ĐŊŅŅ
ŅŅСĐĩŅвОвŅŅ
ĐēĐžĐŋŅĐš Đ´ĐģŅ ĐˇĐ°Ņ
аваĐŊĐŊŅ",
|
||||||
|
"backup_onboarding_1_description": "СĐŊŅŅĐŊŅŅ ĐēĐžĐŋŅŅ Ņ Đ˛ĐžĐąĐģаĐēŅ Đ°ĐąĐž Ņ ŅĐŊŅŅĐŧ ŅŅСŅŅĐŊŅĐŧ ĐŧĐĩŅŅŅ.",
|
||||||
|
"backup_onboarding_2_description": "ĐģаĐēаĐģŅĐŊŅŅ ĐēĐžĐŋŅŅ ĐŊа ŅĐŊŅŅŅ
ĐŋŅŅĐģадаŅ
. ĐŅŅа ŅĐēĐģŅŅаĐĩ Ņ ŅŅĐąĐĩ аŅĐŊĐžŅĐŊŅŅ ŅаКĐģŅ Ņ ĐģаĐēаĐģŅĐŊŅŅ ŅŅСĐĩŅвОвŅŅ ĐēĐžĐŋŅŅ ĐŗŅŅŅŅ
ŅаКĐģаŅ.",
|
||||||
|
"backup_onboarding_parts_title": "Đ ŅСĐĩŅĐ˛ĐžĐ˛Đ°Ņ ĐēĐžĐŋŅŅ ÂĢ3-2-1Âģ ŅĐēĐģŅŅаĐĩ Ņ ŅŅĐąĐĩ:",
|
||||||
|
"backup_onboarding_title": "Đ ŅСĐĩŅвОвŅŅ ĐēĐžĐŋŅŅ",
|
||||||
"backup_settings": "ĐаĐģĐ°Đ´Ņ ŅŅСĐĩŅĐ˛ĐžĐ˛Đ°ĐŗĐ° ĐēаĐŋŅŅваĐŊĐŊŅ",
|
"backup_settings": "ĐаĐģĐ°Đ´Ņ ŅŅСĐĩŅĐ˛ĐžĐ˛Đ°ĐŗĐ° ĐēаĐŋŅŅваĐŊĐŊŅ",
|
||||||
"backup_settings_description": "ĐŅŅаваĐŊĐŊĐĩ ĐŊаĐģадаĐŧŅ ŅŅСĐĩŅваваĐŊĐŊŅ ĐąĐ°ĐˇŅ Đ´Đ°ĐŊŅŅ
.",
|
"backup_settings_description": "ĐŅŅаваĐŊĐŊĐĩ ĐŊаĐģадаĐŧŅ ŅŅСĐĩŅваваĐŊĐŊŅ ĐąĐ°ĐˇŅ Đ´Đ°ĐŊŅŅ
.",
|
||||||
"cleared_jobs": "ĐŅŅŅŅаĐŊŅ ĐˇĐ°Đ´Đ°ĐŊĐŊŅ Đ´ĐģŅ: {job}",
|
"cleared_jobs": "ĐŅŅŅŅаĐŊŅ ĐˇĐ°Đ´Đ°ĐŊĐŊŅ Đ´ĐģŅ: {job}",
|
||||||
@@ -56,14 +63,14 @@
|
|||||||
"confirm_user_pin_code_reset": "ĐŅ ŅĐŋŅŅĐŊĐĩĐŊŅ Ņ ŅŅĐŧ, ŅŅĐž ĐļадаĐĩŅĐĩ ŅĐēŅĐŊŅŅŅ PIN-ĐēОд {user}?",
|
"confirm_user_pin_code_reset": "ĐŅ ŅĐŋŅŅĐŊĐĩĐŊŅ Ņ ŅŅĐŧ, ŅŅĐž ĐļадаĐĩŅĐĩ ŅĐēŅĐŊŅŅŅ PIN-ĐēОд {user}?",
|
||||||
"create_job": "ĐĄŅваŅŅŅŅ ĐˇĐ°Đ´Đ°ĐŊĐŊĐĩ",
|
"create_job": "ĐĄŅваŅŅŅŅ ĐˇĐ°Đ´Đ°ĐŊĐŊĐĩ",
|
||||||
"cron_expression": "ĐŅŅаС Cron",
|
"cron_expression": "ĐŅŅаС Cron",
|
||||||
"cron_expression_description": "ĐŖŅŅаĐģŅĐšŅĐĩ ŅĐŊŅŅŅваĐģ ŅĐēаĐŊаваĐŊĐŊŅ, вŅĐēаŅŅŅŅĐžŅваŅŅŅ ŅаŅĐŧĐ°Ņ cron. ĐĐģŅ Đ°ŅŅŅĐŧаĐŊĐŊŅ Đ´Đ°Đ´Đ°ŅĐēОваК ŅĐŊŅаŅĐŧаŅŅŅ, ĐēаĐģŅ ĐģаŅĐēа, СвŅŅĐŊŅŅĐĩŅŅ, ĐŊаĐŋŅŅĐēĐģад, да <link>Crontab Guru</link>",
|
"cron_expression_description": "ĐадаКŅĐĩ ŅĐŊŅŅŅваĐģ ŅĐēаĐŊаваĐŊĐŊŅ, вŅĐēаŅŅŅŅĐžŅваŅŅŅ ŅаŅĐŧĐ°Ņ cron. ĐĐģŅ Đ°ŅŅŅĐŧаĐŊĐŊŅ Đ´Đ°Đ´Đ°ŅĐēОваК ŅĐŊŅаŅĐŧаŅŅŅ, СвŅŅĐŊŅŅĐĩŅŅ, ĐŊаĐŋŅŅĐēĐģад, да <link>Crontab Guru</link>",
|
||||||
"cron_expression_presets": "ĐŅадŅŅŅаĐŊĐžŅĐēŅ Đ˛ŅŅĐ°ĐˇĐ°Ņ Cron",
|
"cron_expression_presets": "ĐŅадŅŅŅаĐŊĐžŅĐēŅ Đ˛ŅŅĐ°ĐˇĐ°Ņ Cron",
|
||||||
"disable_login": "ĐĐ´ĐēĐģŅŅŅŅŅ ŅваŅ
Од",
|
"disable_login": "ĐĐ´ĐēĐģŅŅŅŅŅ ŅваŅ
Од",
|
||||||
"duplicate_detection_job_description": "ĐаĐŋŅŅŅŅŅŅ ĐŧаŅŅĐŊĐŊаĐĩ ĐŊавŅŅаĐŊĐŊĐĩ ĐŊа аĐēŅŅваŅ
Đ´ĐģŅ Đ˛ŅŅŅĐģĐĩĐŊĐŊŅ ĐŋадОйĐŊŅŅ
вŅŅŅ. ĐаĐģĐĩĐļŅŅŅ Đ°Đ´ Smart Search",
|
"duplicate_detection_job_description": "ĐаĐŋŅŅŅŅŅŅ ĐŧаŅŅĐŊĐŊаĐĩ ĐŊавŅŅаĐŊĐŊĐĩ ĐŊа аĐēŅŅваŅ
Đ´ĐģŅ Đ˛ŅŅŅĐģĐĩĐŊĐŊŅ ĐŋадОйĐŊŅŅ
вŅŅŅ. ĐаĐģĐĩĐļŅŅŅ Đ°Đ´ Smart Search",
|
||||||
"exclusion_pattern_description": "ШайĐģĐžĐŊŅ Đ˛ŅĐēĐģŅŅŅĐŊĐŊŅ Đ´Đ°ĐˇĐ˛Đ°ĐģŅŅŅŅ ŅĐŗĐŊаŅаваŅŅ ŅаКĐģŅ Ņ ĐŋаĐŋĐēŅ ĐŋŅŅ ŅĐēаĐŊаваĐŊĐŊŅ Đ˛Đ°ŅаК ĐąŅĐąĐģŅŅŅŅĐēŅ. ĐŅŅа ĐēаŅŅŅĐŊа, ĐēаĐģŅ Ņ Đ˛Đ°Ņ ŅŅŅŅ ĐŋаĐŋĐēŅ, ŅĐēŅŅ ĐˇĐŧŅŅŅаŅŅŅ ŅаКĐģŅ, ŅĐēŅŅ Đ˛Ņ ĐŊĐĩ Ņ
ĐžŅаŅĐĩ ŅĐŧĐŋаŅŅаваŅŅ, ĐŊаĐŋŅŅĐēĐģад, ŅаКĐģŅ RAW.",
|
"exclusion_pattern_description": "ШайĐģĐžĐŊŅ Đ˛ŅĐēĐģŅŅŅĐŊĐŊŅ Đ´Đ°ĐˇĐ˛Đ°ĐģŅŅŅŅ ŅĐŗĐŊаŅаваŅŅ ŅаКĐģŅ Ņ ĐŋаĐŋĐēŅ ĐŋŅŅ ŅĐēаĐŊаваĐŊĐŊŅ Đ˛Đ°ŅаК ĐąŅĐąĐģŅŅŅŅĐēŅ. ĐŅŅа ĐēаŅŅŅĐŊа, ĐēаĐģŅ Ņ Đ˛Đ°Ņ ŅŅŅŅ ĐŋаĐŋĐēŅ, ŅĐēŅŅ ĐˇĐŧŅŅŅаŅŅŅ ŅаКĐģŅ, ŅĐēŅŅ Đ˛Ņ ĐŊĐĩ Ņ
ĐžŅаŅĐĩ ŅĐŧĐŋаŅŅаваŅŅ, ĐŊаĐŋŅŅĐēĐģад, ŅаКĐģŅ RAW.",
|
||||||
"external_library_management": "ĐŅŅаваĐŊĐŊĐĩ СĐŊĐĩŅĐŊŅĐš ĐąŅĐąĐģŅŅŅŅĐēаК",
|
"external_library_management": "ĐŅŅаваĐŊĐŊĐĩ СĐŊĐĩŅĐŊŅĐš ĐąŅĐąĐģŅŅŅŅĐēаК",
|
||||||
"face_detection": "ĐŅŅŅĐģĐĩĐŊĐŊĐĩ ŅваŅаŅ",
|
"face_detection": "ĐŅŅŅĐģĐĩĐŊĐŊĐĩ ŅваŅаŅ",
|
||||||
"face_detection_description": "ĐŅŅŅĐģŅŅŅ ŅваŅŅ ĐŊа ŅĐžŅаСдŅĐŧĐēаŅ
Ņ Đ˛ŅĐ´Ņа С даĐŋаĐŧĐžĐŗĐ°Đš ĐŧаŅŅĐŊĐŊĐ°ĐŗĐ° ĐŊавŅŅаĐŊĐŊŅ. ĐĐģŅ Đ˛ŅĐ´Ņа ŅĐģŅŅваĐĩŅŅа ŅĐžĐģŅĐēŅ ĐŧŅĐŊŅŅŅŅŅа. \"ĐĐąĐŊавŅŅŅ\" (ĐŋĐĩŅа)аĐŋŅаŅĐžŅваĐĩ ŅŅĐĩ ĐŧĐĩĐ´ŅŅ. \"ĐĄĐēŅĐŊŅŅŅ\" дадаŅĐēОва аŅŅŅŅаĐĩ ŅŅĐĩ ĐąŅĐŗŅŅŅŅ Đ´Đ°Đ´ĐˇĐĩĐŊŅŅ ĐŋŅа ŅваŅŅ. \"ĐĐ´ŅŅŅĐŊŅŅаĐĩ\" ŅŅавŅŅŅ Ņ ŅаŅĐŗŅ ĐŧĐĩĐ´ŅŅ, ŅĐēŅŅ ŅŅŅŅ ĐŊĐĩ ĐąŅĐģŅ Đ°ĐŋŅаŅаваĐŊŅŅ. ĐŅŅŅĐģĐĩĐŊŅŅ ŅваŅŅ ĐąŅĐ´ŅŅŅ ĐŋаŅŅаŅĐģĐĩĐŊŅ Ņ ŅаŅĐŗŅ Đ´ĐģŅ ŅаŅĐŋаСĐŊаваĐŊĐŊŅ Đ°ŅОй ĐŋаŅĐģŅ ĐˇĐ°Đ˛ŅŅŅŅĐŊĐŊŅ Đ˛ŅŅŅĐģĐĩĐŊĐŊŅ ŅваŅаŅ, С ĐŗŅŅĐŋаваĐŊĐŊĐĩĐŧ ŅŅ
Đŋа ŅŅĐŊŅŅŅŅŅ
айО ĐŊОвŅŅ
ĐģŅдСŅŅ
.",
|
"face_detection_description": "ĐŅŅŅĐģŅŅŅ ŅваŅŅ ĐŊа ŅĐžŅаСдŅĐŧĐēаŅ
Ņ Đ˛ŅĐ´Ņа С даĐŋаĐŧĐžĐŗĐ°Đš ĐŧаŅŅĐŊĐŊĐ°ĐŗĐ° ĐŊавŅŅаĐŊĐŊŅ. ĐĐģŅ Đ˛ŅĐ´Ņа ŅĐģŅŅваĐĩŅŅа ŅĐžĐģŅĐēŅ ĐŧŅĐŊŅŅŅŅŅа. \"ĐĐąĐŊавŅŅŅ\" (ĐŋĐĩŅа)аĐŋŅаŅĐžŅваĐĩ ŅŅĐĩ ĐŧĐĩĐ´ŅŅ. \"ĐĄĐēŅĐŊŅŅŅ\" дадаŅĐēОва аŅŅŅŅаĐĩ ŅŅĐĩ ĐąŅĐŗŅŅŅŅ Đ´Đ°ĐŊŅŅ ĐŋŅа ŅваŅŅ. \"ĐĐ´ŅŅŅĐŊŅŅаĐĩ\" ŅŅавŅŅŅ Ņ ŅаŅĐŗŅ ĐŧĐĩĐ´ŅŅ, ŅĐēŅŅ ŅŅŅŅ ĐŊĐĩ ĐąŅĐģŅ Đ°ĐŋŅаŅаваĐŊŅŅ. ĐŅŅŅĐģĐĩĐŊŅŅ ŅваŅŅ ĐąŅĐ´ŅŅŅ ĐŋаŅŅаŅĐģĐĩĐŊŅ Ņ ŅаŅĐŗŅ Đ´ĐģŅ ŅаŅĐŋаСĐŊаваĐŊĐŊŅ Đ°ŅОй ĐŋаŅĐģŅ ĐˇĐ°Đ˛ŅŅŅŅĐŊĐŊŅ Đ˛ŅŅŅĐģĐĩĐŊĐŊŅ ŅваŅаŅ, С ĐŗŅŅĐŋаваĐŊĐŊĐĩĐŧ ŅŅ
Đŋа ŅŅĐŊŅŅŅŅŅ
айО ĐŊОвŅŅ
ĐģŅдСŅŅ
.",
|
||||||
"facial_recognition_job_description": "ĐŅŅĐŋаваŅŅ Đ˛ŅŅŅĐģĐĩĐŊŅŅ ŅваŅŅ Đŋа аŅОйаŅ
. ĐŅŅŅ ŅŅаĐŋ вŅĐēĐžĐŊваĐĩŅŅа ĐŋаŅĐģŅ ĐˇĐ°Đ˛ŅŅŅŅĐŊĐŊŅ Đ˛ŅŅŅĐģĐĩĐŊĐŊŅ ŅваŅаŅ. \"ĐĄĐēŅĐŊŅŅŅ\" (ĐŋаŅŅĐžŅĐŊа) ĐŋĐĩŅĐ°ĐŗŅŅĐŋĐžŅваĐĩ ŅŅĐĩ ŅваŅŅ. \"ĐĐ´ŅŅŅĐŊŅŅаĐĩ\" ŅŅавŅŅŅ Ņ ŅаŅĐŗŅ ŅваŅŅ, ŅĐēŅŅ ŅŅŅŅ ĐŊĐĩ ĐŋŅŅĐŋŅŅаĐŊŅŅ Đ´Đ° ŅĐēОК-ĐŊĐĩĐąŅĐ´ĐˇŅ Đ°ŅОйŅ.",
|
"facial_recognition_job_description": "ĐŅŅĐŋаваŅŅ Đ˛ŅŅŅĐģĐĩĐŊŅŅ ŅваŅŅ Đŋа аŅОйаŅ
. ĐŅŅŅ ŅŅаĐŋ вŅĐēĐžĐŊваĐĩŅŅа ĐŋаŅĐģŅ ĐˇĐ°Đ˛ŅŅŅŅĐŊĐŊŅ Đ˛ŅŅŅĐģĐĩĐŊĐŊŅ ŅваŅаŅ. \"ĐĄĐēŅĐŊŅŅŅ\" (ĐŋаŅŅĐžŅĐŊа) ĐŋĐĩŅĐ°ĐŗŅŅĐŋĐžŅваĐĩ ŅŅĐĩ ŅваŅŅ. \"ĐĐ´ŅŅŅĐŊŅŅаĐĩ\" ŅŅавŅŅŅ Ņ ŅаŅĐŗŅ ŅваŅŅ, ŅĐēŅŅ ŅŅŅŅ ĐŊĐĩ ĐŋŅŅĐŋŅŅаĐŊŅŅ Đ´Đ° ŅĐēОК-ĐŊĐĩĐąŅĐ´ĐˇŅ Đ°ŅОйŅ.",
|
||||||
"failed_job_command": "ĐаĐŧаĐŊда {command} ĐŊĐĩ вŅĐēаĐŊаĐģаŅŅ Đ´ĐģŅ ĐˇĐ°Đ´Đ°ĐŊĐŊŅ: {job}",
|
"failed_job_command": "ĐаĐŧаĐŊда {command} ĐŊĐĩ вŅĐēаĐŊаĐģаŅŅ Đ´ĐģŅ ĐˇĐ°Đ´Đ°ĐŊĐŊŅ: {job}",
|
||||||
"force_delete_user_warning": "ĐĐĐĐ¯Đ ĐĐĐĐĐĐĐ: ĐŅŅа дСĐĩŅĐŊĐŊĐĩ ĐŊĐĩадĐēĐģадĐŊа вŅдаĐģŅŅŅ ĐēаŅŅŅŅаĐģŅĐŊŅĐēа Ņ ŅŅĐĩ ай'ĐĩĐēŅŅ. ĐŅŅа дСĐĩŅĐŊĐŊĐĩ ĐŊĐĩ ĐŧĐžĐļа ĐąŅŅŅ Đ°Đ´ŅОйĐģĐĩĐŊа Ņ ŅаКĐģŅ ĐŊĐĩĐŧĐ°ĐŗŅŅĐŧа ĐąŅдСĐĩ адĐŊавŅŅŅ.",
|
"force_delete_user_warning": "ĐĐĐĐ¯Đ ĐĐĐĐĐĐĐ: ĐŅŅа дСĐĩŅĐŊĐŊĐĩ ĐŊĐĩадĐēĐģадĐŊа вŅдаĐģŅŅŅ ĐēаŅŅŅŅаĐģŅĐŊŅĐēа Ņ ŅŅĐĩ ай'ĐĩĐēŅŅ. ĐŅŅа дСĐĩŅĐŊĐŊĐĩ ĐŊĐĩ ĐŧĐžĐļа ĐąŅŅŅ Đ°Đ´ŅОйĐģĐĩĐŊа Ņ ŅаКĐģŅ ĐŊĐĩĐŧĐ°ĐŗŅŅĐŧа ĐąŅдСĐĩ адĐŊавŅŅŅ.",
|
||||||
@@ -75,17 +82,39 @@
|
|||||||
"image_fullsize_quality_description": "Đ¯ĐēаŅŅŅ Đ˛ŅŅĐ˛Ņ Ņ ĐŋĐžŅĐŊŅĐŧ ĐŋаĐŧĐĩŅŅ Đ°Đ´ 1 да 100. ĐĐžĐģŅŅ Đ˛ŅŅĐžĐēаĐĩ СĐŊаŅŅĐŊĐŊĐĩ ĐģĐĩĐŋŅаĐĩ, аĐģĐĩ ĐŋŅŅвОдСŅŅŅ Đ´Đ° ĐŋавĐĩĐģŅŅŅĐŊĐŊŅ ĐŋаĐŧĐĩŅŅ ŅаКĐģа.",
|
"image_fullsize_quality_description": "Đ¯ĐēаŅŅŅ Đ˛ŅŅĐ˛Ņ Ņ ĐŋĐžŅĐŊŅĐŧ ĐŋаĐŧĐĩŅŅ Đ°Đ´ 1 да 100. ĐĐžĐģŅŅ Đ˛ŅŅĐžĐēаĐĩ СĐŊаŅŅĐŊĐŊĐĩ ĐģĐĩĐŋŅаĐĩ, аĐģĐĩ ĐŋŅŅвОдСŅŅŅ Đ´Đ° ĐŋавĐĩĐģŅŅŅĐŊĐŊŅ ĐŋаĐŧĐĩŅŅ ŅаКĐģа.",
|
||||||
"image_fullsize_title": "ĐаĐģĐ°Đ´Ņ Đ˛ŅŅĐ˛Ņ Ņ ĐŋĐžŅĐŊŅĐŧ ĐŋаĐŧĐĩŅŅ",
|
"image_fullsize_title": "ĐаĐģĐ°Đ´Ņ Đ˛ŅŅĐ˛Ņ Ņ ĐŋĐžŅĐŊŅĐŧ ĐŋаĐŧĐĩŅŅ",
|
||||||
"image_prefer_embedded_preview": "ĐддаваŅŅ ĐŋĐĩŅĐ°Đ˛Đ°ĐŗŅ ŅĐąŅдаваĐŊаК ĐŋŅаŅвĐĩ",
|
"image_prefer_embedded_preview": "ĐддаваŅŅ ĐŋĐĩŅĐ°Đ˛Đ°ĐŗŅ ŅĐąŅдаваĐŊаК ĐŋŅаŅвĐĩ",
|
||||||
"image_prefer_embedded_preview_setting_description": "ĐŅĐēаŅŅŅŅĐžŅваŅŅ ŅĐąŅдаваĐŊŅŅ ĐŋŅаŅĐ˛Ņ Ņ RAW-ŅĐžŅаСдŅĐŧĐēаŅ
Ņ ŅĐēаŅŅŅ ŅваŅ
ОдĐŊŅŅ
дадСĐĩĐŊŅŅ
Đ´ĐģŅ Đ°ĐŋŅаŅĐžŅĐēŅ ĐŧаĐģŅĐŊĐēаŅ, ĐēаĐģŅ ĐŧĐ°ĐŗŅŅĐŧа. ĐŅŅа даСваĐģŅĐĩ аŅŅŅĐŧаŅŅ ĐąĐžĐģŅŅ Đ´Đ°ĐēĐģадĐŊŅŅ ĐēĐžĐģĐĩŅŅ Đ´ĐģŅ ĐŊĐĩĐēаŅĐžŅŅŅ
вŅдаŅŅŅаŅ, аĐģĐĩ Đļ ŅĐēаŅŅŅ ĐŋŅаŅŅ ĐˇĐ°ĐģĐĩĐļŅŅŅ Đ°Đ´ ĐēаĐŧĐĩŅŅ, Ņ ĐŊа вŅдаŅŅŅĐĩ ĐŧĐžĐļа ĐąŅŅŅ ĐąĐžĐģŅŅ Đ°ŅŅŅŅаĐēŅĐ°Ņ ŅŅŅŅĐēŅ.",
|
"image_prefer_embedded_preview_setting_description": "ĐŅĐēаŅŅŅŅĐžŅваŅŅ ŅĐąŅдаваĐŊŅŅ ĐŋŅаŅĐ˛Ņ Ņ RAW-ŅĐžŅаСдŅĐŧĐēаŅ
Ņ ŅĐēаŅŅŅ ŅваŅ
ОдĐŊŅŅ
даĐŊŅŅ
Đ´ĐģŅ Đ°ĐŋŅаŅĐžŅĐēŅ ĐŧаĐģŅĐŊĐēаŅ, ĐēаĐģŅ ĐŧĐ°ĐŗŅŅĐŧа. ĐŅŅа даСваĐģŅĐĩ аŅŅŅĐŧаŅŅ ĐąĐžĐģŅŅ Đ´Đ°ĐēĐģадĐŊŅŅ ĐēĐžĐģĐĩŅŅ Đ´ĐģŅ ĐŊĐĩĐēаŅĐžŅŅŅ
вŅдаŅŅŅаŅ, аĐģĐĩ Đļ ŅĐēаŅŅŅ ĐŋŅаŅŅ ĐˇĐ°ĐģĐĩĐļŅŅŅ Đ°Đ´ ĐēаĐŧĐĩŅŅ, Ņ ĐŊа вŅдаŅŅŅĐĩ ĐŧĐžĐļа ĐąŅŅŅ ĐąĐžĐģŅŅ Đ°ŅŅŅŅаĐēŅĐ°Ņ ŅŅŅŅĐēŅ.",
|
||||||
"image_prefer_wide_gamut": "ĐддаŅŅ ĐŋĐĩŅĐ°Đ˛Đ°ĐŗŅ ŅŅŅĐžĐēаК ĐŗĐ°ĐŧĐĩ",
|
"image_prefer_wide_gamut": "ĐддаŅŅ ĐŋĐĩŅĐ°Đ˛Đ°ĐŗŅ ŅŅŅĐžĐēаК ĐŗĐ°ĐŧĐĩ",
|
||||||
"image_preview_description": "ĐŅдаŅŅŅ ŅŅŅŅĐ´ĐŊŅĐŗĐ° ĐŋаĐŧĐĩŅŅ Đˇ вŅдаĐģĐĩĐŊŅĐŧŅ ĐŧĐĩŅададСĐĩĐŊŅĐŧŅ, вŅĐēаŅŅŅŅĐžŅваĐĩŅŅа ĐŋŅŅ ĐŋŅĐ°ĐŗĐģŅдСĐĩ аŅОйĐŊĐ°ĐŗĐ° ŅŅŅŅŅŅŅ Ņ Đ´ĐģŅ ĐŧаŅŅĐŊĐŊĐ°ĐŗĐ° ĐŊавŅŅаĐŊĐŊŅ",
|
"image_preview_description": "ĐŅдаŅŅŅ ŅŅŅŅĐ´ĐŊŅĐŗĐ° ĐŋаĐŧĐĩŅŅ Đˇ вŅдаĐģĐĩĐŊŅĐŧŅ ĐŧĐĩŅадаĐŊŅĐŧŅ, вŅĐēаŅŅŅŅĐžŅваĐĩŅŅа ĐŋŅŅ ĐŋŅĐ°ĐŗĐģŅдСĐĩ аŅОйĐŊĐ°ĐŗĐ° ŅŅŅŅŅŅŅ Ņ Đ´ĐģŅ ĐŧаŅŅĐŊĐŊĐ°ĐŗĐ° ĐŊавŅŅаĐŊĐŊŅ",
|
||||||
"image_preview_quality_description": "Đ¯ĐēаŅŅŅ ĐŋŅаŅĐ˛Ņ Đ°Đ´ 1 да 100. ЧŅĐŧ вŅŅŅĐš, ŅŅĐŧ ĐģĐĩĐŋŅ, аĐģĐĩ ĐŋŅŅ ĐŗŅŅŅĐŧ ŅŅваŅаŅŅŅа ŅаКĐģŅ ĐąĐžĐģŅŅĐ°ĐŗĐ° ĐŋаĐŧĐĩŅŅ Ņ ĐŧĐžĐļа СĐŊŅСŅŅŅа Ņ
ŅŅĐēаŅŅŅ Đ˛ĐžĐ´ĐŗŅĐēŅ ĐŋŅŅĐēĐģадаĐŊĐŊŅ. ĐŅŅаĐŊĐžŅĐēа ĐŊŅСĐēĐ°ĐŗĐ° СĐŊаŅŅĐŊĐŊŅ ĐŧĐžĐļа ĐŋаŅĐŋĐģŅваŅŅ ĐŊа ŅĐēаŅŅŅ ĐŧаŅŅĐŊĐŊĐ°ĐŗĐ° ĐŊавŅŅаĐŊĐŊŅ.",
|
"image_preview_quality_description": "Đ¯ĐēаŅŅŅ ĐŋŅаŅĐ˛Ņ Đ°Đ´ 1 да 100. ЧŅĐŧ вŅŅŅĐš, ŅŅĐŧ ĐģĐĩĐŋŅ, аĐģĐĩ ĐŋŅŅ ĐŗŅŅŅĐŧ ŅŅваŅаŅŅŅа ŅаКĐģŅ ĐąĐžĐģŅŅĐ°ĐŗĐ° ĐŋаĐŧĐĩŅŅ Ņ ĐŧĐžĐļа СĐŊŅСŅŅŅа Ņ
ŅŅĐēаŅŅŅ Đ˛ĐžĐ´ĐŗŅĐēŅ ĐŋŅŅĐēĐģадаĐŊĐŊŅ. ĐŅŅаĐŊĐžŅĐēа ĐŊŅСĐēĐ°ĐŗĐ° СĐŊаŅŅĐŊĐŊŅ ĐŧĐžĐļа ĐŋаŅĐŋĐģŅваŅŅ ĐŊа ŅĐēаŅŅŅ ĐŧаŅŅĐŊĐŊĐ°ĐŗĐ° ĐŊавŅŅаĐŊĐŊŅ.",
|
||||||
"image_preview_title": "ĐаĐģĐ°Đ´Ņ ĐŋаĐŋŅŅŅĐ´ĐŊŅĐŗĐ° ĐŋŅĐ°ĐŗĐģŅĐ´Ņ",
|
"image_preview_title": "ĐаĐģĐ°Đ´Ņ ĐŋаĐŋŅŅŅĐ´ĐŊŅĐŗĐ° ĐŋŅĐ°ĐŗĐģŅĐ´Ņ",
|
||||||
"image_quality": "Đ¯ĐēаŅŅŅ",
|
"image_quality": "Đ¯ĐēаŅŅŅ",
|
||||||
"image_resolution": "РаСдСŅĐģŅĐģŅĐŊаŅŅŅ",
|
"image_resolution": "РаСдСŅĐģŅĐģŅĐŊаŅŅŅ",
|
||||||
"image_settings": "ĐаĐģĐ°Đ´Ņ Đ˛ŅдаŅŅŅа",
|
"image_settings": "ĐаĐģĐ°Đ´Ņ Đ˛ŅдаŅŅŅа",
|
||||||
"image_settings_description": "ĐŅŅŅĐšŅĐĩ ŅĐēаŅŅŅ Ņ ŅаСдСŅĐģŅĐģŅĐŊаŅŅŅ ŅĐŗĐĩĐŊĐĩŅŅŅаваĐŊŅŅ
вŅдаŅŅŅаŅ",
|
"image_settings_description": "ĐŅŅŅĐšŅĐĩ ŅĐēаŅŅŅ Ņ ŅаСдСŅĐģŅĐģŅĐŊаŅŅŅ ŅĐŗĐĩĐŊĐĩŅŅŅаваĐŊŅŅ
вŅдаŅŅŅаŅ",
|
||||||
|
"image_thumbnail_title": "ĐаĐģĐ°Đ´Ņ ĐŧŅĐŊŅŅŅŅŅ",
|
||||||
|
"job_concurrency": "{job} ĐēаĐŊĐēŅŅŅĐŊŅĐŊаŅŅŅ",
|
||||||
|
"job_created": "ĐадаĐŊĐŊĐĩ ŅŅвОŅаĐŊа",
|
||||||
|
"job_not_concurrency_safe": "ĐŅŅа СадаĐŊĐŊĐĩ ĐŊĐĩĐąŅŅĐŋĐĩŅĐŊаĐĩ Đ´ĐģŅ ĐēаĐŊĐēŅŅŅĐŊŅĐŊĐ°ĐŗĐ°(адĐŊаŅаŅĐžĐ˛Đ°ĐŗĐ°, ĐŋаŅаĐģĐĩĐģŅĐŊĐ°ĐŗĐ°) вŅĐēаĐŊаĐŊĐŊŅ.",
|
||||||
|
"job_settings": "ĐаĐģĐ°Đ´Ņ ĐˇĐ°Đ´Đ°ĐŊĐŊŅŅ",
|
||||||
|
"job_settings_description": "ĐŅŅаваŅŅ ĐŊаĐģадаĐŧŅ Đ°Đ´ĐŊаŅаŅĐžĐ˛Đ°ĐŗĐ° (ĐŋаŅаĐģĐĩĐģŅĐŊĐ°ĐŗĐ°) вŅĐēаĐŊаĐŊĐŊŅ ĐˇĐ°Đ´Đ°ĐŊĐŊŅ",
|
||||||
|
"job_status": "ĐĄŅаĐŊОвŅŅŅа СадаĐŊĐŊŅ",
|
||||||
"library_created": "ĐĄŅвОŅаĐŊа ĐąŅĐąĐģŅŅŅŅĐēа: {library}",
|
"library_created": "ĐĄŅвОŅаĐŊа ĐąŅĐąĐģŅŅŅŅĐēа: {library}",
|
||||||
"library_deleted": "ĐŅĐąĐģŅŅŅŅĐēа вŅдаĐģĐĩĐŊа",
|
"library_deleted": "ĐŅĐąĐģŅŅŅŅĐēа вŅдаĐģĐĩĐŊа",
|
||||||
|
"library_scanning": "ĐĄĐēаĐŊаваĐŊĐŊĐĩ Đŋа ŅаŅĐēĐģадСĐĩ",
|
||||||
|
"library_scanning_description": "ĐаĐģадСŅŅĐĩ ĐŋаŅаĐŧĐĩŅŅŅ ŅĐēаĐŊаваĐŊĐŊŅ Đ˛Đ°ŅаК ĐąŅĐąĐģŅŅŅŅĐēŅ",
|
||||||
|
"library_scanning_enable_description": "ĐŖĐēĐģŅŅŅŅŅ ŅĐēаĐŊаваĐŊĐŊĐĩ ĐąŅĐąĐģŅŅŅŅĐēŅ Đŋа ŅаŅĐēĐģадСĐĩ",
|
||||||
|
"library_settings": "ĐĐŊĐĩŅĐŊŅŅ ĐąŅĐąĐģŅŅŅŅĐēа",
|
||||||
|
"library_settings_description": "ĐаĐģадСŅŅĐĩ ĐŋаŅаĐŧĐĩŅŅŅ ĐˇĐŊĐĩŅĐŊŅĐš ĐąŅĐąĐģŅŅŅŅĐēŅ",
|
||||||
|
"library_tasks_description": "ĐĄĐēаĐŊаваŅŅ ĐˇĐŊĐĩŅĐŊŅŅ ĐąŅĐąĐģŅŅŅŅĐēŅ ĐŊа ĐŊаŅŅĐŊаŅŅŅ ĐŊОвŅŅ
Ņ/айО СĐŧĐĩĐŊĐĩĐŊŅŅ
ŅŅŅŅŅŅаŅ",
|
||||||
|
"library_watching_enable_description": "ĐаСŅŅаŅŅ ĐˇĐ° СĐŧĐĩĐŊаĐŧŅ ŅаКĐģĐ°Ņ Ņ ĐˇĐŊĐĩŅĐŊŅŅ
ĐąŅĐąĐģŅŅŅŅĐēаŅ
",
|
||||||
|
"library_watching_settings": "ХаŅŅŅŅ ĐˇĐ° ĐąŅĐąĐģŅŅŅŅĐēаК (ŅĐēŅĐŋĐĩŅŅĐŧĐĩĐŊŅаĐģŅĐŊŅ)",
|
||||||
|
"library_watching_settings_description": "ĐŅŅаĐŧаŅŅŅĐŊа ŅаŅŅŅŅ ĐˇĐ° СĐŧĐĩĐŊаĐŧŅ Ņ ŅаКĐģаŅ
",
|
||||||
|
"logging_enable_description": "ĐŖĐēĐģŅŅŅŅŅ Đ˛ŅдСĐĩĐŊĐŊĐĩ ĐļŅŅĐŊаĐģа",
|
||||||
|
"logging_level_description": "ĐаĐģŅ ŅĐēĐģŅŅаĐŊа, ŅĐēŅ ŅСŅОвĐĩĐŊŅ ĐļŅŅĐŊаĐģŅваĐŊĐŊŅ Đ˛ŅĐēаŅŅŅŅĐžŅваŅŅ.",
|
||||||
|
"logging_settings": "ĐŅдСĐĩĐŊĐŊĐĩ ĐļŅŅĐŊаĐģа",
|
||||||
|
"machine_learning_clip_model": "CLIP ĐŧадŅĐģŅ",
|
||||||
|
"machine_learning_clip_model_description": "ĐаСва CLIP ĐŧадŅĐģŅ ĐŋаĐēаСаĐŊа <link>ŅŅŅ</link>. ĐвŅŅĐŊŅŅĐĩ ŅĐ˛Đ°ĐŗŅ, ŅŅĐž ĐŋŅŅ ĐˇĐŧĐĩĐŊĐĩ ĐŧадŅĐģŅ ĐŊĐĩайŅ
ОдĐŊа ĐŋаŅŅĐžŅĐŊа СаĐŋŅŅŅŅŅŅ ĐˇĐ°Đ´Đ°ĐŊĐŊĐĩ \"Smart Search\" Đ´ĐģŅ ŅŅŅŅ
вŅдаŅŅŅаŅ.",
|
||||||
|
"machine_learning_duplicate_detection": "ĐŅŅŅĐģĐĩĐŊĐŊĐĩ ĐŋадОйĐŊŅŅ
",
|
||||||
"map_dark_style": "ĐĻŅĐŧĐŊŅ ŅŅŅĐģŅ",
|
"map_dark_style": "ĐĻŅĐŧĐŊŅ ŅŅŅĐģŅ",
|
||||||
"map_enable_description": "ĐŖĐēĐģŅŅŅŅŅ ŅŅĐŊĐēŅŅŅ ĐēаŅŅŅ",
|
"map_enable_description": "ĐŖĐēĐģŅŅŅŅŅ ŅŅĐŊĐēŅŅŅ ĐēаŅŅŅ",
|
||||||
"map_gps_settings": "ĐаĐģĐ°Đ´Ņ ĐēаŅŅŅ Ņ GPS",
|
"map_gps_settings": "ĐаĐģĐ°Đ´Ņ ĐēаŅŅŅ Ņ GPS",
|
||||||
@@ -133,7 +162,7 @@
|
|||||||
"user_settings_description": "ĐŅŅаваĐŊĐŊĐĩ ĐŊаĐģадаĐŧŅ ĐēаŅŅŅŅаĐģŅĐŊŅĐēа",
|
"user_settings_description": "ĐŅŅаваĐŊĐŊĐĩ ĐŊаĐģадаĐŧŅ ĐēаŅŅŅŅаĐģŅĐŊŅĐēа",
|
||||||
"user_successfully_removed": "ĐаŅŅŅŅаĐģŅĐŊŅĐē {email} ĐąŅŅ ĐŋаŅĐŋŅŅ
Ова вŅдаĐģĐĩĐŊŅ.",
|
"user_successfully_removed": "ĐаŅŅŅŅаĐģŅĐŊŅĐē {email} ĐąŅŅ ĐŋаŅĐŋŅŅ
Ова вŅдаĐģĐĩĐŊŅ.",
|
||||||
"version_check_enabled_description": "ĐŖĐēĐģŅŅŅŅŅ ĐŋŅавĐĩŅĐēŅ Đ˛ĐĩŅŅŅŅ",
|
"version_check_enabled_description": "ĐŖĐēĐģŅŅŅŅŅ ĐŋŅавĐĩŅĐēŅ Đ˛ĐĩŅŅŅŅ",
|
||||||
"version_check_implications": "ФŅĐŊĐēŅŅŅ ĐŋŅавĐĩŅĐēŅ Đ˛ĐĩŅŅŅŅ ĐŋĐĩŅŅŅĐ´ŅŅĐŊа СвŅŅŅаĐĩŅŅа да github.com",
|
"version_check_implications": "ФŅĐŊĐēŅŅŅ ĐŋŅавĐĩŅĐēŅ Đ˛ĐĩŅŅŅŅ ĐŋĐĩŅŅŅĐ´ŅŅĐŊа СвŅŅŅаĐĩŅŅа да github.com",
|
||||||
"version_check_settings": "ĐŅавĐĩŅĐēа вĐĩŅŅŅŅ",
|
"version_check_settings": "ĐŅавĐĩŅĐēа вĐĩŅŅŅŅ",
|
||||||
"version_check_settings_description": "ĐŖĐēĐģŅŅŅŅŅ/адĐēĐģŅŅŅŅŅ Đ°ĐŋавŅŅŅŅĐŊĐŊŅ Đ°Đą ĐŊОваК вĐĩŅŅŅŅ"
|
"version_check_settings_description": "ĐŖĐēĐģŅŅŅŅŅ/адĐēĐģŅŅŅŅŅ Đ°ĐŋавŅŅŅŅĐŊĐŊŅ Đ°Đą ĐŊОваК вĐĩŅŅŅŅ"
|
||||||
},
|
},
|
||||||
@@ -206,7 +235,10 @@
|
|||||||
"asset_skipped_in_trash": "ĐŖ ŅĐŧĐĩŅĐŊŅŅŅ",
|
"asset_skipped_in_trash": "ĐŖ ŅĐŧĐĩŅĐŊŅŅŅ",
|
||||||
"asset_uploaded": "ĐаĐŋаĐŧĐŋаваĐŊа",
|
"asset_uploaded": "ĐаĐŋаĐŧĐŋаваĐŊа",
|
||||||
"asset_uploading": "ĐаĐŋаĐŧĐŋĐžŅваĐŊĐŊĐĩâĻ",
|
"asset_uploading": "ĐаĐŋаĐŧĐŋĐžŅваĐŊĐŊĐĩâĻ",
|
||||||
|
"assets_were_part_of_albums_count": "{count, plural, one {ĐĐēŅŅŅ ŅĐļĐž ĐąŅŅ} other {ĐĐēŅŅĐ˛Ņ ŅĐļĐž ĐąŅĐģŅ}} ŅаŅŅĐēаК аĐģŅйОĐŧŅ",
|
||||||
"authorized_devices": "ĐŅŅаŅŅСаваĐŊŅŅ ĐŋŅŅĐģадŅ",
|
"authorized_devices": "ĐŅŅаŅŅСаваĐŊŅŅ ĐŋŅŅĐģадŅ",
|
||||||
|
"automatic_endpoint_switching_subtitle": "ĐадĐēĐģŅŅаŅŅа ĐģаĐēаĐģŅĐŊа Đŋа вŅĐģŅŅаĐŊŅĐŧ Wi-Fi, ĐēаĐģŅ ĐŗŅŅа ĐŧĐ°ĐŗŅŅĐŧа, Ņ Đ˛ŅĐēаŅŅŅŅĐžŅваŅŅ Đ°ĐģŅŅŅŅĐŊаŅŅŅĐŊŅŅ ĐŋадĐēĐģŅŅŅĐŊĐŊŅ Ņ ŅĐŊŅŅŅ
ĐŧĐĩŅŅаŅ
",
|
||||||
|
"automatic_endpoint_switching_title": "ĐŅŅаĐŧаŅŅŅĐŊаĐĩ ĐŋĐĩŅаĐēĐģŅŅŅĐŊĐŊĐĩ URL",
|
||||||
"back": "ĐаСад",
|
"back": "ĐаСад",
|
||||||
"backup_album_selection_page_albums_device": "ĐĐģŅйОĐŧŅ ĐŊа ĐŋŅŅĐģадСĐĩ ({count})",
|
"backup_album_selection_page_albums_device": "ĐĐģŅйОĐŧŅ ĐŊа ĐŋŅŅĐģадСĐĩ ({count})",
|
||||||
"backup_all": "ĐŖŅĐĩ",
|
"backup_all": "ĐŖŅĐĩ",
|
||||||
@@ -369,6 +401,15 @@
|
|||||||
"purchase_button_buy": "ĐŅĐŋŅŅŅ",
|
"purchase_button_buy": "ĐŅĐŋŅŅŅ",
|
||||||
"purchase_button_buy_immich": "ĐŅĐŋŅŅŅ Immich",
|
"purchase_button_buy_immich": "ĐŅĐŋŅŅŅ Immich",
|
||||||
"purchase_button_select": "ĐŅĐąŅаŅŅ",
|
"purchase_button_select": "ĐŅĐąŅаŅŅ",
|
||||||
|
"readonly_mode_disabled": "ĐŅĐēĐģŅŅаĐŊŅ ŅŅĐļŅĐŧ ŅĐžĐģŅĐēŅ Đ´ĐģŅ ŅŅŅаĐŊĐŊŅ",
|
||||||
|
"readonly_mode_enabled": "ĐŖĐēĐģŅŅаĐŊŅ ŅŅĐļŅĐŧ ŅĐžĐģŅĐēŅ Đ´ĐģŅ ŅŅŅаĐŊĐŊŅ",
|
||||||
|
"reassign": "ĐĐĩŅаĐŋŅŅСĐŊаŅŅŅŅ",
|
||||||
|
"reassing_hint": "ĐŅŅĐŋŅŅаŅŅ Đ˛ŅĐąŅаĐŊŅŅ Đ°ĐēŅŅĐ˛Ņ ŅŅĐŊŅŅŅаК аŅОйĐĩ",
|
||||||
|
"recent": "ĐŅдаŅĐŊŅ",
|
||||||
|
"recent-albums": "ĐŅдаŅĐŊŅŅ Đ°ĐģŅйОĐŧŅ",
|
||||||
|
"recent_searches": "ĐŅдаŅĐŊŅŅ ĐŋĐžŅŅĐēŅ",
|
||||||
|
"recently_added": "ĐŅдаŅĐŊа дададСĐĩĐŊа",
|
||||||
|
"refresh_faces": "ĐĐąĐŊавŅŅŅ ŅваŅŅ",
|
||||||
"remove": "ĐŅдаĐģŅŅŅ",
|
"remove": "ĐŅдаĐģŅŅŅ",
|
||||||
"remove_from_album": "ĐŅдаĐģŅŅŅ Đˇ аĐģŅйОĐŧа",
|
"remove_from_album": "ĐŅдаĐģŅŅŅ Đˇ аĐģŅйОĐŧа",
|
||||||
"remove_from_favorites": "ĐŅдаĐģŅŅŅ Đˇ айŅаĐŊŅŅ
",
|
"remove_from_favorites": "ĐŅдаĐģŅŅŅ Đˇ айŅаĐŊŅŅ
",
|
||||||
@@ -457,7 +498,7 @@
|
|||||||
"view_all_users": "ĐŅĐ°ĐŗĐģŅдСĐĩŅŅ ŅŅĐĩŅ
ĐēаŅŅŅŅаĐģŅĐŊŅĐēаŅ",
|
"view_all_users": "ĐŅĐ°ĐŗĐģŅдСĐĩŅŅ ŅŅĐĩŅ
ĐēаŅŅŅŅаĐģŅĐŊŅĐēаŅ",
|
||||||
"view_in_timeline": "ĐĐ°ĐŗĐģŅдСĐĩŅŅ Ņ
ŅĐžĐŊŅĐēŅ",
|
"view_in_timeline": "ĐĐ°ĐŗĐģŅдСĐĩŅŅ Ņ
ŅĐžĐŊŅĐēŅ",
|
||||||
"view_links": "ĐŅĐ°ĐŗĐģŅдСĐĩŅŅ ŅĐŋаŅŅĐģĐēŅ",
|
"view_links": "ĐŅĐ°ĐŗĐģŅдСĐĩŅŅ ŅĐŋаŅŅĐģĐēŅ",
|
||||||
"view_name": "ĐŅĐ°ĐŗĐģĐĩдСĐĩŅŅ",
|
"view_name": "ĐŅĐ°ĐŗĐģŅĐ´",
|
||||||
"view_next_asset": "ĐаĐēаСаŅŅ ĐŊаŅŅŅĐŋĐŊŅ Đ°Đą'ĐĩĐēŅ",
|
"view_next_asset": "ĐаĐēаСаŅŅ ĐŊаŅŅŅĐŋĐŊŅ Đ°Đą'ĐĩĐēŅ",
|
||||||
"view_previous_asset": "ĐŅĐ°ĐŗĐģŅдСĐĩŅŅ ĐŋаĐŋŅŅŅĐ´ĐŊŅ Đ°Đą'ĐĩĐēŅ",
|
"view_previous_asset": "ĐŅĐ°ĐŗĐģŅдСĐĩŅŅ ĐŋаĐŋŅŅŅĐ´ĐŊŅ Đ°Đą'ĐĩĐēŅ",
|
||||||
"view_stack": "ĐŅĐ°ĐŗĐģŅĐ´ ŅŅŅĐēа",
|
"view_stack": "ĐŅĐ°ĐŗĐģŅĐ´ ŅŅŅĐēа",
|
||||||
|
|||||||
+149
-18
@@ -13,20 +13,24 @@
|
|||||||
"add_a_description": "ĐОйави ĐžĐŋиŅаĐŊиĐĩ",
|
"add_a_description": "ĐОйави ĐžĐŋиŅаĐŊиĐĩ",
|
||||||
"add_a_location": "ĐОйави ĐŧĐĩŅŅĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩ",
|
"add_a_location": "ĐОйави ĐŧĐĩŅŅĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩ",
|
||||||
"add_a_name": "ĐОйави иĐŧĐĩ",
|
"add_a_name": "ĐОйави иĐŧĐĩ",
|
||||||
"add_a_title": "ĐОйавĐĩŅĐĩ ĐˇĐ°ĐŗĐģавиĐĩ",
|
"add_a_title": "ĐОйaви ĐˇĐ°ĐŗĐģавиĐĩ",
|
||||||
|
"add_birthday": "ĐОйави даŅа ĐŊа ŅаĐļдаĐŊĐĩ",
|
||||||
"add_endpoint": "ĐОйави ĐēŅаКĐŊа ŅĐžŅĐēа",
|
"add_endpoint": "ĐОйави ĐēŅаКĐŊа ŅĐžŅĐēа",
|
||||||
"add_exclusion_pattern": "ĐОйави ĐŧОдĐĩĐģ Са иСĐēĐģŅŅваĐŊĐĩ",
|
"add_exclusion_pattern": "ĐОйави ĐŧОдĐĩĐģ Са иСĐēĐģŅŅваĐŊĐĩ",
|
||||||
"add_import_path": "ĐОйави ĐŋŅŅ ĐˇĐ° иĐŧĐŋĐžŅŅиŅаĐŊĐĩ",
|
"add_import_path": "ĐОйави ĐŋŅŅ ĐˇĐ° иĐŧĐŋĐžŅŅиŅаĐŊĐĩ",
|
||||||
"add_location": "ĐОйавĐĩŅĐĩ ĐŧĐĩŅŅĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩ",
|
"add_location": "Đoйави ĐŧĐĩŅŅĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩ",
|
||||||
"add_more_users": "ĐОйавĐĩŅĐĩ ĐžŅĐĩ ĐŋĐžŅŅĐĩйиŅĐĩĐģи",
|
"add_more_users": "ĐОйави ĐžŅĐĩ ĐŋĐžŅŅĐĩйиŅĐĩĐģи",
|
||||||
"add_partner": "ĐОйавĐĩŅĐĩ ĐŋаŅŅĐŊŅĐžŅ",
|
"add_partner": "ĐОйави ĐŋаŅŅĐŊŅĐžŅ",
|
||||||
"add_path": "ĐОйави ĐŋŅŅ",
|
"add_path": "ĐОйави ĐŋŅŅ",
|
||||||
"add_photos": "ĐОйавĐĩŅĐĩ ŅĐŊиĐŧĐēи",
|
"add_photos": "ĐОйави ŅĐŊиĐŧĐēи",
|
||||||
"add_tag": "ĐОйави ĐŧаŅĐēĐĩŅ",
|
"add_tag": "ĐОйави ĐŧаŅĐēĐĩŅ",
|
||||||
"add_to": "ĐОйави ĐēŅĐŧâĻ",
|
"add_to": "ĐОйави ĐēŅĐŧâĻ",
|
||||||
"add_to_album": "ĐОйави ĐēŅĐŧ аĐģĐąŅĐŧ",
|
"add_to_album": "ĐОйави ĐēŅĐŧ аĐģĐąŅĐŧ",
|
||||||
"add_to_album_bottom_sheet_added": "ĐОйавĐĩĐŊĐž в {album}",
|
"add_to_album_bottom_sheet_added": "ĐОйавĐĩĐŊĐž в {album}",
|
||||||
"add_to_album_bottom_sheet_already_exists": "ĐĐĩŅĐĩ Đĩ в {album}",
|
"add_to_album_bottom_sheet_already_exists": "ĐĐĩŅĐĩ Đĩ в {album}",
|
||||||
|
"add_to_album_toggle": "ĐĄĐŧĐĩĐŊĐĩŅĐĩ иСйОŅа Са {album}",
|
||||||
|
"add_to_albums": "ĐОйавŅĐŊĐĩ в аĐģĐąŅĐŧи",
|
||||||
|
"add_to_albums_count": "ĐОйавŅĐŊĐĩ в аĐģĐąŅĐŧи ({count})",
|
||||||
"add_to_shared_album": "ĐОйави ĐēŅĐŧ ŅĐŋОдĐĩĐģĐĩĐŊ аĐģĐąŅĐŧ",
|
"add_to_shared_album": "ĐОйави ĐēŅĐŧ ŅĐŋОдĐĩĐģĐĩĐŊ аĐģĐąŅĐŧ",
|
||||||
"add_url": "ĐОйави URL",
|
"add_url": "ĐОйави URL",
|
||||||
"added_to_archive": "ĐОйавĐĩĐŊĐž ĐēŅĐŧ аŅŅ
ива",
|
"added_to_archive": "ĐОйавĐĩĐŊĐž ĐēŅĐŧ аŅŅ
ива",
|
||||||
@@ -44,6 +48,13 @@
|
|||||||
"backup_database": "ĐĄŅСдаК ŅĐĩСĐĩŅвĐŊа йаСа даĐŊĐŊи",
|
"backup_database": "ĐĄŅСдаК ŅĐĩСĐĩŅвĐŊа йаСа даĐŊĐŊи",
|
||||||
"backup_database_enable_description": "РаСŅĐĩŅи ŅĐĩСĐĩŅвĐŊи ĐēĐžĐŋĐ¸Ņ ĐŊа йаСаŅа даĐŊĐŊи",
|
"backup_database_enable_description": "РаСŅĐĩŅи ŅĐĩСĐĩŅвĐŊи ĐēĐžĐŋĐ¸Ņ ĐŊа йаСаŅа даĐŊĐŊи",
|
||||||
"backup_keep_last_amount": "ĐŅОК СаĐŋаСĐĩĐŊи ŅĐĩСĐĩŅвĐŊи ĐēĐžĐŋиŅ",
|
"backup_keep_last_amount": "ĐŅОК СаĐŋаСĐĩĐŊи ŅĐĩСĐĩŅвĐŊи ĐēĐžĐŋиŅ",
|
||||||
|
"backup_onboarding_1_description": "ĐēĐžĐŋиĐĩ ĐŊа ОйĐģаĐēа иĐģи Đ´ŅŅĐŗĐž ŅиСиŅĐĩŅĐēĐž ĐŧŅŅŅĐž.",
|
||||||
|
"backup_onboarding_2_description": "ĐģĐžĐēаĐģĐŊи ĐēĐžĐŋĐ¸Ņ ĐŊа ŅаСĐģиŅĐŊи ŅŅŅŅОКŅŅва. ĐĸОва вĐēĐģŅŅва ĐžŅĐŊОвĐŊиŅĐĩ ŅаКĐģОвĐĩ и ĐģĐžĐēаĐģĐŊи аŅŅ
иви ĐŊа ŅĐĩСи ŅаКĐģОвĐĩ.",
|
||||||
|
"backup_onboarding_3_description": "ОйŅĐž ĐēĐžĐŋĐ¸Ņ ĐŊа ваŅиŅĐĩ даĐŊĐŊи, вĐēĐģŅŅиŅĐĩĐŊĐž ĐžŅĐ¸ĐŗĐ¸ĐŊаĐģĐŊиŅĐĩ ŅаКĐģОвĐĩ. ĐĸОва вĐēĐģŅŅва 1 ĐēĐžĐŋиĐĩ иСвŅĐŊ ŅиŅŅĐĩĐŧаŅа и 2 ĐģĐžĐēаĐģĐŊи ĐēĐžĐŋиŅ.",
|
||||||
|
"backup_onboarding_description": "Đа ĐŊадĐĩĐļĐ´ĐŊа СаŅиŅа ĐŋŅĐĩĐŋĐžŅŅŅваĐŧĐĩ ŅŅŅаŅĐĩĐŗĐ¸ŅŅа <backblaze-link>3-2-1</backblaze-link>. ĐŅавĐĩŅĐĩ аŅŅ
ивĐŊи ĐēĐžĐŋĐ¸Ņ ĐēаĐēŅĐž ĐŊа ĐēаŅĐĩĐŊиŅĐĩ ŅĐŊиĐŧĐēи/видĐĩа, ŅаĐēа и ĐŊа йаСаŅа даĐŊĐŊи ĐŊа Immich.",
|
||||||
|
"backup_onboarding_footer": "Đа ĐŋОдŅОйĐŊа иĐŊŅĐžŅĐŧаŅĐ¸Ņ ĐžŅĐŊĐžŅĐŊĐž аŅŅ
ивиŅаĐŊĐĩŅĐž в Immich, ĐŧĐžĐģŅ Đ˛Đ¸ĐļŅĐĩ в <link>Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅиŅŅа</link>.",
|
||||||
|
"backup_onboarding_parts_title": "ĐĄŅŅаŅĐĩĐŗĐ¸ŅŅа 3-2-1 вĐēĐģŅŅва:",
|
||||||
|
"backup_onboarding_title": "Đ ĐĩСĐĩŅвĐŊи ĐēĐžĐŋиŅ",
|
||||||
"backup_settings": "ĐаŅŅŅОКĐēа ĐŊа ŅĐĩСĐĩŅвĐŊи ĐēĐžĐŋĐ¸Ņ ĐŊа йаСаŅа даĐŊĐŊи",
|
"backup_settings": "ĐаŅŅŅОКĐēа ĐŊа ŅĐĩСĐĩŅвĐŊи ĐēĐžĐŋĐ¸Ņ ĐŊа йаСаŅа даĐŊĐŊи",
|
||||||
"backup_settings_description": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа ĐŊаŅŅŅОКĐēиŅĐĩ Са ŅĐĩСĐĩŅвĐŊĐž ĐēĐžĐŋиĐĩ ĐŊа йаСаŅа даĐŊĐŊи.",
|
"backup_settings_description": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа ĐŊаŅŅŅОКĐēиŅĐĩ Са ŅĐĩСĐĩŅвĐŊĐž ĐēĐžĐŋиĐĩ ĐŊа йаСаŅа даĐŊĐŊи.",
|
||||||
"cleared_jobs": "ĐСŅиŅŅĐĩĐŊи СадаŅи ĐžŅ ŅиĐŋ: {job}",
|
"cleared_jobs": "ĐСŅиŅŅĐĩĐŊи СадаŅи ĐžŅ ŅиĐŋ: {job}",
|
||||||
@@ -347,6 +358,9 @@
|
|||||||
"trash_number_of_days_description": "ĐŅОК Đ´ĐŊи, в ĐēОиŅĐž ŅаКĐģОвĐĩŅĐĩ да ŅĐĩ ŅŅŅ
ŅаĐŊŅĐ˛Đ°Ņ ĐŊа йОĐēĐģŅĐēа, ĐŋŅĐĩди да ĐąŅĐ´Đ°Ņ ĐžĐēĐžĐŊŅаŅĐĩĐģĐŊĐž ĐŋŅĐĩĐŧаŅ
ĐŊаŅи",
|
"trash_number_of_days_description": "ĐŅОК Đ´ĐŊи, в ĐēОиŅĐž ŅаКĐģОвĐĩŅĐĩ да ŅĐĩ ŅŅŅ
ŅаĐŊŅĐ˛Đ°Ņ ĐŊа йОĐēĐģŅĐēа, ĐŋŅĐĩди да ĐąŅĐ´Đ°Ņ ĐžĐēĐžĐŊŅаŅĐĩĐģĐŊĐž ĐŋŅĐĩĐŧаŅ
ĐŊаŅи",
|
||||||
"trash_settings": "ĐаŅŅŅОКĐēи ĐŊа ĐēĐžŅŅĐĩŅĐž",
|
"trash_settings": "ĐаŅŅŅОКĐēи ĐŊа ĐēĐžŅŅĐĩŅĐž",
|
||||||
"trash_settings_description": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа ĐŊаŅŅŅОКĐēиŅĐĩ ĐŊа ĐēĐžŅŅĐĩŅĐž",
|
"trash_settings_description": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа ĐŊаŅŅŅОКĐēиŅĐĩ ĐŊа ĐēĐžŅŅĐĩŅĐž",
|
||||||
|
"unlink_all_oauth_accounts": "ĐŅĐĩĐēŅаŅи вĐŋиŅваĐŊĐĩŅĐž ĐŊа вŅиŅĐēи OAuth ĐŋŅĐžŅиĐģи",
|
||||||
|
"unlink_all_oauth_accounts_description": "ĐĐĩ СайŅавŅĐšŅĐĩ да ĐŋŅĐĩĐēŅаŅиŅĐĩ вĐŋиŅваĐŊĐĩŅĐž ĐŊа вŅиŅĐēи OAuth ĐŋŅĐžŅиĐģи ĐŋŅĐĩди да ĐŧĐ¸ĐŗŅиŅаŅĐĩ ĐēŅĐŧ ĐŊОв Đ´ĐžŅŅавŅиĐē.",
|
||||||
|
"unlink_all_oauth_accounts_prompt": "ĐĄĐ¸ĐŗŅŅĐŊи Đģи ŅŅĐĩ, ŅĐĩ иŅĐēаŅĐĩ да ĐžŅĐŋиŅĐĩŅĐĩ вŅиŅĐēи OAuth ĐŋŅĐžŅиĐģи? ĐĸОва ŅĐĩ ĐŊŅĐģиŅа OAuth ID Са вŅĐĩĐēи ĐŋĐžŅŅĐĩйиŅĐĩĐģ и ĐŊĐĩ ĐŧĐžĐļĐĩ да ĐąŅĐ´Đĩ ĐžŅĐŧĐĩĐŊĐĩĐŊĐž.",
|
||||||
"user_cleanup_job": "ĐĐžŅиŅŅваĐŊĐĩ ĐŊа ĐŋĐžŅŅĐĩйиŅĐĩĐģи",
|
"user_cleanup_job": "ĐĐžŅиŅŅваĐŊĐĩ ĐŊа ĐŋĐžŅŅĐĩйиŅĐĩĐģи",
|
||||||
"user_delete_delay": "<b>{user}</b> aĐēаŅĐŊŅŅŅ Đ¸ ŅаКĐģОвĐĩŅĐĩ ĐŊа ĐŋĐžŅŅĐĩйиŅĐĩĐģŅ ŅĐĩ ĐąŅĐ´Đ°Ņ ĐŋĐģаĐŊиŅаĐŊи Са ĐŋĐžŅŅĐžŅĐŊĐŊĐž иСŅŅиваĐŊĐĩ ŅĐģĐĩĐ´ {delay, plural, one {# Đ´ĐĩĐŊ} other {# Đ´ĐŊи}}.",
|
"user_delete_delay": "<b>{user}</b> aĐēаŅĐŊŅŅŅ Đ¸ ŅаКĐģОвĐĩŅĐĩ ĐŊа ĐŋĐžŅŅĐĩйиŅĐĩĐģŅ ŅĐĩ ĐąŅĐ´Đ°Ņ ĐŋĐģаĐŊиŅаĐŊи Са ĐŋĐžŅŅĐžŅĐŊĐŊĐž иСŅŅиваĐŊĐĩ ŅĐģĐĩĐ´ {delay, plural, one {# Đ´ĐĩĐŊ} other {# Đ´ĐŊи}}.",
|
||||||
"user_delete_delay_settings": "ĐайавŅĐŊĐĩ ĐŊа иСŅŅиваĐŊĐĩ",
|
"user_delete_delay_settings": "ĐайавŅĐŊĐĩ ĐŊа иСŅŅиваĐŊĐĩ",
|
||||||
@@ -373,8 +387,6 @@
|
|||||||
"admin_password": "ĐĐ´ĐŧиĐŊиŅŅŅаŅĐžŅŅĐēа ĐŋаŅĐžĐģа",
|
"admin_password": "ĐĐ´ĐŧиĐŊиŅŅŅаŅĐžŅŅĐēа ĐŋаŅĐžĐģа",
|
||||||
"administration": "ĐĐ´ĐŧиĐŊиŅŅŅаŅиŅ",
|
"administration": "ĐĐ´ĐŧиĐŊиŅŅŅаŅиŅ",
|
||||||
"advanced": "РаСŅиŅĐĩĐŊĐž",
|
"advanced": "РаСŅиŅĐĩĐŊĐž",
|
||||||
"advanced_settings_beta_timeline_subtitle": "ĐĐŋиŅаКŅĐĩ ĐŊОвиŅĐĩ ŅŅĐŊĐēŅии ĐŊа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž",
|
|
||||||
"advanced_settings_beta_timeline_title": "ĐĐĩŅа вĐĩŅŅĐ¸Ņ ĐŊа вŅĐĩĐŧĐĩваŅа ĐģиĐŊиŅ",
|
|
||||||
"advanced_settings_enable_alternate_media_filter_subtitle": "ĐŅи ŅиĐŊŅ
ŅĐžĐŊиСаŅиŅ, иСĐŋĐžĐģСваКŅĐĩ ŅаСи ĐžĐŋŅĐ¸Ņ ĐēаŅĐž ŅиĐģŅŅŅ, ĐžŅĐŊОваĐŊ ĐŊа ĐŋŅĐžĐŧŅĐŊа ĐŊа дадĐĩĐŊ ĐēŅиŅĐĩŅии. ĐĐŋиŅаКŅĐĩ ŅаĐŧĐž в ŅĐģŅŅаК, ŅĐĩ ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž иĐŧа ĐŋŅОйĐģĐĩĐŧ Ņ ĐžŅĐēŅиваĐŊĐĩ ĐŊа вŅиŅĐēи аĐģĐąŅĐŧи.",
|
"advanced_settings_enable_alternate_media_filter_subtitle": "ĐŅи ŅиĐŊŅ
ŅĐžĐŊиСаŅиŅ, иСĐŋĐžĐģСваКŅĐĩ ŅаСи ĐžĐŋŅĐ¸Ņ ĐēаŅĐž ŅиĐģŅŅŅ, ĐžŅĐŊОваĐŊ ĐŊа ĐŋŅĐžĐŧŅĐŊа ĐŊа дадĐĩĐŊ ĐēŅиŅĐĩŅии. ĐĐŋиŅаКŅĐĩ ŅаĐŧĐž в ŅĐģŅŅаК, ŅĐĩ ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž иĐŧа ĐŋŅОйĐģĐĩĐŧ Ņ ĐžŅĐēŅиваĐŊĐĩ ĐŊа вŅиŅĐēи аĐģĐąŅĐŧи.",
|
||||||
"advanced_settings_enable_alternate_media_filter_title": "[ĐĐĐĄĐĐĐ ĐĐĐĐĐĸĐĐĐĐ] ĐСĐŋĐžĐģСваК ŅиĐģŅŅŅа ĐŊа аĐģŅĐĩŅĐŊаŅивĐŊĐžŅĐž ŅŅŅŅОКŅŅвО Са ŅиĐŊŅ
ŅĐžĐŊиСаŅĐ¸Ņ ĐŊа аĐģĐąŅĐŧи",
|
"advanced_settings_enable_alternate_media_filter_title": "[ĐĐĐĄĐĐĐ ĐĐĐĐĐĸĐĐĐĐ] ĐСĐŋĐžĐģСваК ŅиĐģŅŅŅа ĐŊа аĐģŅĐĩŅĐŊаŅивĐŊĐžŅĐž ŅŅŅŅОКŅŅвО Са ŅиĐŊŅ
ŅĐžĐŊиСаŅĐ¸Ņ ĐŊа аĐģĐąŅĐŧи",
|
||||||
"advanced_settings_log_level_title": "ĐивО ĐŊа СаĐŋĐ¸Ņ Đ˛ Đ´ĐŊĐĩвĐŊиĐēа: {level}",
|
"advanced_settings_log_level_title": "ĐивО ĐŊа СаĐŋĐ¸Ņ Đ˛ Đ´ĐŊĐĩвĐŊиĐēа: {level}",
|
||||||
@@ -382,13 +394,15 @@
|
|||||||
"advanced_settings_prefer_remote_title": "ĐŅĐĩĐ´ĐŋĐžŅиŅаК иСОйŅаĐļĐĩĐŊиŅŅа ĐŊа ŅŅŅвŅŅа",
|
"advanced_settings_prefer_remote_title": "ĐŅĐĩĐ´ĐŋĐžŅиŅаК иСОйŅаĐļĐĩĐŊиŅŅа ĐŊа ŅŅŅвŅŅа",
|
||||||
"advanced_settings_proxy_headers_subtitle": "ĐĐĩŅиĐŊиŅаĐŊĐĩ ĐŊа ĐŋŅĐžĐēŅи Ņ
ĐĩĐ´ŅŅи, ĐēОиŅĐž Immich ŅŅŅйва да иСĐŋŅаŅа Ņ Đ˛ŅŅĐēа ĐŧŅĐĩĐļОва СаŅвĐēа",
|
"advanced_settings_proxy_headers_subtitle": "ĐĐĩŅиĐŊиŅаĐŊĐĩ ĐŊа ĐŋŅĐžĐēŅи Ņ
ĐĩĐ´ŅŅи, ĐēОиŅĐž Immich ŅŅŅйва да иСĐŋŅаŅа Ņ Đ˛ŅŅĐēа ĐŧŅĐĩĐļОва СаŅвĐēа",
|
||||||
"advanced_settings_proxy_headers_title": "ĐŅĐžĐēŅи Ņ
ĐĩĐ´ŅŅи",
|
"advanced_settings_proxy_headers_title": "ĐŅĐžĐēŅи Ņ
ĐĩĐ´ŅŅи",
|
||||||
|
"advanced_settings_readonly_mode_subtitle": "ĐĐēŅивиŅа ŅĐĩĐļиĐŧа \"ŅаĐŧĐž Са ŅĐĩŅĐĩĐŊĐĩ\", ĐŋŅи ĐēОКŅĐž ŅĐŊиĐŧĐēиŅĐĩ ĐŧĐžĐŗĐ°Ņ Đ´Đ° ĐąŅĐ´Đ°Ņ ŅĐ°ĐˇĐŗĐģĐĩĐļдаĐŊи, ĐŊĐž ĐŊĐĩŅа ĐēаŅĐž Đ¸ĐˇĐąĐžŅ ĐŊа ĐŊŅĐēĐžĐģĐēĐž иСОйŅаĐļĐĩĐŊиŅ, ŅĐŋОдĐĩĐģŅĐŊĐĩ, иСŅŅиваĐŊĐĩ Ņа СайŅаĐŊĐĩĐŊи. ĐĐēŅивиŅаĐŊĐĩ/Đ´ĐĩаĐēŅивиŅаĐŊĐĩ ĐŊа ŅĐĩĐļиĐŧа ŅаĐŧĐž Са ŅĐĩŅĐĩĐŊĐĩ ŅŅава ĐžŅ ĐēаŅŅиĐŊĐēаŅа-аваŅĐ°Ņ ĐŊа ĐŋĐžŅŅĐĩйиŅĐĩĐģŅ ĐžŅ ĐžŅĐŊОвĐŊĐ¸Ņ ĐĩĐēŅаĐŊ",
|
||||||
|
"advanced_settings_readonly_mode_title": "Đ ĐĩĐļиĐŧ ŅаĐŧĐž Са ŅĐĩŅĐĩĐŊĐĩ",
|
||||||
"advanced_settings_self_signed_ssl_subtitle": "ĐŅĐžĐŋŅŅĐēа ĐŋŅОвĐĩŅĐēаŅа ĐŊа SSL-ŅĐĩŅŅиŅиĐēаŅа ĐŊа ŅŅŅвŅŅа. ĐСиŅĐēва ŅĐĩ ĐŋŅи ŅаĐŧĐžĐŋОдĐŋиŅаĐŊи ŅĐĩŅŅиŅиĐēаŅи.",
|
"advanced_settings_self_signed_ssl_subtitle": "ĐŅĐžĐŋŅŅĐēа ĐŋŅОвĐĩŅĐēаŅа ĐŊа SSL-ŅĐĩŅŅиŅиĐēаŅа ĐŊа ŅŅŅвŅŅа. ĐСиŅĐēва ŅĐĩ ĐŋŅи ŅаĐŧĐžĐŋОдĐŋиŅаĐŊи ŅĐĩŅŅиŅиĐēаŅи.",
|
||||||
"advanced_settings_self_signed_ssl_title": "РаСŅĐĩŅи ŅаĐŧĐžĐŋОдĐŋиŅаĐŊи SSL ŅĐĩŅŅиŅиĐēаŅи",
|
"advanced_settings_self_signed_ssl_title": "РаСŅĐĩŅи ŅаĐŧĐžĐŋОдĐŋиŅаĐŊи SSL ŅĐĩŅŅиŅиĐēаŅи",
|
||||||
"advanced_settings_sync_remote_deletions_subtitle": "ĐвŅĐžĐŧаŅиŅĐŊĐž иСŅŅии иĐģи вŅСŅŅаĐŊОви ОйĐĩĐēŅ ĐŊа ŅОва ŅŅŅŅОКŅŅвО, ĐēĐžĐŗĐ°ŅĐž Đ´ĐĩĐšŅŅвиĐĩŅĐž Đĩ иСвŅŅŅĐĩĐŊĐž ĐŋŅĐĩС ŅĐĩĐą-иĐŊŅĐĩŅŅĐĩĐšŅа",
|
"advanced_settings_sync_remote_deletions_subtitle": "ĐвŅĐžĐŧаŅиŅĐŊĐž иСŅŅии иĐģи вŅСŅŅаĐŊОви ОйĐĩĐēŅ ĐŊа ŅОва ŅŅŅŅОКŅŅвО, ĐēĐžĐŗĐ°ŅĐž Đ´ĐĩĐšŅŅвиĐĩŅĐž Đĩ иСвŅŅŅĐĩĐŊĐž ĐŋŅĐĩС ŅĐĩĐą-иĐŊŅĐĩŅŅĐĩĐšŅа",
|
||||||
"advanced_settings_sync_remote_deletions_title": "ХиĐŊŅ
ŅĐžĐŊиСаŅĐ¸Ņ ĐŊа диŅŅаĐŊŅиОĐŊĐŊи иСŅŅиваĐŊĐ¸Ņ [ĐĐĐĄĐĐĐ ĐĐĐĐĐĸĐĐĐĐ]",
|
"advanced_settings_sync_remote_deletions_title": "ХиĐŊŅ
ŅĐžĐŊиСаŅĐ¸Ņ ĐŊа диŅŅаĐŊŅиОĐŊĐŊи иСŅŅиваĐŊĐ¸Ņ [ĐĐĐĄĐĐĐ ĐĐĐĐĐĸĐĐĐĐ]",
|
||||||
"advanced_settings_tile_subtitle": "РаСŅиŅĐĩĐŊи ĐŋĐžŅŅĐĩйиŅĐĩĐģŅĐēи ĐŊаŅŅŅОКĐēи",
|
"advanced_settings_tile_subtitle": "РаСŅиŅĐĩĐŊи ĐŋĐžŅŅĐĩйиŅĐĩĐģŅĐēи ĐŊаŅŅŅОКĐēи",
|
||||||
"advanced_settings_troubleshooting_subtitle": "РаСŅĐĩŅи Đ´ĐžĐŋŅĐģĐŊиŅĐĩĐģĐŊи вŅСĐŧĐžĐļĐŊĐžŅŅи Са ĐžŅŅŅŅаĐŊŅваĐŊĐĩ ĐŊа ĐŋŅОйĐģĐĩĐŧи",
|
"advanced_settings_troubleshooting_subtitle": "РаСŅĐĩŅи Đ´ĐžĐŋŅĐģĐŊиŅĐĩĐģĐŊи вŅСĐŧĐžĐļĐŊĐžŅŅи Са ĐžŅŅŅŅаĐŊŅваĐŊĐĩ ĐŊа ĐŋŅОйĐģĐĩĐŧи",
|
||||||
"advanced_settings_troubleshooting_title": "ĐŅŅŅŅаĐŊŅваĐŊĐĩ ĐŊа ĐŋŅОйĐģĐĩĐŧи",
|
"advanced_settings_troubleshooting_title": "ĐŅŅŅŅаĐŊŅваĐŊe ĐŊа ĐŋŅОйĐģĐĩĐŧи",
|
||||||
"age_months": "ĐŅСŅаŅŅ {months, plural, one {# ĐŧĐĩŅĐĩŅ} other {# ĐŧĐĩŅĐĩŅи}}",
|
"age_months": "ĐŅСŅаŅŅ {months, plural, one {# ĐŧĐĩŅĐĩŅ} other {# ĐŧĐĩŅĐĩŅи}}",
|
||||||
"age_year_months": "ĐŅСŅаŅŅ 1 ĐŗĐžĐ´Đ¸ĐŊа, {months, plural, one {# ĐŧĐĩŅĐĩŅ} other {# ĐŧĐĩŅĐĩŅи}}",
|
"age_year_months": "ĐŅСŅаŅŅ 1 ĐŗĐžĐ´Đ¸ĐŊа, {months, plural, one {# ĐŧĐĩŅĐĩŅ} other {# ĐŧĐĩŅĐĩŅи}}",
|
||||||
"age_years": "{years, plural, other {ĐОдиĐŊа #}}",
|
"age_years": "{years, plural, other {ĐОдиĐŊа #}}",
|
||||||
@@ -397,6 +411,7 @@
|
|||||||
"album_cover_updated": "ĐĐąĐģĐžĐļĐēаŅа ĐŊа аĐģĐąŅĐŧа Đĩ аĐēŅŅаĐģиСиŅаĐŊа",
|
"album_cover_updated": "ĐĐąĐģĐžĐļĐēаŅа ĐŊа аĐģĐąŅĐŧа Đĩ аĐēŅŅаĐģиСиŅаĐŊа",
|
||||||
"album_delete_confirmation": "ĐĄĐ¸ĐŗŅŅĐŊи Đģи ŅŅĐĩ, ŅĐĩ иŅĐēаŅĐĩ да иСŅŅиĐĩŅĐĩ аĐģĐąŅĐŧа {album}?",
|
"album_delete_confirmation": "ĐĄĐ¸ĐŗŅŅĐŊи Đģи ŅŅĐĩ, ŅĐĩ иŅĐēаŅĐĩ да иСŅŅиĐĩŅĐĩ аĐģĐąŅĐŧа {album}?",
|
||||||
"album_delete_confirmation_description": "ĐĐēĐž ŅОСи аĐģĐąŅĐŧ Đĩ ŅĐŋОдĐĩĐģĐĩĐŊ, Đ´ŅŅĐŗĐ¸ ĐŋĐžŅŅĐĩйиŅĐĩĐģи вĐĩŅĐĩ ĐŊŅĐŧа да иĐŧĐ°Ņ Đ´ĐžŅŅŅĐŋ Đ´Đž ĐŊĐĩĐŗĐž.",
|
"album_delete_confirmation_description": "ĐĐēĐž ŅОСи аĐģĐąŅĐŧ Đĩ ŅĐŋОдĐĩĐģĐĩĐŊ, Đ´ŅŅĐŗĐ¸ ĐŋĐžŅŅĐĩйиŅĐĩĐģи вĐĩŅĐĩ ĐŊŅĐŧа да иĐŧĐ°Ņ Đ´ĐžŅŅŅĐŋ Đ´Đž ĐŊĐĩĐŗĐž.",
|
||||||
|
"album_deleted": "ĐĐģĐąŅĐŧа Đĩ иСŅŅиŅ",
|
||||||
"album_info_card_backup_album_excluded": "ĐĐĐĐЎЧĐĐ",
|
"album_info_card_backup_album_excluded": "ĐĐĐĐЎЧĐĐ",
|
||||||
"album_info_card_backup_album_included": "ĐĐĐЎЧĐĐ",
|
"album_info_card_backup_album_included": "ĐĐĐЎЧĐĐ",
|
||||||
"album_info_updated": "ĐĐŊŅĐžŅĐŧаŅиŅŅа Са аĐģĐąŅĐŧа Đĩ аĐēŅŅаĐģиСиŅаĐŊа",
|
"album_info_updated": "ĐĐŊŅĐžŅĐŧаŅиŅŅа Са аĐģĐąŅĐŧа Đĩ аĐēŅŅаĐģиСиŅаĐŊа",
|
||||||
@@ -406,7 +421,9 @@
|
|||||||
"album_options": "ĐаŅŅŅОКĐēи ĐŊа аĐģĐąŅĐŧа",
|
"album_options": "ĐаŅŅŅОКĐēи ĐŊа аĐģĐąŅĐŧа",
|
||||||
"album_remove_user": "ĐŅĐĩĐŧаŅ
ваĐŊĐĩ ĐŊа ĐŋĐžŅŅĐĩйиŅĐĩĐģ?",
|
"album_remove_user": "ĐŅĐĩĐŧаŅ
ваĐŊĐĩ ĐŊа ĐŋĐžŅŅĐĩйиŅĐĩĐģ?",
|
||||||
"album_remove_user_confirmation": "ĐĄĐ¸ĐŗŅŅĐŊи Đģи ŅŅĐĩ, ŅĐĩ иŅĐēаŅĐĩ да ĐŋŅĐĩĐŧаŅ
ĐŊĐĩŅĐĩ {user}?",
|
"album_remove_user_confirmation": "ĐĄĐ¸ĐŗŅŅĐŊи Đģи ŅŅĐĩ, ŅĐĩ иŅĐēаŅĐĩ да ĐŋŅĐĩĐŧаŅ
ĐŊĐĩŅĐĩ {user}?",
|
||||||
|
"album_search_not_found": "ĐŅĐŧа ĐŊаĐŧĐĩŅĐĩĐŊи аĐģĐąŅĐŧи, ĐžŅĐŗĐžĐ˛Đ°ŅŅŅи ĐŊа ŅŅŅŅĐĩĐŊĐĩŅĐž ви",
|
||||||
"album_share_no_users": "ĐĐˇĐŗĐģĐĩĐļда, ŅĐĩ ŅŅĐĩ ŅĐŋОдĐĩĐģиĐģи ŅОСи аĐģĐąŅĐŧ Ņ Đ˛ŅиŅĐēи ĐŋĐžŅŅĐĩйиŅĐĩĐģи иĐģи ĐŊŅĐŧаŅĐĩ Đ´ŅŅĐŗ ĐŋĐžŅŅĐĩйиŅĐĩĐģ, Ņ ĐēĐžĐŗĐžŅĐž да ĐŗĐž ŅĐŋОдĐĩĐģиŅĐĩ.",
|
"album_share_no_users": "ĐĐˇĐŗĐģĐĩĐļда, ŅĐĩ ŅŅĐĩ ŅĐŋОдĐĩĐģиĐģи ŅОСи аĐģĐąŅĐŧ Ņ Đ˛ŅиŅĐēи ĐŋĐžŅŅĐĩйиŅĐĩĐģи иĐģи ĐŊŅĐŧаŅĐĩ Đ´ŅŅĐŗ ĐŋĐžŅŅĐĩйиŅĐĩĐģ, Ņ ĐēĐžĐŗĐžŅĐž да ĐŗĐž ŅĐŋОдĐĩĐģиŅĐĩ.",
|
||||||
|
"album_summary": "ĐйОйŅĐĩĐŊиĐĩ ĐŊа аĐģĐąŅĐŧа",
|
||||||
"album_updated": "ĐĐģĐąŅĐŧŅŅ Đĩ аĐēŅŅаĐģиСиŅаĐŊ",
|
"album_updated": "ĐĐģĐąŅĐŧŅŅ Đĩ аĐēŅŅаĐģиСиŅаĐŊ",
|
||||||
"album_updated_setting_description": "ĐĐžĐģŅŅаваКŅĐĩ иСвĐĩŅŅиĐĩ ĐŋĐž иĐŧĐĩĐšĐģ, ĐēĐžĐŗĐ°ŅĐž ŅĐŋОдĐĩĐģĐĩĐŊ аĐģĐąŅĐŧ иĐŧа ĐŊОви ŅаКĐģОвĐĩ",
|
"album_updated_setting_description": "ĐĐžĐģŅŅаваКŅĐĩ иСвĐĩŅŅиĐĩ ĐŋĐž иĐŧĐĩĐšĐģ, ĐēĐžĐŗĐ°ŅĐž ŅĐŋОдĐĩĐģĐĩĐŊ аĐģĐąŅĐŧ иĐŧа ĐŊОви ŅаКĐģОвĐĩ",
|
||||||
"album_user_left": "ĐаĐŋŅŅĐŊа {album}",
|
"album_user_left": "ĐаĐŋŅŅĐŊа {album}",
|
||||||
@@ -425,6 +442,7 @@
|
|||||||
"albums_default_sort_order": "Đ ĐĩĐ´ ĐŋĐž ĐŋОдŅаСйиŅаĐŊĐĩ Са ŅĐžŅŅиŅаĐŊĐĩ ĐŊа аĐģĐąŅĐŧи",
|
"albums_default_sort_order": "Đ ĐĩĐ´ ĐŋĐž ĐŋОдŅаСйиŅаĐŊĐĩ Са ŅĐžŅŅиŅаĐŊĐĩ ĐŊа аĐģĐąŅĐŧи",
|
||||||
"albums_default_sort_order_description": "ĐŅŅвОĐŊаŅаĐģĐĩĐŊ ŅĐĩĐ´ ĐŊа ŅĐžŅŅиŅаĐŊĐĩ ĐŋŅи ŅŅСдаваĐŊĐĩ ĐŊа ĐŊОв аĐģĐąŅĐŧ.",
|
"albums_default_sort_order_description": "ĐŅŅвОĐŊаŅаĐģĐĩĐŊ ŅĐĩĐ´ ĐŊа ŅĐžŅŅиŅаĐŊĐĩ ĐŋŅи ŅŅСдаваĐŊĐĩ ĐŊа ĐŊОв аĐģĐąŅĐŧ.",
|
||||||
"albums_feature_description": "ĐĐžĐģĐĩĐēŅии ĐžŅ ĐžĐąĐĩĐēŅи, ĐēОиŅĐž ĐŧĐžĐŗĐ°Ņ Đ´Đ° ĐąŅĐ´Đ°Ņ ŅĐŋОдĐĩĐģŅĐŊи Ņ Đ´ŅŅĐŗĐ¸ ĐŋĐžŅĐĩйиŅĐĩĐģи.",
|
"albums_feature_description": "ĐĐžĐģĐĩĐēŅии ĐžŅ ĐžĐąĐĩĐēŅи, ĐēОиŅĐž ĐŧĐžĐŗĐ°Ņ Đ´Đ° ĐąŅĐ´Đ°Ņ ŅĐŋОдĐĩĐģŅĐŊи Ņ Đ´ŅŅĐŗĐ¸ ĐŋĐžŅĐĩйиŅĐĩĐģи.",
|
||||||
|
"albums_on_device_count": "ĐĐģĐąŅĐŧи ĐŊа ŅŅŅŅОКŅŅвОŅĐž ({count})",
|
||||||
"all": "ĐŅиŅĐēи",
|
"all": "ĐŅиŅĐēи",
|
||||||
"all_albums": "ĐŅиŅĐēи аĐģĐąŅĐŧи",
|
"all_albums": "ĐŅиŅĐēи аĐģĐąŅĐŧи",
|
||||||
"all_people": "ĐŅиŅĐēи Ņ
ĐžŅа",
|
"all_people": "ĐŅиŅĐēи Ņ
ĐžŅа",
|
||||||
@@ -444,6 +462,7 @@
|
|||||||
"app_bar_signout_dialog_title": "ĐСĐģĐĩС ĐžŅ ĐŋŅĐžŅиĐģа",
|
"app_bar_signout_dialog_title": "ĐСĐģĐĩС ĐžŅ ĐŋŅĐžŅиĐģа",
|
||||||
"app_settings": "ĐаŅŅŅОКĐēи Đŧа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž",
|
"app_settings": "ĐаŅŅŅОКĐēи Đŧа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž",
|
||||||
"appears_in": "ĐСĐģиСа в",
|
"appears_in": "ĐСĐģиСа в",
|
||||||
|
"apply_count": "ĐŅиĐģĐžĐļи ({count, number})",
|
||||||
"archive": "ĐŅŅ
ив",
|
"archive": "ĐŅŅ
ив",
|
||||||
"archive_action_prompt": "{count} Ņа дОйавĐĩĐŊи в ĐŅŅ
ива",
|
"archive_action_prompt": "{count} Ņа дОйавĐĩĐŊи в ĐŅŅ
ива",
|
||||||
"archive_or_unarchive_photo": "ĐŅŅ
ивиŅаĐŊĐĩ иĐģи Đ´ĐĩаŅŅ
ивиŅаĐŊĐĩ ĐŊа ŅĐŊиĐŧĐēа",
|
"archive_or_unarchive_photo": "ĐŅŅ
ивиŅаĐŊĐĩ иĐģи Đ´ĐĩаŅŅ
ивиŅаĐŊĐĩ ĐŊа ŅĐŊиĐŧĐēа",
|
||||||
@@ -476,6 +495,8 @@
|
|||||||
"asset_restored_successfully": "ĐŖŅĐŋĐĩŅĐŊĐž вŅСŅŅаĐŊОвĐĩĐŊ ОйĐĩĐēŅ",
|
"asset_restored_successfully": "ĐŖŅĐŋĐĩŅĐŊĐž вŅСŅŅаĐŊОвĐĩĐŊ ОйĐĩĐēŅ",
|
||||||
"asset_skipped": "ĐŅĐžĐŋŅŅĐŊаŅĐž",
|
"asset_skipped": "ĐŅĐžĐŋŅŅĐŊаŅĐž",
|
||||||
"asset_skipped_in_trash": "Đ ĐēĐžŅŅĐĩŅĐž",
|
"asset_skipped_in_trash": "Đ ĐēĐžŅŅĐĩŅĐž",
|
||||||
|
"asset_trashed": "ĐĐąĐĩĐēŅŅŅ Đĩ иСŅ
вŅŅĐģĐĩĐŊ",
|
||||||
|
"asset_troubleshoot": "ĐĐžĐŋŅавĐēа ĐŊа ĐŗŅĐĩŅĐēи Ņ ĐžĐąĐĩĐēŅа",
|
||||||
"asset_uploaded": "ĐаŅĐĩĐŊĐž",
|
"asset_uploaded": "ĐаŅĐĩĐŊĐž",
|
||||||
"asset_uploading": "ĐаŅваĐŊĐĩâĻ",
|
"asset_uploading": "ĐаŅваĐŊĐĩâĻ",
|
||||||
"asset_viewer_settings_subtitle": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа ĐŊаŅŅŅОКĐēиŅĐĩ Са Đ¸ĐˇĐŗĐģĐĩĐ´",
|
"asset_viewer_settings_subtitle": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа ĐŊаŅŅŅОКĐēиŅĐĩ Са Đ¸ĐˇĐŗĐģĐĩĐ´",
|
||||||
@@ -483,7 +504,9 @@
|
|||||||
"assets": "ĐĐģĐĩĐŧĐĩĐŊŅи",
|
"assets": "ĐĐģĐĩĐŧĐĩĐŊŅи",
|
||||||
"assets_added_count": "ĐОйавĐĩĐŊĐž {count, plural, one {# asset} other {# assets}}",
|
"assets_added_count": "ĐОйавĐĩĐŊĐž {count, plural, one {# asset} other {# assets}}",
|
||||||
"assets_added_to_album_count": "ĐОйавĐĩĐŊ(и) Ņа {count, plural, one {# аĐēŅив} other {# аĐēŅива}} в аĐģĐąŅĐŧа",
|
"assets_added_to_album_count": "ĐОйавĐĩĐŊ(и) Ņа {count, plural, one {# аĐēŅив} other {# аĐēŅива}} в аĐģĐąŅĐŧа",
|
||||||
|
"assets_added_to_albums_count": "{assetTotal, plural, one {# ОйĐĩĐēŅ Đĩ дОйавĐĩĐŊ} other {# ОйĐĩĐēŅа Ņа дОйавĐĩĐŊи}} в {albumTotal, plural, one {# аĐģĐąŅĐŧ} other {# аĐģĐąŅĐŧа}}",
|
||||||
"assets_cannot_be_added_to_album_count": "{count, plural, one {ĐĐąĐĩĐēŅа ĐŊĐĩ ĐŧĐžĐļĐĩ да ŅĐĩ дОйави} other {ĐĐąĐĩĐēŅиŅĐĩ ĐŊĐĩ ĐŧĐžĐļĐĩ да ŅĐĩ дОйавŅŅ}} в аĐģĐąŅĐŧа",
|
"assets_cannot_be_added_to_album_count": "{count, plural, one {ĐĐąĐĩĐēŅа ĐŊĐĩ ĐŧĐžĐļĐĩ да ŅĐĩ дОйави} other {ĐĐąĐĩĐēŅиŅĐĩ ĐŊĐĩ ĐŧĐžĐļĐĩ да ŅĐĩ дОйавŅŅ}} в аĐģĐąŅĐŧа",
|
||||||
|
"assets_cannot_be_added_to_albums": "{count, plural, one {ОйĐĩĐēŅ ĐŊĐĩ ĐŧĐžĐļĐĩ да ĐąŅĐ´Đĩ дОйавĐĩĐŊ} other {ОйĐĩĐēŅа ĐŊĐĩ ĐŧĐžĐŗĐ°Ņ Đ´Đ° ĐąŅĐ´Đ°Ņ Đ´ĐžĐąĐ°Đ˛ĐĩĐŊи}} в ĐŊиĐēОК ĐžŅ Đ°ĐģĐąŅĐŧиŅĐĩ",
|
||||||
"assets_count": "{count, plural, one {# аĐēŅив} other {# аĐēŅива}}",
|
"assets_count": "{count, plural, one {# аĐēŅив} other {# аĐēŅива}}",
|
||||||
"assets_deleted_permanently": "{count} ОйĐĩĐēŅа Ņа иСŅŅиŅи СавиĐŊĐ°ĐŗĐ¸",
|
"assets_deleted_permanently": "{count} ОйĐĩĐēŅа Ņа иСŅŅиŅи СавиĐŊĐ°ĐŗĐ¸",
|
||||||
"assets_deleted_permanently_from_server": "{count} ОйĐĩĐēŅа Ņа иСŅиŅи ĐžŅ Immich ŅŅŅвŅŅа СавиĐŊĐ°ĐŗĐ¸",
|
"assets_deleted_permanently_from_server": "{count} ОйĐĩĐēŅа Ņа иСŅиŅи ĐžŅ Immich ŅŅŅвŅŅа СавиĐŊĐ°ĐŗĐ¸",
|
||||||
@@ -500,14 +523,17 @@
|
|||||||
"assets_trashed_count": "ĐŅСŅŅаĐŊОвĐĩĐŊ(и) Ņа {count, plural, one {# ŅаКĐģ} other {# ŅаКĐģа}}",
|
"assets_trashed_count": "ĐŅСŅŅаĐŊОвĐĩĐŊ(и) Ņа {count, plural, one {# ŅаКĐģ} other {# ŅаКĐģа}}",
|
||||||
"assets_trashed_from_server": "{count} ОйĐĩĐēŅа Ņа ĐŋŅĐĩĐŧĐĩŅŅĐĩĐŊи в ĐēĐžŅа ĐŊа Immich ŅŅŅвŅŅа",
|
"assets_trashed_from_server": "{count} ОйĐĩĐēŅа Ņа ĐŋŅĐĩĐŧĐĩŅŅĐĩĐŊи в ĐēĐžŅа ĐŊа Immich ŅŅŅвŅŅа",
|
||||||
"assets_were_part_of_album_count": "{count, plural, one {ФаКĐģŅŅ Đĩ} other {ФаКĐģОвĐĩŅĐĩ Ņа}} вĐĩŅĐĩ ŅаŅŅ ĐžŅ Đ°ĐģĐąŅĐŧа",
|
"assets_were_part_of_album_count": "{count, plural, one {ФаКĐģŅŅ Đĩ} other {ФаКĐģОвĐĩŅĐĩ Ņа}} вĐĩŅĐĩ ŅаŅŅ ĐžŅ Đ°ĐģĐąŅĐŧа",
|
||||||
|
"assets_were_part_of_albums_count": "{count, plural, one {ОйĐĩĐēŅ Đ˛ĐĩŅĐĩ Đĩ} other {ОйĐĩĐēŅа вĐĩŅĐĩ Ņа}} ŅаŅŅ ĐžŅ Đ°ĐģĐąŅĐŧиŅĐĩ",
|
||||||
"authorized_devices": "ĐŖĐ´ĐžŅŅОвĐĩŅĐĩĐŊи ŅŅŅŅОКŅŅва",
|
"authorized_devices": "ĐŖĐ´ĐžŅŅОвĐĩŅĐĩĐŊи ŅŅŅŅОКŅŅва",
|
||||||
"automatic_endpoint_switching_subtitle": "ĐĐžĐŗĐ°ŅĐž Đĩ Đ´ĐžŅŅŅĐŋĐŊа, иСĐŋĐžĐģСваК ĐŋĐžŅĐžŅĐĩĐŊаŅа Wi-Fi ĐŧŅĐĩĐļа, иĐŊаŅĐĩ иСĐŋĐžĐģСваК аĐģŅĐĩŅĐŊаŅивĐŊи вŅŅСĐēи",
|
"automatic_endpoint_switching_subtitle": "ĐĐžĐŗĐ°ŅĐž Đĩ Đ´ĐžŅŅŅĐŋĐŊа, иСĐŋĐžĐģСваК ĐŋĐžŅĐžŅĐĩĐŊаŅа Wi-Fi ĐŧŅĐĩĐļа, иĐŊаŅĐĩ иСĐŋĐžĐģСваК аĐģŅĐĩŅĐŊаŅивĐŊи вŅŅСĐēи",
|
||||||
"automatic_endpoint_switching_title": "ĐвŅĐžĐŧаŅиŅĐŊĐž ĐŋŅĐĩвĐēĐģŅŅваĐŊĐĩ ĐŊа URL",
|
"automatic_endpoint_switching_title": "ĐвŅĐžĐŧаŅиŅĐŊĐž ĐŋŅĐĩвĐēĐģŅŅваĐŊĐĩ ĐŊа URL",
|
||||||
"autoplay_slideshow": "ĐвŅĐžĐŧаŅиŅĐŊа ŅĐŧŅĐŊа ĐŊа ŅĐģаКдОвĐĩŅĐĩ",
|
"autoplay_slideshow": "ĐвŅĐžĐŧаŅиŅĐŊа ŅĐŧŅĐŊа ĐŊа ŅĐģаКдОвĐĩŅĐĩ",
|
||||||
"back": "ĐаСад",
|
"back": "ĐаСад",
|
||||||
"back_close_deselect": "ĐаСад, СаŅваŅŅĐŊĐĩ иĐģи ĐŋŅĐĩĐŧаŅ
ваĐŊĐĩ ĐŊа иСйОŅа",
|
"back_close_deselect": "ĐаСад, СаŅваŅŅĐŊĐĩ иĐģи ĐŋŅĐĩĐŧаŅ
ваĐŊĐĩ ĐŊа иСйОŅа",
|
||||||
|
"background_backup_running_error": "ĐĄŅаŅŅиŅаĐŊĐž Đĩ ŅĐžĐŊОвО аŅŅ
ивиŅаĐŊĐĩ, ĐŊĐĩ ĐŧĐžĐļĐĩ да ŅĐĩ ĐŋŅŅĐŊĐĩ ŅŅŅĐŊĐž аŅŅ
ивиŅаĐŊĐĩ",
|
||||||
"background_location_permission": "РаСŅĐĩŅĐĩĐŊиĐĩ Са Đ´ĐžŅŅŅĐŋ Đ´Đž ĐŧĐĩŅŅĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩŅĐž вŅв ŅĐžĐŊОв ŅĐĩĐļиĐŧ",
|
"background_location_permission": "РаСŅĐĩŅĐĩĐŊиĐĩ Са Đ´ĐžŅŅŅĐŋ Đ´Đž ĐŧĐĩŅŅĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩŅĐž вŅв ŅĐžĐŊОв ŅĐĩĐļиĐŧ",
|
||||||
"background_location_permission_content": "Đа да ĐŧĐžĐļĐĩ да ŅĐĩŅĐĩ иĐŧĐĩĐŊаŅа ĐŊа Wi-Fi ĐŧŅĐĩĐļиŅĐĩ и да ĐŗĐ¸ ĐŋŅĐĩвĐēĐģŅŅва ĐŋŅи ŅайОŅа вŅв ŅĐžĐŊОв ŅĐĩĐļиĐŧ, Immich ŅŅŅйва *виĐŊĐ°ĐŗĐ¸* да иĐŧа Đ´ĐžŅŅŅĐŋ Đ´Đž ŅĐžŅĐŊĐžŅĐž ĐŧĐĩŅŅĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩ",
|
"background_location_permission_content": "Đа да ĐŧĐžĐļĐĩ да ŅĐĩŅĐĩ иĐŧĐĩĐŊаŅа ĐŊа Wi-Fi ĐŧŅĐĩĐļиŅĐĩ и да ĐŗĐ¸ ĐŋŅĐĩвĐēĐģŅŅва ĐŋŅи ŅайОŅа вŅв ŅĐžĐŊОв ŅĐĩĐļиĐŧ, Immich ŅŅŅйва *виĐŊĐ°ĐŗĐ¸* да иĐŧа Đ´ĐžŅŅŅĐŋ Đ´Đž ŅĐžŅĐŊĐžŅĐž ĐŧĐĩŅŅĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩ",
|
||||||
|
"background_options": "ĐĐŋŅии Са ŅĐžĐŊОвиŅĐĩ СадаŅи",
|
||||||
"backup": "ĐŅŅ
ивиŅаĐŊĐĩ",
|
"backup": "ĐŅŅ
ивиŅаĐŊĐĩ",
|
||||||
"backup_album_selection_page_albums_device": "ĐĐģĐąŅĐŧи ĐŊа ŅŅŅŅОКŅŅвОŅĐž ({count})",
|
"backup_album_selection_page_albums_device": "ĐĐģĐąŅĐŧи ĐŊа ŅŅŅŅОКŅŅвОŅĐž ({count})",
|
||||||
"backup_album_selection_page_albums_tap": "ĐаŅиŅĐŊи Са да вĐēĐģŅŅиŅ, двОКĐŊĐž Са да иСĐēĐģŅŅиŅ",
|
"backup_album_selection_page_albums_tap": "ĐаŅиŅĐŊи Са да вĐēĐģŅŅиŅ, двОКĐŊĐž Са да иСĐēĐģŅŅиŅ",
|
||||||
@@ -515,6 +541,7 @@
|
|||||||
"backup_album_selection_page_select_albums": "ĐĐˇĐąĐžŅ ĐŊа аĐģĐąŅĐŧи",
|
"backup_album_selection_page_select_albums": "ĐĐˇĐąĐžŅ ĐŊа аĐģĐąŅĐŧи",
|
||||||
"backup_album_selection_page_selection_info": "ĐĐŊŅĐžŅĐŧаŅĐ¸Ņ ĐˇĐ° иСйŅаĐŊĐžŅĐž",
|
"backup_album_selection_page_selection_info": "ĐĐŊŅĐžŅĐŧаŅĐ¸Ņ ĐˇĐ° иСйŅаĐŊĐžŅĐž",
|
||||||
"backup_album_selection_page_total_assets": "ĐŖĐŊиĐēаĐģĐŊи ОйĐĩĐēŅи ОйŅĐž",
|
"backup_album_selection_page_total_assets": "ĐŖĐŊиĐēаĐģĐŊи ОйĐĩĐēŅи ОйŅĐž",
|
||||||
|
"backup_albums_sync": "ХиĐŊŅ
ŅĐžĐŊиСиŅаĐŊĐĩ ĐŊа аŅŅ
ивиŅĐĩ",
|
||||||
"backup_all": "ĐŅиŅĐēĐž",
|
"backup_all": "ĐŅиŅĐēĐž",
|
||||||
"backup_background_service_backup_failed_message": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž аŅŅ
ивиŅаĐŊĐĩ. ĐОв ĐžĐŋиŅâĻ",
|
"backup_background_service_backup_failed_message": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž аŅŅ
ивиŅаĐŊĐĩ. ĐОв ĐžĐŋиŅâĻ",
|
||||||
"backup_background_service_connection_failed_message": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ŅвŅŅСваĐŊĐĩ ĐēŅĐŧ ŅŅŅвŅŅа. ĐОв ĐžĐŋиŅâĻ",
|
"backup_background_service_connection_failed_message": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ŅвŅŅСваĐŊĐĩ ĐēŅĐŧ ŅŅŅвŅŅа. ĐОв ĐžĐŋиŅâĻ",
|
||||||
@@ -564,13 +591,15 @@
|
|||||||
"backup_controller_page_turn_on": "ĐĐēĐģŅŅи аŅŅ
ивиŅаĐŊĐĩ в аĐēŅивĐĩĐŊ ŅĐĩĐļиĐŧ",
|
"backup_controller_page_turn_on": "ĐĐēĐģŅŅи аŅŅ
ивиŅаĐŊĐĩ в аĐēŅивĐĩĐŊ ŅĐĩĐļиĐŧ",
|
||||||
"backup_controller_page_uploading_file_info": "ĐĐŊŅĐž Са аŅŅ
ивиŅаĐŊĐ¸Ņ ŅаКĐģ",
|
"backup_controller_page_uploading_file_info": "ĐĐŊŅĐž Са аŅŅ
ивиŅаĐŊĐ¸Ņ ŅаКĐģ",
|
||||||
"backup_err_only_album": "ĐĐĩ ĐŧĐžĐļĐĩ да ŅĐĩ ĐŋŅĐĩĐŧаŅ
ĐŊĐĩ ĐĩдиĐŊŅŅвĐĩĐŊĐ¸Ņ Đ°ĐģĐąŅĐŧ",
|
"backup_err_only_album": "ĐĐĩ ĐŧĐžĐļĐĩ да ŅĐĩ ĐŋŅĐĩĐŧаŅ
ĐŊĐĩ ĐĩдиĐŊŅŅвĐĩĐŊĐ¸Ņ Đ°ĐģĐąŅĐŧ",
|
||||||
"backup_info_card_assets": "ОйĐĩĐēŅи",
|
"backup_info_card_assets": "ОйĐĩĐēŅа",
|
||||||
"backup_manual_cancelled": "ĐŅĐŧĐĩĐŊĐĩĐŊĐž",
|
"backup_manual_cancelled": "ĐŅĐŧĐĩĐŊĐĩĐŊĐž",
|
||||||
"backup_manual_in_progress": "ĐŅŅви аŅŅ
ивиŅаĐŊĐĩ. ĐĐŋиŅаК ŅĐģĐĩĐ´ ĐŧаĐģĐēĐž",
|
"backup_manual_in_progress": "ĐŅŅви аŅŅ
ивиŅаĐŊĐĩ. ĐĐŋиŅаК ŅĐģĐĩĐ´ ĐŧаĐģĐēĐž",
|
||||||
"backup_manual_success": "ĐŖŅĐŋĐĩŅĐŊĐž",
|
"backup_manual_success": "ĐŖŅĐŋĐĩŅĐŊĐž",
|
||||||
"backup_manual_title": "ĐĄŅŅŅĐžŅĐŊиĐĩ ĐŊа аŅŅ
ивиŅаĐŊĐĩŅĐž",
|
"backup_manual_title": "ĐĄŅŅŅĐžŅĐŊиĐĩ ĐŊа аŅŅ
ивиŅаĐŊĐĩŅĐž",
|
||||||
|
"backup_options": "ĐĐŋŅии Са аŅŅ
ивиŅаĐŊĐĩ",
|
||||||
"backup_options_page_title": "ĐаŅŅŅОКĐēи Са аŅŅ
ивиŅаĐŊĐĩ",
|
"backup_options_page_title": "ĐаŅŅŅОКĐēи Са аŅŅ
ивиŅаĐŊĐĩ",
|
||||||
"backup_setting_subtitle": "ĐŖĐŋŅавĐģŅваК ĐŊаŅŅŅОКĐēиŅĐĩ Са аŅŅ
ивиŅаĐŊĐĩ в аĐēŅивĐĩĐŊ и ŅĐžĐŊОв ŅĐĩĐļиĐŧ",
|
"backup_setting_subtitle": "ĐŖĐŋŅавĐģŅваК ĐŊаŅŅŅОКĐēиŅĐĩ Са аŅŅ
ивиŅаĐŊĐĩ в аĐēŅивĐĩĐŊ и ŅĐžĐŊОв ŅĐĩĐļиĐŧ",
|
||||||
|
"backup_settings_subtitle": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа ĐŊаŅŅŅОКĐēиŅĐĩ Са ĐēаŅваĐŊĐĩ",
|
||||||
"backward": "ĐаСад",
|
"backward": "ĐаСад",
|
||||||
"biometric_auth_enabled": "ĐĐēĐģŅŅĐĩĐŊа йиОĐŧĐĩŅŅиŅĐŊĐž ŅĐ´ĐžŅŅОвĐĩŅŅваĐŊĐĩ",
|
"biometric_auth_enabled": "ĐĐēĐģŅŅĐĩĐŊа йиОĐŧĐĩŅŅиŅĐŊĐž ŅĐ´ĐžŅŅОвĐĩŅŅваĐŊĐĩ",
|
||||||
"biometric_locked_out": "ĐŅĐŧа Đ´ĐžŅŅŅĐŋ Đ´Đž йиОĐŧĐĩŅŅиŅĐŊĐž ŅĐ´ĐžŅŅОвĐĩŅŅваĐŊĐĩ",
|
"biometric_locked_out": "ĐŅĐŧа Đ´ĐžŅŅŅĐŋ Đ´Đž йиОĐŧĐĩŅŅиŅĐŊĐž ŅĐ´ĐžŅŅОвĐĩŅŅваĐŊĐĩ",
|
||||||
@@ -589,7 +618,7 @@
|
|||||||
"cache_settings_clear_cache_button": "ĐСŅиŅŅи ĐēĐĩŅа",
|
"cache_settings_clear_cache_button": "ĐСŅиŅŅи ĐēĐĩŅа",
|
||||||
"cache_settings_clear_cache_button_title": "ĐСŅиŅŅва ĐēĐĩŅа ĐŊа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž. ĐĸОва ŅĐĩ ĐŋОвĐģиŅĐĩ ĐŋŅОиСвОдиŅĐĩĐģĐŊĐžŅŅŅа ĐŊа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž Đ´ĐžĐēаŅĐž ĐēĐĩŅа ĐŊĐĩ ĐąŅĐ´Đĩ ŅŅСдадĐĩĐŊ ĐžŅĐŊОвО.",
|
"cache_settings_clear_cache_button_title": "ĐСŅиŅŅва ĐēĐĩŅа ĐŊа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž. ĐĸОва ŅĐĩ ĐŋОвĐģиŅĐĩ ĐŋŅОиСвОдиŅĐĩĐģĐŊĐžŅŅŅа ĐŊа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž Đ´ĐžĐēаŅĐž ĐēĐĩŅа ĐŊĐĩ ĐąŅĐ´Đĩ ŅŅСдадĐĩĐŊ ĐžŅĐŊОвО.",
|
||||||
"cache_settings_duplicated_assets_clear_button": "ĐĐЧĐĐĄĐĸĐ",
|
"cache_settings_duplicated_assets_clear_button": "ĐĐЧĐĐĄĐĸĐ",
|
||||||
"cache_settings_duplicated_assets_subtitle": "ĐĄĐŊиĐŧĐēи и видĐĩа, ĐēОиŅĐž Ņа в ЧĐĩŅĐŊĐ¸Ņ ŅĐŋиŅŅĐē ĐŊа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž",
|
"cache_settings_duplicated_assets_subtitle": "ĐĄĐŊиĐŧĐēи и видĐĩа, ĐēОиŅĐž Ņа в ĐĄĐŋиŅŅĐēа Са Đ¸ĐŗĐŊĐžŅиŅаĐŊĐĩ ĐžŅ ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž",
|
||||||
"cache_settings_duplicated_assets_title": "ĐŅĐąĐģиŅаĐŊи ОйĐĩĐēŅи ({count})",
|
"cache_settings_duplicated_assets_title": "ĐŅĐąĐģиŅаĐŊи ОйĐĩĐēŅи ({count})",
|
||||||
"cache_settings_statistics_album": "ĐийĐģиОŅĐĩĐēа Ņ ĐŧиĐŊиаŅŅŅи",
|
"cache_settings_statistics_album": "ĐийĐģиОŅĐĩĐēа Ņ ĐŧиĐŊиаŅŅŅи",
|
||||||
"cache_settings_statistics_full": "ĐŅĐģĐŊи иСОйŅаĐļĐĩĐŊиŅ",
|
"cache_settings_statistics_full": "ĐŅĐģĐŊи иСОйŅаĐļĐĩĐŊиŅ",
|
||||||
@@ -606,6 +635,7 @@
|
|||||||
"cancel": "ĐŅĐēаĐļи",
|
"cancel": "ĐŅĐēаĐļи",
|
||||||
"cancel_search": "ĐŅĐŧĐĩĐŊи ŅŅŅŅĐĩĐŊĐĩŅĐž",
|
"cancel_search": "ĐŅĐŧĐĩĐŊи ŅŅŅŅĐĩĐŊĐĩŅĐž",
|
||||||
"canceled": "ĐŅĐŧĐĩĐŊĐĩĐŊĐž",
|
"canceled": "ĐŅĐŧĐĩĐŊĐĩĐŊĐž",
|
||||||
|
"canceling": "ĐĐŊŅĐģиŅаĐŊĐĩ",
|
||||||
"cannot_merge_people": "ĐĐĩ ĐŧĐžĐļĐĩ да ОйĐĩдиĐŊŅва Ņ
ĐžŅа",
|
"cannot_merge_people": "ĐĐĩ ĐŧĐžĐļĐĩ да ОйĐĩдиĐŊŅва Ņ
ĐžŅа",
|
||||||
"cannot_undo_this_action": "ĐĐĩ ĐŧĐžĐļĐĩŅĐĩ да ĐžŅĐŧĐĩĐŊиŅĐĩ ŅОва Đ´ĐĩĐšŅŅвиĐĩ!",
|
"cannot_undo_this_action": "ĐĐĩ ĐŧĐžĐļĐĩŅĐĩ да ĐžŅĐŧĐĩĐŊиŅĐĩ ŅОва Đ´ĐĩĐšŅŅвиĐĩ!",
|
||||||
"cannot_update_the_description": "ĐĐŋиŅаĐŊиĐĩŅĐž ĐŊĐĩ ĐŧĐžĐļĐĩ да ĐąŅĐ´Đĩ аĐēŅŅаĐģиСиŅаĐŊĐž",
|
"cannot_update_the_description": "ĐĐŋиŅаĐŊиĐĩŅĐž ĐŊĐĩ ĐŧĐžĐļĐĩ да ĐąŅĐ´Đĩ аĐēŅŅаĐģиСиŅаĐŊĐž",
|
||||||
@@ -628,6 +658,8 @@
|
|||||||
"change_pin_code": "ĐĄĐŧĐĩĐŊи PIN ĐēОда",
|
"change_pin_code": "ĐĄĐŧĐĩĐŊи PIN ĐēОда",
|
||||||
"change_your_password": "ĐŅĐžĐŧĐĩĐŊĐĩŅĐĩ ĐŋаŅĐžĐģаŅа Ņи",
|
"change_your_password": "ĐŅĐžĐŧĐĩĐŊĐĩŅĐĩ ĐŋаŅĐžĐģаŅа Ņи",
|
||||||
"changed_visibility_successfully": "ĐидиĐŧĐžŅŅŅа Đĩ ĐŋŅĐžĐŧĐĩĐŊĐĩĐŊа ŅŅĐŋĐĩŅĐŊĐž",
|
"changed_visibility_successfully": "ĐидиĐŧĐžŅŅŅа Đĩ ĐŋŅĐžĐŧĐĩĐŊĐĩĐŊа ŅŅĐŋĐĩŅĐŊĐž",
|
||||||
|
"charging": "ĐŅи СаŅĐĩĐļдаĐŊĐĩ",
|
||||||
|
"charging_requirement_mobile_backup": "ФОĐŊОвО аŅŅ
ивиŅаĐŊĐĩ ŅаĐŧĐž ĐŋŅи СаŅĐĩĐļдаĐŊĐĩ ĐŊа ŅŅŅŅОКŅŅвОŅĐž",
|
||||||
"check_corrupt_asset_backup": "ĐŅОвĐĩŅи Са ĐŋОвŅĐĩĐ´ĐĩĐŊи аŅŅ
ивĐŊи ĐēĐžĐŋиŅ",
|
"check_corrupt_asset_backup": "ĐŅОвĐĩŅи Са ĐŋОвŅĐĩĐ´ĐĩĐŊи аŅŅ
ивĐŊи ĐēĐžĐŋиŅ",
|
||||||
"check_corrupt_asset_backup_button": "ĐŅОвĐĩŅи",
|
"check_corrupt_asset_backup_button": "ĐŅОвĐĩŅи",
|
||||||
"check_corrupt_asset_backup_description": "ĐСĐŋŅĐģĐŊи ŅаСи ĐŋŅОвĐĩŅĐēа ŅаĐŧĐž ĐŋŅи Wi-Fi и ŅĐģĐĩĐ´ аŅŅ
ивиŅаĐŊĐĩ ĐŊа вŅиŅĐēи ОйĐĩĐēŅи. ĐŅĐžŅĐĩĐ´ŅŅаŅа ĐŧĐžĐļĐĩ да ĐŋŅОдŅĐģĐļи ĐŊŅĐēĐžĐģĐēĐž ĐŧиĐŊŅŅи.",
|
"check_corrupt_asset_backup_description": "ĐСĐŋŅĐģĐŊи ŅаСи ĐŋŅОвĐĩŅĐēа ŅаĐŧĐž ĐŋŅи Wi-Fi и ŅĐģĐĩĐ´ аŅŅ
ивиŅаĐŊĐĩ ĐŊа вŅиŅĐēи ОйĐĩĐēŅи. ĐŅĐžŅĐĩĐ´ŅŅаŅа ĐŧĐžĐļĐĩ да ĐŋŅОдŅĐģĐļи ĐŊŅĐēĐžĐģĐēĐž ĐŧиĐŊŅŅи.",
|
||||||
@@ -637,6 +669,7 @@
|
|||||||
"clear": "ĐСŅиŅŅи",
|
"clear": "ĐСŅиŅŅи",
|
||||||
"clear_all": "ĐСŅиŅŅи вŅиŅĐēĐž",
|
"clear_all": "ĐСŅиŅŅи вŅиŅĐēĐž",
|
||||||
"clear_all_recent_searches": "ĐСŅиŅŅĐĩŅĐĩ вŅиŅĐēи ŅĐēĐžŅĐžŅĐŊи ŅŅŅŅĐĩĐŊиŅ",
|
"clear_all_recent_searches": "ĐСŅиŅŅĐĩŅĐĩ вŅиŅĐēи ŅĐēĐžŅĐžŅĐŊи ŅŅŅŅĐĩĐŊиŅ",
|
||||||
|
"clear_file_cache": "ĐСŅиŅŅваĐŊĐĩ ĐŊа ĐēĐĩŅа ĐŊа ŅаКĐģОвĐĩŅĐĩ",
|
||||||
"clear_message": "ĐСŅиŅŅи ŅŅОйŅĐĩĐŊиĐĩŅĐž",
|
"clear_message": "ĐСŅиŅŅи ŅŅОйŅĐĩĐŊиĐĩŅĐž",
|
||||||
"clear_value": "ĐСŅиŅŅи ŅŅОКĐŊĐžŅŅŅа",
|
"clear_value": "ĐСŅиŅŅи ŅŅОКĐŊĐžŅŅŅа",
|
||||||
"client_cert_dialog_msg_confirm": "ĐĐ",
|
"client_cert_dialog_msg_confirm": "ĐĐ",
|
||||||
@@ -707,11 +740,13 @@
|
|||||||
"create_new_user": "ĐĄŅСдаваĐŊĐĩ ĐŊа ĐŊОв ĐŋĐžŅŅĐĩйиŅĐĩĐģ",
|
"create_new_user": "ĐĄŅСдаваĐŊĐĩ ĐŊа ĐŊОв ĐŋĐžŅŅĐĩйиŅĐĩĐģ",
|
||||||
"create_shared_album_page_share_add_assets": "ĐĐĐĐĐĐ ĐĐĐĐĐĸĐ",
|
"create_shared_album_page_share_add_assets": "ĐĐĐĐĐĐ ĐĐĐĐĐĸĐ",
|
||||||
"create_shared_album_page_share_select_photos": "ĐСйĐĩŅи ŅĐŊиĐŧĐēи",
|
"create_shared_album_page_share_select_photos": "ĐСйĐĩŅи ŅĐŊиĐŧĐēи",
|
||||||
|
"create_shared_link": "ĐĄŅСдаК ĐģиĐŊĐē Са ŅĐŋОдĐĩĐģŅĐŊĐĩ",
|
||||||
"create_tag": "ĐĄŅСдаК ŅĐ°Đŗ",
|
"create_tag": "ĐĄŅСдаК ŅĐ°Đŗ",
|
||||||
"create_tag_description": "ĐĄŅСдаКŅĐĩ ĐŊОв ŅĐ°Đŗ. Đа вĐģĐžĐļĐĩĐŊи ŅĐ°ĐŗĐžĐ˛Đĩ, ĐŧĐžĐģŅ, вŅвĐĩĐ´ĐĩŅĐĩ ĐŋŅĐģĐŊĐ¸Ņ ĐŋŅŅ ĐŊа ŅĐ°ĐŗĐ°, вĐēĐģŅŅиŅĐĩĐģĐŊĐž ĐŊаĐēĐģĐžĐŊĐĩĐŊиŅĐĩ ŅĐĩŅŅи.",
|
"create_tag_description": "ĐĄŅСдаКŅĐĩ ĐŊОв ŅĐ°Đŗ. Đа вĐģĐžĐļĐĩĐŊи ŅĐ°ĐŗĐžĐ˛Đĩ, ĐŧĐžĐģŅ, вŅвĐĩĐ´ĐĩŅĐĩ ĐŋŅĐģĐŊĐ¸Ņ ĐŋŅŅ ĐŊа ŅĐ°ĐŗĐ°, вĐēĐģŅŅиŅĐĩĐģĐŊĐž ĐŊаĐēĐģĐžĐŊĐĩĐŊиŅĐĩ ŅĐĩŅŅи.",
|
||||||
"create_user": "ĐĄŅСдаК ĐŋĐžŅŅĐĩйиŅĐĩĐģ",
|
"create_user": "ĐĄŅСдаК ĐŋĐžŅŅĐĩйиŅĐĩĐģ",
|
||||||
"created": "ĐĄŅСдадĐĩĐŊĐž",
|
"created": "ĐĄŅСдадĐĩĐŊĐž",
|
||||||
"created_at": "ĐĄŅСдадĐĩĐŊ",
|
"created_at": "ĐĄŅСдадĐĩĐŊ",
|
||||||
|
"creating_linked_albums": "ĐĄŅСдаваĐŊĐĩ ĐŊа ŅвŅŅСаĐŊи аĐģĐąŅĐŧи...",
|
||||||
"crop": "ĐСŅĐĩĐļи",
|
"crop": "ĐСŅĐĩĐļи",
|
||||||
"curated_object_page_title": "ĐĐĩŅа",
|
"curated_object_page_title": "ĐĐĩŅа",
|
||||||
"current_device": "ĐĸĐĩĐēŅŅĐž ŅŅŅŅОКŅŅвО",
|
"current_device": "ĐĸĐĩĐēŅŅĐž ŅŅŅŅОКŅŅвО",
|
||||||
@@ -719,6 +754,7 @@
|
|||||||
"current_server_address": "ĐаŅŅĐžŅŅ Đ°Đ´ŅĐĩŅ ĐŊа ŅŅŅвŅŅа",
|
"current_server_address": "ĐаŅŅĐžŅŅ Đ°Đ´ŅĐĩŅ ĐŊа ŅŅŅвŅŅа",
|
||||||
"custom_locale": "ĐĐĩŅŅĐžĐŊаĐģиСиŅаĐŊ ĐģĐžĐēаĐģ",
|
"custom_locale": "ĐĐĩŅŅĐžĐŊаĐģиСиŅаĐŊ ĐģĐžĐēаĐģ",
|
||||||
"custom_locale_description": "ФОŅĐŧаŅиŅаĐŊĐĩ ĐŊа даŅи и ŅиŅĐģа в СавиŅиĐŧĐžŅŅ ĐžŅ ĐĩСиĐēа и ŅĐĩĐŗĐ¸ĐžĐŊа",
|
"custom_locale_description": "ФОŅĐŧаŅиŅаĐŊĐĩ ĐŊа даŅи и ŅиŅĐģа в СавиŅиĐŧĐžŅŅ ĐžŅ ĐĩСиĐēа и ŅĐĩĐŗĐ¸ĐžĐŊа",
|
||||||
|
"custom_url": "ĐĐĩŅŅĐžĐŊаĐģиСиŅаĐŊ URL адŅĐĩŅ",
|
||||||
"daily_title_text_date": "E, dd MMM",
|
"daily_title_text_date": "E, dd MMM",
|
||||||
"daily_title_text_date_year": "E, dd MMM yyyy",
|
"daily_title_text_date_year": "E, dd MMM yyyy",
|
||||||
"dark": "ĐĸŅĐŧĐĩĐŊ",
|
"dark": "ĐĸŅĐŧĐĩĐŊ",
|
||||||
@@ -730,6 +766,7 @@
|
|||||||
"date_of_birth_saved": "ĐаŅа ĐŊа ŅаĐļдаĐŊĐĩ Đĩ СаĐŋиŅаĐŊа ŅŅĐŋĐĩŅĐŊĐž",
|
"date_of_birth_saved": "ĐаŅа ĐŊа ŅаĐļдаĐŊĐĩ Đĩ СаĐŋиŅаĐŊа ŅŅĐŋĐĩŅĐŊĐž",
|
||||||
"date_range": "ĐĐĩŅиОд ĐžŅ Đ˛ŅĐĩĐŧĐĩ",
|
"date_range": "ĐĐĩŅиОд ĐžŅ Đ˛ŅĐĩĐŧĐĩ",
|
||||||
"day": "ĐĐĩĐŊ",
|
"day": "ĐĐĩĐŊ",
|
||||||
|
"days": "ĐĐŊи",
|
||||||
"deduplicate_all": "ĐĐĩĐ´ŅĐŋĐģиĐēиŅаĐŊĐĩ ĐŊа вŅиŅĐēи",
|
"deduplicate_all": "ĐĐĩĐ´ŅĐŋĐģиĐēиŅаĐŊĐĩ ĐŊа вŅиŅĐēи",
|
||||||
"deduplication_criteria_1": "РаСĐŧĐĩŅ ĐŊа ŅĐŊиĐŧĐēаŅа в йаКŅОвĐĩ",
|
"deduplication_criteria_1": "РаСĐŧĐĩŅ ĐŊа ŅĐŊиĐŧĐēаŅа в йаКŅОвĐĩ",
|
||||||
"deduplication_criteria_2": "ĐŅОК EXIF даĐŊĐŊи",
|
"deduplication_criteria_2": "ĐŅОК EXIF даĐŊĐŊи",
|
||||||
@@ -738,7 +775,8 @@
|
|||||||
"default_locale": "ĐĐžĐēаĐģиСаŅĐ¸Ņ ĐŋĐž ĐŋОдŅаСйиŅаĐŊĐĩ",
|
"default_locale": "ĐĐžĐēаĐģиСаŅĐ¸Ņ ĐŋĐž ĐŋОдŅаСйиŅаĐŊĐĩ",
|
||||||
"default_locale_description": "ФОŅĐŧаŅиŅаĐŊĐĩ ĐŊа даŅи и ŅиŅĐģа в СавиŅиĐŧĐžŅŅ ĐžŅ ĐĩСиĐēОваŅа ĐŊаŅŅŅОКĐēа ĐŊа ĐąŅаŅСŅŅа",
|
"default_locale_description": "ФОŅĐŧаŅиŅаĐŊĐĩ ĐŊа даŅи и ŅиŅĐģа в СавиŅиĐŧĐžŅŅ ĐžŅ ĐĩСиĐēОваŅа ĐŊаŅŅŅОКĐēа ĐŊа ĐąŅаŅСŅŅа",
|
||||||
"delete": "ĐСŅŅиК",
|
"delete": "ĐСŅŅиК",
|
||||||
"delete_action_prompt": "{count} Ņа иСŅŅиŅи СавиĐŊĐ°ĐŗĐ¸",
|
"delete_action_confirmation_message": "ĐĄĐ¸ĐŗŅŅĐŊи Đģи ŅŅĐĩ, ŅĐĩ иŅĐēаŅĐĩ да иСŅŅиĐĩŅĐĩ ŅОСи ОйĐĩĐēŅ? ĐĄĐģĐĩдва ĐŋŅĐĩĐŧĐĩŅŅваĐŊĐĩ ĐŊа ОйĐĩĐēŅа в ĐēĐžŅа Са ĐžŅĐŋадŅŅи ĐŊа ŅŅŅвŅŅа и ŅĐĩ ĐŋĐžĐģŅŅиŅĐĩ ĐŋŅĐĩĐ´ĐģĐžĐļĐĩĐŊиĐĩ ОйĐĩĐēŅа да ĐąŅĐ´Đĩ иСŅŅĐ¸Ņ ĐģĐžĐēаĐģĐŊĐž",
|
||||||
|
"delete_action_prompt": "{count} Ņа иСŅŅиŅи",
|
||||||
"delete_album": "ĐСŅŅиК аĐģĐąŅĐŧ",
|
"delete_album": "ĐСŅŅиК аĐģĐąŅĐŧ",
|
||||||
"delete_api_key_prompt": "ĐĄĐ¸ĐŗŅŅĐŊи Đģи ŅŅĐĩ, ŅĐĩ иŅĐēаŅĐĩ да иСŅŅиĐĩŅĐĩ ŅОСи API ĐēĐģŅŅ?",
|
"delete_api_key_prompt": "ĐĄĐ¸ĐŗŅŅĐŊи Đģи ŅŅĐĩ, ŅĐĩ иŅĐēаŅĐĩ да иСŅŅиĐĩŅĐĩ ŅОСи API ĐēĐģŅŅ?",
|
||||||
"delete_dialog_alert": "ĐĸĐĩСи ОйĐĩĐēŅи ŅĐĩ ĐąŅĐ´Đ°Ņ Đ¸ĐˇŅŅиŅи СавиĐŊĐ°ĐŗĐ¸ и ĐžŅ Immich ŅŅŅвŅŅа и ĐžŅ ŅŅŅŅОКŅŅвОŅĐž",
|
"delete_dialog_alert": "ĐĸĐĩСи ОйĐĩĐēŅи ŅĐĩ ĐąŅĐ´Đ°Ņ Đ¸ĐˇŅŅиŅи СавиĐŊĐ°ĐŗĐ¸ и ĐžŅ Immich ŅŅŅвŅŅа и ĐžŅ ŅŅŅŅОКŅŅвОŅĐž",
|
||||||
@@ -756,6 +794,8 @@
|
|||||||
"delete_local_dialog_ok_backed_up_only": "ĐСŅŅиК ĐģĐžĐēаĐģĐŊĐž ŅаĐŧĐž аŅŅ
ивиŅаĐŊиŅĐĩ",
|
"delete_local_dialog_ok_backed_up_only": "ĐСŅŅиК ĐģĐžĐēаĐģĐŊĐž ŅаĐŧĐž аŅŅ
ивиŅаĐŊиŅĐĩ",
|
||||||
"delete_local_dialog_ok_force": "ĐŅĐŋŅĐĩĐēи ŅОва иСŅŅиК",
|
"delete_local_dialog_ok_force": "ĐŅĐŋŅĐĩĐēи ŅОва иСŅŅиК",
|
||||||
"delete_others": "ĐСŅŅиК ĐžŅŅаĐŊаĐģиŅĐĩ",
|
"delete_others": "ĐСŅŅиК ĐžŅŅаĐŊаĐģиŅĐĩ",
|
||||||
|
"delete_permanently": "ĐСŅŅиК Са ĐŋĐžŅŅĐžŅĐŊĐŊĐž",
|
||||||
|
"delete_permanently_action_prompt": "{count} иСŅŅиŅи Са ĐŋĐžŅŅĐžŅĐŊĐŊĐž",
|
||||||
"delete_shared_link": "ĐСŅŅиваĐŊĐĩ ĐŊа ŅĐŋОдĐĩĐģĐĩĐŊ ĐģиĐŊĐē",
|
"delete_shared_link": "ĐСŅŅиваĐŊĐĩ ĐŊа ŅĐŋОдĐĩĐģĐĩĐŊ ĐģиĐŊĐē",
|
||||||
"delete_shared_link_dialog_title": "ĐСŅŅиК ŅĐŋОдĐĩĐģĐĩĐŊаŅа вŅŅСĐēа",
|
"delete_shared_link_dialog_title": "ĐСŅŅиК ŅĐŋОдĐĩĐģĐĩĐŊаŅа вŅŅСĐēа",
|
||||||
"delete_tag": "ĐСŅŅиК ŅĐ°Đŗ",
|
"delete_tag": "ĐСŅŅиК ŅĐ°Đŗ",
|
||||||
@@ -766,6 +806,7 @@
|
|||||||
"description": "ĐĐŋиŅаĐŊиĐĩ",
|
"description": "ĐĐŋиŅаĐŊиĐĩ",
|
||||||
"description_input_hint_text": "ĐОйави ĐžĐŋиŅаĐŊиĐĩ...",
|
"description_input_hint_text": "ĐОйави ĐžĐŋиŅаĐŊиĐĩ...",
|
||||||
"description_input_submit_error": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ОйĐŊОвŅваĐŊĐĩ ĐŊа ĐžĐŋиŅаĐŊиĐĩŅĐž. Đа ĐŋОдŅОйĐŊĐžŅŅи виĐļŅĐĩ в Đ´ĐŊĐĩвĐŊиĐēа",
|
"description_input_submit_error": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ОйĐŊОвŅваĐŊĐĩ ĐŊа ĐžĐŋиŅаĐŊиĐĩŅĐž. Đа ĐŋОдŅОйĐŊĐžŅŅи виĐļŅĐĩ в Đ´ĐŊĐĩвĐŊиĐēа",
|
||||||
|
"deselect_all": "ĐŅĐĩĐŧаŅ
ĐŊи иСйОŅа ĐžŅ Đ˛ŅиŅĐēи",
|
||||||
"details": "ĐĐĩŅаКĐģи",
|
"details": "ĐĐĩŅаКĐģи",
|
||||||
"direction": "ĐĐžŅĐžĐēа",
|
"direction": "ĐĐžŅĐžĐēа",
|
||||||
"disabled": "ĐСĐēĐģŅŅĐĩĐŊĐž",
|
"disabled": "ĐСĐēĐģŅŅĐĩĐŊĐž",
|
||||||
@@ -810,8 +851,12 @@
|
|||||||
"edit": "Đ ĐĩдаĐēŅиŅаĐŊĐĩ",
|
"edit": "Đ ĐĩдаĐēŅиŅаĐŊĐĩ",
|
||||||
"edit_album": "Đ ĐĩдаĐēŅиŅаĐŊĐĩ ĐŊа аĐģĐąŅĐŧ",
|
"edit_album": "Đ ĐĩдаĐēŅиŅаĐŊĐĩ ĐŊа аĐģĐąŅĐŧ",
|
||||||
"edit_avatar": "Đ ĐĩдаĐēŅиŅаĐŊĐĩ ĐŊа аваŅаŅ",
|
"edit_avatar": "Đ ĐĩдаĐēŅиŅаĐŊĐĩ ĐŊа аваŅаŅ",
|
||||||
|
"edit_birthday": "Đ ĐĩдаĐēŅиŅаĐŊĐĩ ĐŊа ŅĐžĐļĐ´ĐĩĐŊ Đ´ĐĩĐŊ",
|
||||||
"edit_date": "Đ ĐĩдаĐēŅиŅаĐŊĐĩ ĐŊа даŅа",
|
"edit_date": "Đ ĐĩдаĐēŅиŅаĐŊĐĩ ĐŊа даŅа",
|
||||||
"edit_date_and_time": "Đ ĐĩдаĐēŅиŅаĐŊĐĩ ĐŊа даŅа и ŅаŅ",
|
"edit_date_and_time": "Đ ĐĩдаĐēŅиŅаĐŊĐĩ ĐŊа даŅа и ŅаŅ",
|
||||||
|
"edit_date_and_time_action_prompt": "{count} даŅа и вŅĐĩĐŧĐĩ Ņа ŅĐĩдаĐēŅиŅаĐŊи",
|
||||||
|
"edit_date_and_time_by_offset": "ĐŅĐžĐŧŅĐŊа ĐŊа даŅаŅа ŅŅĐĩС ĐžŅĐŧĐĩŅŅваĐŊĐĩ",
|
||||||
|
"edit_date_and_time_by_offset_interval": "ĐОв ĐŋĐĩŅиОд ĐžŅ Đ˛ŅĐĩĐŧĐĩ: {from} - {to}",
|
||||||
"edit_description": "Đ ĐĩдаĐēŅиŅаК ĐžĐŋиŅаĐŊиĐĩ",
|
"edit_description": "Đ ĐĩдаĐēŅиŅаК ĐžĐŋиŅаĐŊиĐĩ",
|
||||||
"edit_description_prompt": "ĐĐžĐģŅ, иСйĐĩŅи ĐŊОвО ĐžĐŋиŅаĐŊиĐĩ:",
|
"edit_description_prompt": "ĐĐžĐģŅ, иСйĐĩŅи ĐŊОвО ĐžĐŋиŅаĐŊиĐĩ:",
|
||||||
"edit_exclusion_pattern": "Đ ĐĩдаĐēŅиŅаĐŊĐĩ ĐŊа ŅайĐģĐžĐŊ Са иСĐēĐģŅŅваĐŊĐĩ",
|
"edit_exclusion_pattern": "Đ ĐĩдаĐēŅиŅаĐŊĐĩ ĐŊа ŅайĐģĐžĐŊ Са иСĐēĐģŅŅваĐŊĐĩ",
|
||||||
@@ -840,6 +885,7 @@
|
|||||||
"empty_trash": "ĐСĐŋŅаСваĐŊĐĩ ĐŊа ĐēĐžŅ",
|
"empty_trash": "ĐСĐŋŅаСваĐŊĐĩ ĐŊа ĐēĐžŅ",
|
||||||
"empty_trash_confirmation": "ĐĄĐ¸ĐŗŅŅĐŊи Đģи ŅŅĐĩ, ŅĐĩ иŅĐēаŅĐĩ да иСĐŋŅаСĐŊиŅĐĩ ĐēĐžŅŅĐĩŅĐž? ĐĸОва ŅĐĩ ĐŋŅĐĩĐŧаŅ
ĐŊĐĩ вŅиŅĐēĐž в ĐēĐžŅŅĐĩŅĐž Са ĐŋĐžŅŅĐžŅĐŊĐŊĐž ĐžŅ Immich.\nĐĐĩ ĐŧĐžĐļĐĩŅĐĩ да ĐžŅĐŧĐĩĐŊиŅĐĩ ŅОва Đ´ĐĩĐšŅŅвиĐĩ!",
|
"empty_trash_confirmation": "ĐĄĐ¸ĐŗŅŅĐŊи Đģи ŅŅĐĩ, ŅĐĩ иŅĐēаŅĐĩ да иСĐŋŅаСĐŊиŅĐĩ ĐēĐžŅŅĐĩŅĐž? ĐĸОва ŅĐĩ ĐŋŅĐĩĐŧаŅ
ĐŊĐĩ вŅиŅĐēĐž в ĐēĐžŅŅĐĩŅĐž Са ĐŋĐžŅŅĐžŅĐŊĐŊĐž ĐžŅ Immich.\nĐĐĩ ĐŧĐžĐļĐĩŅĐĩ да ĐžŅĐŧĐĩĐŊиŅĐĩ ŅОва Đ´ĐĩĐšŅŅвиĐĩ!",
|
||||||
"enable": "ĐĐēĐģŅŅваĐŊĐĩ",
|
"enable": "ĐĐēĐģŅŅваĐŊĐĩ",
|
||||||
|
"enable_backup": "ĐĐēĐģŅŅи ŅĐĩСĐĩŅвĐŊĐžŅĐž ĐēĐžĐŋиŅаĐŊĐĩ",
|
||||||
"enable_biometric_auth_description": "ĐŅвĐĩĐ´ĐĩŅĐĩ ваŅĐ¸Ņ PIN ĐēОд, Са да ŅаСŅĐĩŅиŅĐĩ йиОĐŧĐĩŅŅиŅĐŊĐž ŅĐ´ĐžŅŅОвĐĩŅŅваĐŊĐĩ",
|
"enable_biometric_auth_description": "ĐŅвĐĩĐ´ĐĩŅĐĩ ваŅĐ¸Ņ PIN ĐēОд, Са да ŅаСŅĐĩŅиŅĐĩ йиОĐŧĐĩŅŅиŅĐŊĐž ŅĐ´ĐžŅŅОвĐĩŅŅваĐŊĐĩ",
|
||||||
"enabled": "ĐĐēĐģŅŅĐĩĐŊĐž",
|
"enabled": "ĐĐēĐģŅŅĐĩĐŊĐž",
|
||||||
"end_date": "ĐŅаКĐŊа даŅа",
|
"end_date": "ĐŅаКĐŊа даŅа",
|
||||||
@@ -850,7 +896,9 @@
|
|||||||
"error": "ĐŅĐĩŅĐēа",
|
"error": "ĐŅĐĩŅĐēа",
|
||||||
"error_change_sort_album": "ĐĐĩŅŅĐŋĐĩŅĐŊа ĐŋŅĐžĐŧŅĐŊа ĐŊа ŅĐĩда ĐŊа ŅĐžŅŅиŅаĐŊĐĩ ĐŊа аĐģĐąŅĐŧ",
|
"error_change_sort_album": "ĐĐĩŅŅĐŋĐĩŅĐŊа ĐŋŅĐžĐŧŅĐŊа ĐŊа ŅĐĩда ĐŊа ŅĐžŅŅиŅаĐŊĐĩ ĐŊа аĐģĐąŅĐŧ",
|
||||||
"error_delete_face": "ĐŅĐĩŅĐēа ĐŋŅи иСŅŅиваĐŊĐĩ ĐŊа ĐģиŅĐĩ ĐžŅ Đ°ĐēŅива",
|
"error_delete_face": "ĐŅĐĩŅĐēа ĐŋŅи иСŅŅиваĐŊĐĩ ĐŊа ĐģиŅĐĩ ĐžŅ Đ°ĐēŅива",
|
||||||
|
"error_getting_places": "ĐŅĐĩŅĐēа ĐŋŅи ŅŅйиŅаĐŊĐĩ ĐŊа ĐŧĐĩŅŅаŅа",
|
||||||
"error_loading_image": "ĐŅĐĩŅĐēа ĐŋŅи СаŅĐĩĐļдаĐŊĐĩ ĐŊа иСОйŅаĐļĐĩĐŊиĐĩŅĐž",
|
"error_loading_image": "ĐŅĐĩŅĐēа ĐŋŅи СаŅĐĩĐļдаĐŊĐĩ ĐŊа иСОйŅаĐļĐĩĐŊиĐĩŅĐž",
|
||||||
|
"error_loading_partners": "ĐŅĐĩŅĐēа ĐŋŅи СаŅĐĩĐļдаĐŊĐĩ ĐŊа ĐŋаŅŅĐŊŅĐžŅи: {error}",
|
||||||
"error_saving_image": "ĐŅĐĩŅĐēа: {error}",
|
"error_saving_image": "ĐŅĐĩŅĐēа: {error}",
|
||||||
"error_tag_face_bounding_box": "ĐŅĐĩŅĐēа ĐŋŅи ĐžŅĐąĐĩĐģŅСваĐŊĐĩ ĐŊа ĐģиŅĐĩ - ĐŊĐĩŅŅĐŋĐĩŅĐŊĐž ĐŋĐžĐģŅŅаваĐŊĐĩ ĐŊа ĐēООŅдиĐŊаŅи ĐŊа ŅаĐŧĐēаŅа",
|
"error_tag_face_bounding_box": "ĐŅĐĩŅĐēа ĐŋŅи ĐžŅĐąĐĩĐģŅСваĐŊĐĩ ĐŊа ĐģиŅĐĩ - ĐŊĐĩŅŅĐŋĐĩŅĐŊĐž ĐŋĐžĐģŅŅаваĐŊĐĩ ĐŊа ĐēООŅдиĐŊаŅи ĐŊа ŅаĐŧĐēаŅа",
|
||||||
"error_title": "ĐŅĐĩŅĐēа - ĐŊĐĩŅĐž ŅĐĩ ОйŅŅĐēа",
|
"error_title": "ĐŅĐĩŅĐēа - ĐŊĐĩŅĐž ŅĐĩ ОйŅŅĐēа",
|
||||||
@@ -874,7 +922,7 @@
|
|||||||
"error_selecting_all_assets": "ĐŅĐĩŅĐēа ĐŋŅи иСйОŅа ĐŊа вŅиŅĐēи ŅаКĐģОвĐĩ",
|
"error_selecting_all_assets": "ĐŅĐĩŅĐēа ĐŋŅи иСйОŅа ĐŊа вŅиŅĐēи ŅаКĐģОвĐĩ",
|
||||||
"exclusion_pattern_already_exists": "ĐĸОСи ĐŧОдĐĩĐģ Са иСĐēĐģŅŅваĐŊĐĩ вĐĩŅĐĩ ŅŅŅĐĩŅŅвŅва.",
|
"exclusion_pattern_already_exists": "ĐĸОСи ĐŧОдĐĩĐģ Са иСĐēĐģŅŅваĐŊĐĩ вĐĩŅĐĩ ŅŅŅĐĩŅŅвŅва.",
|
||||||
"failed_to_create_album": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ŅŅСдаваĐŊĐĩ ĐŊа аĐģĐąŅĐŧ",
|
"failed_to_create_album": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ŅŅСдаваĐŊĐĩ ĐŊа аĐģĐąŅĐŧ",
|
||||||
"failed_to_create_shared_link": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ŅŅСдаваĐŊĐĩ ĐŊа ŅĐŋОдĐĩĐģĐĩĐŊа вŅŅСĐēа",
|
"failed_to_create_shared_link": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ŅŅСдаваĐŊĐĩ ĐŊа ŅĐŋoĐ´ĐĩĐģĐĩĐŊа вŅŅСĐēа",
|
||||||
"failed_to_edit_shared_link": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ŅĐĩдаĐēŅиŅаĐŊĐĩ ĐŊа ŅĐŋОдĐĩĐģĐĩĐŊа вŅŅСĐēа",
|
"failed_to_edit_shared_link": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ŅĐĩдаĐēŅиŅаĐŊĐĩ ĐŊа ŅĐŋОдĐĩĐģĐĩĐŊа вŅŅСĐēа",
|
||||||
"failed_to_get_people": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž СаŅĐĩĐļдаĐŊĐĩ ĐŊа Ņ
ĐžŅа",
|
"failed_to_get_people": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž СаŅĐĩĐļдаĐŊĐĩ ĐŊа Ņ
ĐžŅа",
|
||||||
"failed_to_keep_this_delete_others": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž СаĐŋаСваĐŊĐĩ ĐŊа ŅОСи ОйĐĩĐēŅ Đ¸ иСŅŅиваĐŊĐĩ ĐŊа ĐžŅŅаĐŊаĐģиŅĐĩ ОйĐĩĐēŅи",
|
"failed_to_keep_this_delete_others": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž СаĐŋаСваĐŊĐĩ ĐŊа ŅОСи ОйĐĩĐēŅ Đ¸ иСŅŅиваĐŊĐĩ ĐŊа ĐžŅŅаĐŊаĐģиŅĐĩ ОйĐĩĐēŅи",
|
||||||
@@ -883,6 +931,7 @@
|
|||||||
"failed_to_load_notifications": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž СаŅĐĩĐļдаĐŊĐĩ ĐŊа иСвĐĩŅŅиŅ",
|
"failed_to_load_notifications": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž СаŅĐĩĐļдаĐŊĐĩ ĐŊа иСвĐĩŅŅиŅ",
|
||||||
"failed_to_load_people": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž СаŅĐĩĐļдаĐŊĐĩ ĐŊа Ņ
ĐžŅа",
|
"failed_to_load_people": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž СаŅĐĩĐļдаĐŊĐĩ ĐŊа Ņ
ĐžŅа",
|
||||||
"failed_to_remove_product_key": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ĐŋŅĐĩĐŧаŅ
ваĐŊĐĩ ĐŊа ĐŋŅОдŅĐēŅĐžĐ˛Đ¸Ņ ĐēĐģŅŅ",
|
"failed_to_remove_product_key": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ĐŋŅĐĩĐŧаŅ
ваĐŊĐĩ ĐŊа ĐŋŅОдŅĐēŅĐžĐ˛Đ¸Ņ ĐēĐģŅŅ",
|
||||||
|
"failed_to_reset_pin_code": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ĐŊŅĐģиŅаĐŊĐĩ ĐŊа ĐĐĐ ĐēОда",
|
||||||
"failed_to_stack_assets": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ĐŋОдŅĐĩĐļдаĐŊĐĩ ĐŊа ОйĐĩĐēŅи",
|
"failed_to_stack_assets": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ĐŋОдŅĐĩĐļдаĐŊĐĩ ĐŊа ОйĐĩĐēŅи",
|
||||||
"failed_to_unstack_assets": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ĐŋŅĐĩĐŧаŅ
ваĐŊĐĩ ĐŊа ĐŋОдŅĐĩдйаŅа ĐŊа ОйĐĩĐēŅи",
|
"failed_to_unstack_assets": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ĐŋŅĐĩĐŧаŅ
ваĐŊĐĩ ĐŊа ĐŋОдŅĐĩдйаŅа ĐŊа ОйĐĩĐēŅи",
|
||||||
"failed_to_update_notification_status": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ОйĐŊОвŅваĐŊĐĩ ĐŊа ŅŅŅŅĐžŅĐŊиĐĩŅĐž ĐŊа иСвĐĩŅŅиŅŅа",
|
"failed_to_update_notification_status": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ОйĐŊОвŅваĐŊĐĩ ĐŊа ŅŅŅŅĐžŅĐŊиĐĩŅĐž ĐŊа иСвĐĩŅŅиŅŅа",
|
||||||
@@ -891,6 +940,7 @@
|
|||||||
"paths_validation_failed": "{paths, plural, one {# ĐŋŅŅ} other {# ĐŋŅŅиŅа}} ĐŊĐĩ ĐŋŅĐĩĐŧиĐŊаŅ
а ваĐģидаŅиŅ",
|
"paths_validation_failed": "{paths, plural, one {# ĐŋŅŅ} other {# ĐŋŅŅиŅа}} ĐŊĐĩ ĐŋŅĐĩĐŧиĐŊаŅ
а ваĐģидаŅиŅ",
|
||||||
"profile_picture_transparent_pixels": "ĐŅĐžŅиĐģĐŊиŅĐĩ ŅĐŊиĐŧĐēи ĐŊĐĩ ĐŧĐžĐŗĐ°Ņ Đ´Đ° иĐŧĐ°Ņ ĐŋŅОСŅаŅĐŊи ĐŋиĐēŅĐĩĐģи. ĐĐžĐģŅ, ŅвĐĩĐģиŅĐĩŅĐĩ и/иĐģи ĐŋŅĐĩĐŧĐĩŅŅĐĩŅĐĩ иСОйŅаĐļĐĩĐŊиĐĩŅĐž.",
|
"profile_picture_transparent_pixels": "ĐŅĐžŅиĐģĐŊиŅĐĩ ŅĐŊиĐŧĐēи ĐŊĐĩ ĐŧĐžĐŗĐ°Ņ Đ´Đ° иĐŧĐ°Ņ ĐŋŅОСŅаŅĐŊи ĐŋиĐēŅĐĩĐģи. ĐĐžĐģŅ, ŅвĐĩĐģиŅĐĩŅĐĩ и/иĐģи ĐŋŅĐĩĐŧĐĩŅŅĐĩŅĐĩ иСОйŅаĐļĐĩĐŊиĐĩŅĐž.",
|
||||||
"quota_higher_than_disk_size": "ĐададĐĩĐŊа Đĩ ĐēвОŅа, ĐŋĐž-ĐŗĐžĐģŅĐŧа ĐžŅ ŅаСĐŧĐĩŅа ĐŊа диŅĐēа",
|
"quota_higher_than_disk_size": "ĐададĐĩĐŊа Đĩ ĐēвОŅа, ĐŋĐž-ĐŗĐžĐģŅĐŧа ĐžŅ ŅаСĐŧĐĩŅа ĐŊа диŅĐēа",
|
||||||
|
"something_went_wrong": "ĐĐĩŅĐž ŅĐĩ ОйŅŅĐēа",
|
||||||
"unable_to_add_album_users": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž дОйавŅĐŊĐĩ ĐŊа ĐŋĐžŅŅĐĩйиŅĐĩĐģи в аĐģĐąŅĐŧ",
|
"unable_to_add_album_users": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž дОйавŅĐŊĐĩ ĐŊа ĐŋĐžŅŅĐĩйиŅĐĩĐģи в аĐģĐąŅĐŧ",
|
||||||
"unable_to_add_assets_to_shared_link": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž дОйавŅĐŊĐĩ ĐŊа ОйĐĩĐēŅи в ŅĐŋОдĐĩĐģĐĩĐŊ ĐģиĐŊĐē",
|
"unable_to_add_assets_to_shared_link": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž дОйавŅĐŊĐĩ ĐŊа ОйĐĩĐēŅи в ŅĐŋОдĐĩĐģĐĩĐŊ ĐģиĐŊĐē",
|
||||||
"unable_to_add_comment": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž дОйавŅĐŊĐĩ ĐŊа ĐēĐžĐŧĐĩĐŊŅаŅ",
|
"unable_to_add_comment": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž дОйавŅĐŊĐĩ ĐŊа ĐēĐžĐŧĐĩĐŊŅаŅ",
|
||||||
@@ -976,13 +1026,11 @@
|
|||||||
},
|
},
|
||||||
"exif": "Exif",
|
"exif": "Exif",
|
||||||
"exif_bottom_sheet_description": "ĐОйави ĐĐŋиŅаĐŊиĐĩ...",
|
"exif_bottom_sheet_description": "ĐОйави ĐĐŋиŅаĐŊиĐĩ...",
|
||||||
|
"exif_bottom_sheet_description_error": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ОйĐŊОвŅваĐŊĐĩ ĐŊа ĐžĐŋиŅаĐŊиĐĩ",
|
||||||
"exif_bottom_sheet_details": "ĐĐĐĐ ĐĐĐĐĐĄĐĸĐ",
|
"exif_bottom_sheet_details": "ĐĐĐĐ ĐĐĐĐĐĄĐĸĐ",
|
||||||
"exif_bottom_sheet_location": "ĐĐ¯ĐĄĐĸĐ",
|
"exif_bottom_sheet_location": "ĐĐ¯ĐĄĐĸĐ",
|
||||||
"exif_bottom_sheet_people": "ĐĨĐĐ Đ",
|
"exif_bottom_sheet_people": "ĐĨĐĐ Đ",
|
||||||
"exif_bottom_sheet_person_add_person": "ĐОйави иĐŧĐĩ",
|
"exif_bottom_sheet_person_add_person": "ĐОйави иĐŧĐĩ",
|
||||||
"exif_bottom_sheet_person_age_months": "ĐŅСŅаŅŅ {months} ĐŧĐĩŅĐĩŅа",
|
|
||||||
"exif_bottom_sheet_person_age_year_months": "ĐŅСŅаŅŅ 1 ĐŗĐžĐ´Đ¸ĐŊа и {months} ĐŧĐĩŅĐĩŅа",
|
|
||||||
"exif_bottom_sheet_person_age_years": "ĐŅСŅаŅŅ {years}",
|
|
||||||
"exit_slideshow": "ĐСŅ
Од ĐžŅ ŅĐģаКдŅĐžŅŅĐž",
|
"exit_slideshow": "ĐСŅ
Од ĐžŅ ŅĐģаКдŅĐžŅŅĐž",
|
||||||
"expand_all": "РаСŅиŅи вŅиŅĐēи",
|
"expand_all": "РаСŅиŅи вŅиŅĐēи",
|
||||||
"experimental_settings_new_asset_list_subtitle": "Đ ŅаСвиŅиĐĩ",
|
"experimental_settings_new_asset_list_subtitle": "Đ ŅаСвиŅиĐĩ",
|
||||||
@@ -996,6 +1044,8 @@
|
|||||||
"explorer": "ĐŅĐĩĐŗĐģĐĩĐ´",
|
"explorer": "ĐŅĐĩĐŗĐģĐĩĐ´",
|
||||||
"export": "ĐĐēŅĐŋĐžŅŅ",
|
"export": "ĐĐēŅĐŋĐžŅŅ",
|
||||||
"export_as_json": "ĐĐēŅĐŋĐžŅŅиŅаĐŊĐĩ ĐēаŅĐž JSON",
|
"export_as_json": "ĐĐēŅĐŋĐžŅŅиŅаĐŊĐĩ ĐēаŅĐž JSON",
|
||||||
|
"export_database": "ĐĐēŅĐŋĐžŅŅ ĐŊа йаСаŅа даĐŊĐŊи",
|
||||||
|
"export_database_description": "ĐĐēŅĐŋĐžŅŅ ĐŊа йаСаŅа даĐŊĐŊи SQLite",
|
||||||
"extension": "РаСŅиŅĐĩĐŊиĐĩ",
|
"extension": "РаСŅиŅĐĩĐŊиĐĩ",
|
||||||
"external": "ĐŅĐŊŅĐŊĐž",
|
"external": "ĐŅĐŊŅĐŊĐž",
|
||||||
"external_libraries": "ĐŅĐŊŅĐŊи йийĐģиОŅĐĩĐēи",
|
"external_libraries": "ĐŅĐŊŅĐŊи йийĐģиОŅĐĩĐēи",
|
||||||
@@ -1013,6 +1063,7 @@
|
|||||||
"favorites_page_no_favorites": "ĐĐĩ Ņа ĐŊаĐŧĐĩŅĐĩĐŊи ĐģŅйиĐŧи ОйĐĩĐēŅи",
|
"favorites_page_no_favorites": "ĐĐĩ Ņа ĐŊаĐŧĐĩŅĐĩĐŊи ĐģŅйиĐŧи ОйĐĩĐēŅи",
|
||||||
"feature_photo_updated": "ĐŅĐĩĐ´ŅŅавиŅĐĩĐģĐŊаŅа ŅĐŊиĐŧĐēа Đĩ ĐŋŅĐžĐŧĐĩĐŊĐĩĐŊа",
|
"feature_photo_updated": "ĐŅĐĩĐ´ŅŅавиŅĐĩĐģĐŊаŅа ŅĐŊиĐŧĐēа Đĩ ĐŋŅĐžĐŧĐĩĐŊĐĩĐŊа",
|
||||||
"features": "ФŅĐŊĐēŅии",
|
"features": "ФŅĐŊĐēŅии",
|
||||||
|
"features_in_development": "ФŅĐŊĐēŅии в ĐŋŅĐžŅĐĩŅ ĐŊа ŅаСŅайОŅĐēа",
|
||||||
"features_setting_description": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа ŅŅĐŊĐēŅииŅĐĩ ĐŊа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž",
|
"features_setting_description": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа ŅŅĐŊĐēŅииŅĐĩ ĐŊа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž",
|
||||||
"file_name": "ĐĐŧĐĩ ĐŊа ŅаКĐģа",
|
"file_name": "ĐĐŧĐĩ ĐŊа ŅаКĐģа",
|
||||||
"file_name_or_extension": "ĐĐŧĐĩ ĐŊа ŅаКĐģ иĐģи ŅаСŅиŅĐĩĐŊиĐĩ",
|
"file_name_or_extension": "ĐĐŧĐĩ ĐŊа ŅаКĐģ иĐģи ŅаСŅиŅĐĩĐŊиĐĩ",
|
||||||
@@ -1022,21 +1073,26 @@
|
|||||||
"filter_people": "ФиĐģŅŅиŅаĐŊĐĩ ĐŊа Ņ
ĐžŅа",
|
"filter_people": "ФиĐģŅŅиŅаĐŊĐĩ ĐŊа Ņ
ĐžŅа",
|
||||||
"filter_places": "ФиĐģŅŅŅ ĐŋĐž ĐŧŅŅŅĐž",
|
"filter_places": "ФиĐģŅŅŅ ĐŋĐž ĐŧŅŅŅĐž",
|
||||||
"find_them_fast": "ĐаĐŧĐĩŅĐĩŅĐĩ ĐŗĐ¸ ĐąŅŅСО ĐŋĐž иĐŧĐĩ Ņ ŅŅŅŅĐĩĐŊĐĩ",
|
"find_them_fast": "ĐаĐŧĐĩŅĐĩŅĐĩ ĐŗĐ¸ ĐąŅŅСО ĐŋĐž иĐŧĐĩ Ņ ŅŅŅŅĐĩĐŊĐĩ",
|
||||||
|
"first": "ĐŅŅви",
|
||||||
"fix_incorrect_match": "ĐĐžĐŋŅавŅĐŊĐĩ ĐŊа ĐŊĐĩĐŋŅавиĐģĐŊĐž ŅŅвĐŋадĐĩĐŊиĐĩ",
|
"fix_incorrect_match": "ĐĐžĐŋŅавŅĐŊĐĩ ĐŊа ĐŊĐĩĐŋŅавиĐģĐŊĐž ŅŅвĐŋадĐĩĐŊиĐĩ",
|
||||||
"folder": "ĐаĐŋĐēа",
|
"folder": "ĐаĐŋĐēа",
|
||||||
"folder_not_found": "ĐаĐŋĐēаŅа ĐŊĐĩ Đĩ ĐŊаĐŧĐĩŅĐĩĐŊа",
|
"folder_not_found": "ĐаĐŋĐēаŅа ĐŊĐĩ Đĩ ĐŊаĐŧĐĩŅĐĩĐŊа",
|
||||||
"folders": "ĐаĐŋĐēи",
|
"folders": "ĐаĐŋĐēи",
|
||||||
"folders_feature_description": "ĐŅĐĩĐŗĐģĐĩĐļдаĐŊĐĩ ĐŊа ĐŋаĐŋĐēаŅа Са ŅĐŊиĐŧĐēиŅĐĩ и видĐĩĐžĐēĐģиĐŋОвĐĩŅĐĩ в ŅаКĐģОваŅа ŅиŅŅĐĩĐŧа",
|
"folders_feature_description": "ĐŅĐĩĐŗĐģĐĩĐļдаĐŊĐĩ ĐŊа ĐŋаĐŋĐēаŅа Са ŅĐŊиĐŧĐēиŅĐĩ и видĐĩĐžĐēĐģиĐŋОвĐĩŅĐĩ в ŅаКĐģОваŅа ŅиŅŅĐĩĐŧа",
|
||||||
|
"forgot_pin_code_question": "ĐайŅавиĐģи ŅŅĐĩ ŅĐ˛ĐžŅ ĐĐĐ ĐēОд?",
|
||||||
"forward": "ĐаĐŋŅĐĩĐ´",
|
"forward": "ĐаĐŋŅĐĩĐ´",
|
||||||
"gcast_enabled": "Google Cast",
|
"gcast_enabled": "Google Cast",
|
||||||
"gcast_enabled_description": "Đа да ŅайОŅи ŅаСи ŅŅĐŊĐēŅĐ¸Ņ ĐˇĐ°ŅĐĩĐļда вŅĐŊŅĐŊи ŅĐĩŅŅŅŅи ĐžŅ Google.",
|
"gcast_enabled_description": "Đа да ŅайОŅи ŅаСи ŅŅĐŊĐēŅĐ¸Ņ ĐˇĐ°ŅĐĩĐļда вŅĐŊŅĐŊи ŅĐĩŅŅŅŅи ĐžŅ Google.",
|
||||||
"general": "ĐĐąŅи",
|
"general": "ĐĐąŅи",
|
||||||
|
"geolocation_instruction_location": "ĐСйĐĩŅĐĩŅĐĩ ОйĐĩĐēŅ Ņ GPS ĐēООŅдиĐŊаŅи Са да иСĐŋĐžĐģСваŅĐĩ ŅŅŅ
иĐģи иСйĐĩŅĐĩŅĐĩ ĐŧŅŅŅĐž диŅĐĩĐēŅĐŊĐž ĐžŅ ĐēаŅŅаŅа",
|
||||||
"get_help": "ĐĐžĐŧĐžŅ",
|
"get_help": "ĐĐžĐŧĐžŅ",
|
||||||
"get_wifiname_error": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ĐŋĐžĐģŅŅаваĐŊĐĩ иĐŧĐĩŅĐž ĐŊа Wi-Fi ĐŧŅĐĩĐļаŅа. ĐĐžĐģŅ, ŅĐąĐĩĐ´ĐĩŅĐĩ ŅĐĩ, ŅĐĩ Ņа ĐŋŅĐĩĐ´ĐžŅŅавĐĩĐŊи ĐŊŅĐļĐŊиŅĐĩ ŅаСŅĐĩŅĐĩĐŊĐ¸Ņ ĐŊа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž и иĐŧа вŅŅСĐēа Ņ Wi-Fi",
|
"get_wifiname_error": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž ĐŋĐžĐģŅŅаваĐŊĐĩ иĐŧĐĩŅĐž ĐŊа Wi-Fi ĐŧŅĐĩĐļаŅа. ĐĐžĐģŅ, ŅĐąĐĩĐ´ĐĩŅĐĩ ŅĐĩ, ŅĐĩ Ņа ĐŋŅĐĩĐ´ĐžŅŅавĐĩĐŊи ĐŊŅĐļĐŊиŅĐĩ ŅаСŅĐĩŅĐĩĐŊĐ¸Ņ ĐŊа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž и иĐŧа вŅŅСĐēа Ņ Wi-Fi",
|
||||||
"getting_started": "ĐаĐē да СаĐŋĐžŅĐŊĐĩĐŧ",
|
"getting_started": "ĐаĐē да СаĐŋĐžŅĐŊĐĩĐŧ",
|
||||||
"go_back": "ĐŅŅŅаĐŊĐĩ ĐŊаСад",
|
"go_back": "ĐŅŅŅаĐŊĐĩ ĐŊаСад",
|
||||||
"go_to_folder": "ĐŅиди в ĐŋаĐŋĐēаŅа",
|
"go_to_folder": "ĐŅиди в ĐŋаĐŋĐēаŅа",
|
||||||
"go_to_search": "ĐŅĐĩĐŧиĐŊаваĐŊĐĩ ĐēŅĐŧ ŅŅŅŅĐĩĐŊĐĩ",
|
"go_to_search": "ĐŅĐĩĐŧиĐŊаваĐŊĐĩ ĐēŅĐŧ ŅŅŅŅĐĩĐŊĐĩ",
|
||||||
|
"gps": "GPS ĐēООŅдиĐŊаŅи",
|
||||||
|
"gps_missing": "ĐŅĐŧа GPS ĐēООŅдиĐŊаŅи",
|
||||||
"grant_permission": "ĐаК ŅаСŅĐĩŅĐĩĐŊиĐĩ",
|
"grant_permission": "ĐаК ŅаСŅĐĩŅĐĩĐŊиĐĩ",
|
||||||
"group_albums_by": "ĐŅŅĐŋиŅаК аĐģĐąŅĐŧ ĐŋĐž...",
|
"group_albums_by": "ĐŅŅĐŋиŅаК аĐģĐąŅĐŧ ĐŋĐž...",
|
||||||
"group_country": "ĐŅŅĐŋиŅаК ĐŋĐž Đ´ŅŅĐļава",
|
"group_country": "ĐŅŅĐŋиŅаК ĐŋĐž Đ´ŅŅĐļава",
|
||||||
@@ -1047,6 +1103,9 @@
|
|||||||
"haptic_feedback_switch": "ĐĐēĐģŅŅи ŅаĐēŅиĐģĐŊа ОйŅаŅĐŊа вŅŅСĐēа",
|
"haptic_feedback_switch": "ĐĐēĐģŅŅи ŅаĐēŅиĐģĐŊа ОйŅаŅĐŊа вŅŅСĐēа",
|
||||||
"haptic_feedback_title": "ĐĸаĐēŅиĐģĐŊа ОйŅаŅĐŊа вŅŅСĐēа",
|
"haptic_feedback_title": "ĐĸаĐēŅиĐģĐŊа ОйŅаŅĐŊа вŅŅСĐēа",
|
||||||
"has_quota": "ĐиĐŧиŅ",
|
"has_quota": "ĐиĐŧиŅ",
|
||||||
|
"hash_asset": "ĐĐąĐĩĐēŅ Ņ Ņ
ĐĩŅ",
|
||||||
|
"hashed_assets": "ĐĨĐĩŅиŅаĐŊи ОйĐĩĐēŅи",
|
||||||
|
"hashing": "ĐĨĐĩŅиŅаĐŊĐĩ",
|
||||||
"header_settings_add_header_tip": "ĐОйави ĐˇĐ°ĐŗĐģавиĐĩ",
|
"header_settings_add_header_tip": "ĐОйави ĐˇĐ°ĐŗĐģавиĐĩ",
|
||||||
"header_settings_field_validator_msg": "ĐĐĩĐ´ĐžĐŋŅŅŅиĐŧĐž Đĩ да ĐŊŅĐŧа ŅŅОКĐŊĐžŅŅ",
|
"header_settings_field_validator_msg": "ĐĐĩĐ´ĐžĐŋŅŅŅиĐŧĐž Đĩ да ĐŊŅĐŧа ŅŅОКĐŊĐžŅŅ",
|
||||||
"header_settings_header_name_input": "ĐĐŧĐĩ ĐŊа ĐˇĐ°ĐŗĐģавиĐĩŅĐž",
|
"header_settings_header_name_input": "ĐĐŧĐĩ ĐŊа ĐˇĐ°ĐŗĐģавиĐĩŅĐž",
|
||||||
@@ -1078,7 +1137,9 @@
|
|||||||
"home_page_upload_err_limit": "ĐĐžĐļĐĩ да ĐēаŅваŅĐĩ ĐŧаĐēŅиĐŧŅĐŧ 30 ОйĐĩĐēŅа ĐĩĐ´ĐŊОвŅĐĩĐŧĐĩĐŊĐŊĐž, ĐŋŅĐžĐŋŅŅĐēаĐŊĐĩ",
|
"home_page_upload_err_limit": "ĐĐžĐļĐĩ да ĐēаŅваŅĐĩ ĐŧаĐēŅиĐŧŅĐŧ 30 ОйĐĩĐēŅа ĐĩĐ´ĐŊОвŅĐĩĐŧĐĩĐŊĐŊĐž, ĐŋŅĐžĐŋŅŅĐēаĐŊĐĩ",
|
||||||
"host": "ĐĨĐžŅŅ",
|
"host": "ĐĨĐžŅŅ",
|
||||||
"hour": "ЧаŅ",
|
"hour": "ЧаŅ",
|
||||||
|
"hours": "ЧаŅа",
|
||||||
"id": "ID",
|
"id": "ID",
|
||||||
|
"idle": "ĐĐĩСдĐĩĐšŅŅвиĐĩ",
|
||||||
"ignore_icloud_photos": "ĐŅĐžĐŋŅŅĐŊи ŅĐŊиĐŧĐēи ĐžŅ iCloud",
|
"ignore_icloud_photos": "ĐŅĐžĐŋŅŅĐŊи ŅĐŊиĐŧĐēи ĐžŅ iCloud",
|
||||||
"ignore_icloud_photos_description": "ĐĄĐŊиĐŧĐēи, ĐēОиŅĐž Ņа СаĐŋаСĐĩĐŊи в iCloud ĐŊŅĐŧа да ŅĐĩ ĐēаŅĐ˛Đ°Ņ Đ˛ Immich ŅŅŅвŅŅа",
|
"ignore_icloud_photos_description": "ĐĄĐŊиĐŧĐēи, ĐēОиŅĐž Ņа СаĐŋаСĐĩĐŊи в iCloud ĐŊŅĐŧа да ŅĐĩ ĐēаŅĐ˛Đ°Ņ Đ˛ Immich ŅŅŅвŅŅа",
|
||||||
"image": "ĐСОйŅаĐļĐĩĐŊиĐĩ",
|
"image": "ĐСОйŅаĐļĐĩĐŊиĐĩ",
|
||||||
@@ -1136,10 +1197,13 @@
|
|||||||
"language_no_results_title": "ĐĐĩ Ņа ĐŊаĐŧĐĩŅĐĩĐŊи ĐĩСиŅи",
|
"language_no_results_title": "ĐĐĩ Ņа ĐŊаĐŧĐĩŅĐĩĐŊи ĐĩСиŅи",
|
||||||
"language_search_hint": "ĐĸŅŅŅĐĩĐŊĐĩ ĐŊа ĐĩСиŅи...",
|
"language_search_hint": "ĐĸŅŅŅĐĩĐŊĐĩ ĐŊа ĐĩСиŅи...",
|
||||||
"language_setting_description": "ĐСйĐĩŅĐĩŅĐĩ ĐŋŅĐĩĐ´ĐŋĐžŅиŅаĐŊ ĐĩСиĐē",
|
"language_setting_description": "ĐСйĐĩŅĐĩŅĐĩ ĐŋŅĐĩĐ´ĐŋĐžŅиŅаĐŊ ĐĩСиĐē",
|
||||||
|
"large_files": "ĐĐžĐģĐĩĐŧи ŅаКĐģОвĐĩ",
|
||||||
|
"last": "ĐĐžŅĐģĐĩĐ´ĐĩĐŊ",
|
||||||
"last_seen": "ĐĐžŅĐģĐĩĐ´ĐŊĐž видŅĐŊĐž",
|
"last_seen": "ĐĐžŅĐģĐĩĐ´ĐŊĐž видŅĐŊĐž",
|
||||||
"latest_version": "ĐĐžŅĐģĐĩĐ´ĐŊа вĐĩŅŅиŅ",
|
"latest_version": "ĐĐžŅĐģĐĩĐ´ĐŊа вĐĩŅŅиŅ",
|
||||||
"latitude": "ШиŅиĐŊа",
|
"latitude": "ШиŅиĐŊа",
|
||||||
"leave": "ĐСĐģĐĩС",
|
"leave": "ĐСĐģĐĩС",
|
||||||
|
"leave_album": "ĐаĐŋŅŅĐēаĐŊĐĩ ĐŊа аĐģĐąŅĐŧа",
|
||||||
"lens_model": "ĐОдĐĩĐģ ĐģĐĩŅа",
|
"lens_model": "ĐОдĐĩĐģ ĐģĐĩŅа",
|
||||||
"let_others_respond": "ĐОСвОĐģĐĩŅĐĩ ĐŊа Đ´ŅŅĐŗĐ¸ŅĐĩ да ĐžŅĐŗĐžĐ˛ĐžŅŅŅ",
|
"let_others_respond": "ĐОСвОĐģĐĩŅĐĩ ĐŊа Đ´ŅŅĐŗĐ¸ŅĐĩ да ĐžŅĐŗĐžĐ˛ĐžŅŅŅ",
|
||||||
"level": "ĐивО",
|
"level": "ĐивО",
|
||||||
@@ -1153,6 +1217,7 @@
|
|||||||
"library_page_sort_title": "ĐĐ°ĐŗĐģавиĐĩ ĐŊа аĐģĐąŅĐŧа",
|
"library_page_sort_title": "ĐĐ°ĐŗĐģавиĐĩ ĐŊа аĐģĐąŅĐŧа",
|
||||||
"licenses": "ĐиŅĐĩĐŊСи",
|
"licenses": "ĐиŅĐĩĐŊСи",
|
||||||
"light": "ХвĐĩŅĐģĐž",
|
"light": "ХвĐĩŅĐģĐž",
|
||||||
|
"like": "ĐĨаŅĐĩŅаКŅĐĩ",
|
||||||
"like_deleted": "ĐаŅĐž иСŅŅиŅ",
|
"like_deleted": "ĐаŅĐž иСŅŅиŅ",
|
||||||
"link_motion_video": "ĐиĐŊĐē ĐēŅĐŧ видĐĩĐž",
|
"link_motion_video": "ĐиĐŊĐē ĐēŅĐŧ видĐĩĐž",
|
||||||
"link_to_oauth": "ĐиĐŊĐē ĐēŅĐŧ OAuth",
|
"link_to_oauth": "ĐиĐŊĐē ĐēŅĐŧ OAuth",
|
||||||
@@ -1160,7 +1225,10 @@
|
|||||||
"list": "ĐиŅŅ",
|
"list": "ĐиŅŅ",
|
||||||
"loading": "ĐаŅĐĩĐļдаĐŊĐĩ",
|
"loading": "ĐаŅĐĩĐļдаĐŊĐĩ",
|
||||||
"loading_search_results_failed": "ĐаŅĐĩĐļдаĐŊĐĩŅĐž ĐŊа ŅĐĩСŅĐģŅаŅиŅĐĩ ĐžŅ ŅŅŅŅĐĩĐŊĐĩŅĐž Đĩ ĐŊĐĩŅŅĐŋĐĩŅĐŊĐž",
|
"loading_search_results_failed": "ĐаŅĐĩĐļдаĐŊĐĩŅĐž ĐŊа ŅĐĩСŅĐģŅаŅиŅĐĩ ĐžŅ ŅŅŅŅĐĩĐŊĐĩŅĐž Đĩ ĐŊĐĩŅŅĐŋĐĩŅĐŊĐž",
|
||||||
|
"local": "ĐĐžĐēаĐģĐŊĐž",
|
||||||
"local_asset_cast_failed": "ĐĐĩ ĐŧĐžĐļĐĩ да ŅĐĩ ĐŋŅĐĩдава ОйĐĩĐēŅ, ĐēОКŅĐž ĐžŅĐĩ ĐŊĐĩ Đĩ ĐēаŅĐĩĐŊ ĐŊа ŅŅŅвŅŅа",
|
"local_asset_cast_failed": "ĐĐĩ ĐŧĐžĐļĐĩ да ŅĐĩ ĐŋŅĐĩдава ОйĐĩĐēŅ, ĐēОКŅĐž ĐžŅĐĩ ĐŊĐĩ Đĩ ĐēаŅĐĩĐŊ ĐŊа ŅŅŅвŅŅа",
|
||||||
|
"local_assets": "ĐĐžĐēаĐģĐŊи ОйĐĩĐēŅи",
|
||||||
|
"local_media_summary": "ĐйОйŅĐĩĐŊиĐĩ ĐŊа ĐģĐžĐēаĐģĐŊиŅĐĩ ĐŧĐĩдиКĐŊи ŅаКĐģОвĐĩ",
|
||||||
"local_network": "ĐĐžĐēаĐģĐŊа ĐŧŅĐĩĐļа",
|
"local_network": "ĐĐžĐēаĐģĐŊа ĐŧŅĐĩĐļа",
|
||||||
"local_network_sheet_info": "ĐŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž ŅĐĩ ŅĐĩ ŅвŅŅĐļĐĩ ŅŅŅ ŅŅŅвŅŅа ĐŊа ŅОСи URL, ĐēĐžĐŗĐ°ŅĐž ŅŅŅŅОКŅŅвОŅĐž Đĩ ŅвŅŅСаĐŊĐž ĐēŅĐŧ СададĐĩĐŊаŅа Wi-Fi ĐŧŅĐĩĐļа",
|
"local_network_sheet_info": "ĐŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž ŅĐĩ ŅĐĩ ŅвŅŅĐļĐĩ ŅŅŅ ŅŅŅвŅŅа ĐŊа ŅОСи URL, ĐēĐžĐŗĐ°ŅĐž ŅŅŅŅОКŅŅвОŅĐž Đĩ ŅвŅŅСаĐŊĐž ĐēŅĐŧ СададĐĩĐŊаŅа Wi-Fi ĐŧŅĐĩĐļа",
|
||||||
"location_permission": "РаСŅĐĩŅĐĩĐŊиĐĩ Са ĐŧĐĩŅŅĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩ",
|
"location_permission": "РаСŅĐĩŅĐĩĐŊиĐĩ Са ĐŧĐĩŅŅĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩ",
|
||||||
@@ -1172,6 +1240,7 @@
|
|||||||
"location_picker_longitude_hint": "ĐŅвĐĩĐ´ĐĩŅĐĩ ĐŗĐĩĐžĐŗŅаŅŅĐēа Đ´ŅĐģĐļиĐŊа ŅŅĐē",
|
"location_picker_longitude_hint": "ĐŅвĐĩĐ´ĐĩŅĐĩ ĐŗĐĩĐžĐŗŅаŅŅĐēа Đ´ŅĐģĐļиĐŊа ŅŅĐē",
|
||||||
"lock": "ĐаĐēĐģŅŅи",
|
"lock": "ĐаĐēĐģŅŅи",
|
||||||
"locked_folder": "ĐаĐēĐģŅŅĐĩĐŊа ĐŋаĐŋĐēа",
|
"locked_folder": "ĐаĐēĐģŅŅĐĩĐŊа ĐŋаĐŋĐēа",
|
||||||
|
"log_detail_title": "ĐОдŅОйĐŊĐžŅŅи ĐžŅ Đ´ĐŊĐĩвĐŊиĐēа",
|
||||||
"log_out": "ĐСĐģиСаĐŊĐĩ",
|
"log_out": "ĐСĐģиСаĐŊĐĩ",
|
||||||
"log_out_all_devices": "ĐСĐģиСаĐŊĐĩ Ņ Đ˛ŅиŅĐēи ŅŅŅŅОКŅŅва",
|
"log_out_all_devices": "ĐСĐģиСаĐŊĐĩ Ņ Đ˛ŅиŅĐēи ŅŅŅŅОКŅŅва",
|
||||||
"logged_in_as": "ĐĐŋиŅаĐŊ ĐēаŅĐž {user}",
|
"logged_in_as": "ĐĐŋиŅаĐŊ ĐēаŅĐž {user}",
|
||||||
@@ -1202,6 +1271,7 @@
|
|||||||
"login_password_changed_success": "ĐŖŅĐŋĐĩŅĐŊĐž ОйĐŊОвĐĩĐŊа ĐŋаŅĐžĐģа",
|
"login_password_changed_success": "ĐŖŅĐŋĐĩŅĐŊĐž ОйĐŊОвĐĩĐŊа ĐŋаŅĐžĐģа",
|
||||||
"logout_all_device_confirmation": "ĐĄĐ¸ĐŗŅŅĐŊи Đģи ŅŅĐĩ, ŅĐĩ иŅĐēаŅĐĩ да иСĐģĐĩСĐĩŅĐĩ ĐžŅ Đ˛ŅиŅĐēи ŅŅŅŅОКŅŅва?",
|
"logout_all_device_confirmation": "ĐĄĐ¸ĐŗŅŅĐŊи Đģи ŅŅĐĩ, ŅĐĩ иŅĐēаŅĐĩ да иСĐģĐĩСĐĩŅĐĩ ĐžŅ Đ˛ŅиŅĐēи ŅŅŅŅОКŅŅва?",
|
||||||
"logout_this_device_confirmation": "ĐĄĐ¸ĐŗŅŅĐŊи Đģи ŅŅĐĩ, ŅĐĩ иŅĐēаŅĐĩ да иСĐģĐĩСĐĩŅĐĩ ĐžŅ ŅОва ŅŅŅŅОКŅŅвО?",
|
"logout_this_device_confirmation": "ĐĄĐ¸ĐŗŅŅĐŊи Đģи ŅŅĐĩ, ŅĐĩ иŅĐēаŅĐĩ да иСĐģĐĩСĐĩŅĐĩ ĐžŅ ŅОва ŅŅŅŅОКŅŅвО?",
|
||||||
|
"logs": "ĐĐŊĐĩвĐŊиĐē",
|
||||||
"longitude": "ĐŅĐģĐļиĐŊа",
|
"longitude": "ĐŅĐģĐļиĐŊа",
|
||||||
"look": "ĐĐˇĐŗĐģĐĩĐ´",
|
"look": "ĐĐˇĐŗĐģĐĩĐ´",
|
||||||
"loop_videos": "ĐОвŅаŅŅĐŊĐĩ ĐŊа видĐĩаŅа",
|
"loop_videos": "ĐОвŅаŅŅĐŊĐĩ ĐŊа видĐĩаŅа",
|
||||||
@@ -1209,6 +1279,7 @@
|
|||||||
"main_branch_warning": "ĐСĐŋĐžĐģСваŅĐĩ вĐĩŅŅĐ¸Ņ ĐˇĐ° ŅаСŅайОŅŅиŅи, ŅиĐģĐŊĐž ĐŋŅĐĩĐŋĐžŅŅŅваĐŧĐĩ да иСĐŋĐžĐģСваŅĐĩ ĐžŅиŅиаĐģĐŊа вĐĩŅŅиŅ!",
|
"main_branch_warning": "ĐСĐŋĐžĐģСваŅĐĩ вĐĩŅŅĐ¸Ņ ĐˇĐ° ŅаСŅайОŅŅиŅи, ŅиĐģĐŊĐž ĐŋŅĐĩĐŋĐžŅŅŅваĐŧĐĩ да иСĐŋĐžĐģСваŅĐĩ ĐžŅиŅиаĐģĐŊа вĐĩŅŅиŅ!",
|
||||||
"main_menu": "ĐĐģавĐŊĐž ĐŧĐĩĐŊŅ",
|
"main_menu": "ĐĐģавĐŊĐž ĐŧĐĩĐŊŅ",
|
||||||
"make": "ĐаŅĐēа",
|
"make": "ĐаŅĐēа",
|
||||||
|
"manage_geolocation": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа ĐŧĐĩŅŅĐžĐŋĐžĐģĐžĐļĐĩĐŊиŅŅа",
|
||||||
"manage_shared_links": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа ŅĐŋОдĐĩĐģĐĩĐŊи вŅŅСĐēи",
|
"manage_shared_links": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа ŅĐŋОдĐĩĐģĐĩĐŊи вŅŅСĐēи",
|
||||||
"manage_sharing_with_partners": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа ŅĐŋОдĐĩĐģŅĐŊĐĩŅĐž Ņ ĐŋаŅŅĐŊŅĐžŅи",
|
"manage_sharing_with_partners": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа ŅĐŋОдĐĩĐģŅĐŊĐĩŅĐž Ņ ĐŋаŅŅĐŊŅĐžŅи",
|
||||||
"manage_the_app_settings": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа ĐŊаŅŅŅОКĐēиŅĐĩ ĐŊа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž",
|
"manage_the_app_settings": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа ĐŊаŅŅŅОКĐēиŅĐĩ ĐŊа ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩŅĐž",
|
||||||
@@ -1217,7 +1288,7 @@
|
|||||||
"manage_your_devices": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа вĐģĐĩСĐģиŅĐĩ в ŅиŅŅĐĩĐŧаŅа ŅŅŅŅОКŅŅва",
|
"manage_your_devices": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа вĐģĐĩСĐģиŅĐĩ в ŅиŅŅĐĩĐŧаŅа ŅŅŅŅОКŅŅва",
|
||||||
"manage_your_oauth_connection": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа OAuth вŅŅСĐēаŅа",
|
"manage_your_oauth_connection": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа OAuth вŅŅСĐēаŅа",
|
||||||
"map": "ĐаŅŅа",
|
"map": "ĐаŅŅа",
|
||||||
"map_assets_in_bounds": "{count} ŅĐŊиĐŧĐēи",
|
"map_assets_in_bounds": "{count, plural, =0 {ĐŅĐŧа ŅĐŊиĐŧĐēи} one {# ŅĐŊиĐŧĐēа} other {# ŅĐŊиĐŧĐēи}}",
|
||||||
"map_cannot_get_user_location": "ĐĐĩ ĐŧĐžĐļаŅ
да ĐŋĐžĐģŅŅа ĐŧĐĩŅŅĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩŅĐž",
|
"map_cannot_get_user_location": "ĐĐĩ ĐŧĐžĐļаŅ
да ĐŋĐžĐģŅŅа ĐŧĐĩŅŅĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩŅĐž",
|
||||||
"map_location_dialog_yes": "Đа",
|
"map_location_dialog_yes": "Đа",
|
||||||
"map_location_picker_page_use_location": "ĐСĐŋĐžĐģСваК ŅОва ĐŧĐĩŅŅĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩ",
|
"map_location_picker_page_use_location": "ĐСĐŋĐžĐģСваК ŅОва ĐŧĐĩŅŅĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩ",
|
||||||
@@ -1225,7 +1296,6 @@
|
|||||||
"map_location_service_disabled_title": "ĐŖŅĐģŅĐŗĐ°Ņа Са ĐŧĐĩŅŅĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩ Đĩ иСĐēĐģŅŅĐĩĐŊа",
|
"map_location_service_disabled_title": "ĐŖŅĐģŅĐŗĐ°Ņа Са ĐŧĐĩŅŅĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩ Đĩ иСĐēĐģŅŅĐĩĐŊа",
|
||||||
"map_marker_for_images": "ĐаŅĐēĐĩŅи ĐŊа ĐēаŅŅаŅа Са ŅĐŊиĐŧĐēи ĐŊаĐŋŅавĐĩĐŊи в {city}, {country}",
|
"map_marker_for_images": "ĐаŅĐēĐĩŅи ĐŊа ĐēаŅŅаŅа Са ŅĐŊиĐŧĐēи ĐŊаĐŋŅавĐĩĐŊи в {city}, {country}",
|
||||||
"map_marker_with_image": "ĐаŅĐēĐĩŅ ĐŊа ĐēаŅŅаŅа Ņ Đ¸ĐˇĐžĐąŅаĐļĐĩĐŊиĐĩ",
|
"map_marker_with_image": "ĐаŅĐēĐĩŅ ĐŊа ĐēаŅŅаŅа Ņ Đ¸ĐˇĐžĐąŅаĐļĐĩĐŊиĐĩ",
|
||||||
"map_no_assets_in_bounds": "ĐŅĐŧа ŅĐŊиĐŧĐēи ĐžŅ ŅОСи ŅаКОĐŊ",
|
|
||||||
"map_no_location_permission_content": "Đа да ŅĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ ĐžĐąĐĩĐēŅиŅĐĩ ĐžŅ ŅĐĩĐēŅŅĐžŅĐž ĐŧŅŅŅĐž, ŅŅŅйва ŅаСŅĐĩŅĐĩĐŊиĐĩ Са ĐžĐŋŅĐĩĐ´ĐĩĐģŅĐŊĐĩ ĐŊа ĐŧĐĩŅŅĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩŅĐž. ĐŅĐēаŅĐĩ Đģи да ĐŋŅĐĩĐ´ĐžŅŅавиŅĐĩ ŅаСŅĐĩŅĐĩĐŊиĐĩ ŅĐĩĐŗĐ°?",
|
"map_no_location_permission_content": "Đа да ŅĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ ĐžĐąĐĩĐēŅиŅĐĩ ĐžŅ ŅĐĩĐēŅŅĐžŅĐž ĐŧŅŅŅĐž, ŅŅŅйва ŅаСŅĐĩŅĐĩĐŊиĐĩ Са ĐžĐŋŅĐĩĐ´ĐĩĐģŅĐŊĐĩ ĐŊа ĐŧĐĩŅŅĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩŅĐž. ĐŅĐēаŅĐĩ Đģи да ĐŋŅĐĩĐ´ĐžŅŅавиŅĐĩ ŅаСŅĐĩŅĐĩĐŊиĐĩ ŅĐĩĐŗĐ°?",
|
||||||
"map_no_location_permission_title": "ĐŅĐēаСаĐŊ Đ´ĐžŅŅŅĐŋ Đ´Đž ĐŧĐĩŅŅĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩ",
|
"map_no_location_permission_title": "ĐŅĐēаСаĐŊ Đ´ĐžŅŅŅĐŋ Đ´Đž ĐŧĐĩŅŅĐžĐŋĐžĐģĐžĐļĐĩĐŊиĐĩ",
|
||||||
"map_settings": "ĐаŅŅŅОКĐēи ĐŊа ĐēаŅŅаŅа",
|
"map_settings": "ĐаŅŅŅОКĐēи ĐŊа ĐēаŅŅаŅа",
|
||||||
@@ -1244,6 +1314,7 @@
|
|||||||
"mark_as_read": "ĐаŅĐēиŅаК ĐēаŅĐž ŅĐĩŅĐĩĐŊĐž",
|
"mark_as_read": "ĐаŅĐēиŅаК ĐēаŅĐž ŅĐĩŅĐĩĐŊĐž",
|
||||||
"marked_all_as_read": "ĐŅиŅĐēи ĐŧаŅĐēиŅаĐŊи ĐēаŅĐž ĐŋŅĐžŅĐĩŅĐĩĐŊи",
|
"marked_all_as_read": "ĐŅиŅĐēи ĐŧаŅĐēиŅаĐŊи ĐēаŅĐž ĐŋŅĐžŅĐĩŅĐĩĐŊи",
|
||||||
"matches": "ĐĄŅвĐŋадĐĩĐŊиŅ",
|
"matches": "ĐĄŅвĐŋадĐĩĐŊиŅ",
|
||||||
|
"matching_assets": "ĐĄŅвĐŋадаŅи ОйĐĩĐēŅи",
|
||||||
"media_type": "Đид ĐŧĐĩдиŅ",
|
"media_type": "Đид ĐŧĐĩдиŅ",
|
||||||
"memories": "ĐĄĐŋĐžĐŧĐĩĐŊи",
|
"memories": "ĐĄĐŋĐžĐŧĐĩĐŊи",
|
||||||
"memories_all_caught_up": "ĐĸОва Đĩ вŅиŅĐēĐž Са Đ´ĐŊĐĩŅ",
|
"memories_all_caught_up": "ĐĸОва Đĩ вŅиŅĐēĐž Са Đ´ĐŊĐĩŅ",
|
||||||
@@ -1262,6 +1333,7 @@
|
|||||||
"merged_people_count": "ĐĄĐģŅŅ {count, plural, one {# ŅОвĐĩĐē} other {# ŅОвĐĩĐēа}}",
|
"merged_people_count": "ĐĄĐģŅŅ {count, plural, one {# ŅОвĐĩĐē} other {# ŅОвĐĩĐēа}}",
|
||||||
"minimize": "ĐиĐŊиĐŧиСиŅаĐŊĐĩ",
|
"minimize": "ĐиĐŊиĐŧиСиŅаĐŊĐĩ",
|
||||||
"minute": "ĐиĐŊŅŅа",
|
"minute": "ĐиĐŊŅŅа",
|
||||||
|
"minutes": "ĐиĐŊŅŅи",
|
||||||
"missing": "ĐиĐŋŅваŅи",
|
"missing": "ĐиĐŋŅваŅи",
|
||||||
"model": "ĐОдĐĩĐģ",
|
"model": "ĐОдĐĩĐģ",
|
||||||
"month": "ĐĐĩŅĐĩŅ",
|
"month": "ĐĐĩŅĐĩŅ",
|
||||||
@@ -1281,6 +1353,10 @@
|
|||||||
"my_albums": "ĐОи аĐģĐąŅĐŧи",
|
"my_albums": "ĐОи аĐģĐąŅĐŧи",
|
||||||
"name": "ĐĐŧĐĩ",
|
"name": "ĐĐŧĐĩ",
|
||||||
"name_or_nickname": "ĐĐŧĐĩ иĐģи ĐŋŅŅĐēĐžŅ",
|
"name_or_nickname": "ĐĐŧĐĩ иĐģи ĐŋŅŅĐēĐžŅ",
|
||||||
|
"network_requirement_photos_upload": "ĐСĐŋĐžĐģСваК ĐŧОйиĐģĐŊи даĐŊĐŊи Са аŅŅ
ивиŅаĐŊĐĩ ĐŊа ŅĐŊиĐŧĐēи",
|
||||||
|
"network_requirement_videos_upload": "ĐСĐŋĐžĐģСваК ĐŧОйиĐģĐŊи даĐŊĐŊи Са аŅŅ
ивиŅаĐŊĐĩ ĐŊа видĐĩĐž",
|
||||||
|
"network_requirements": "ĐСиŅĐēваĐŊĐ¸Ņ ĐēŅĐŧ ĐŧŅĐĩĐļаŅа",
|
||||||
|
"network_requirements_updated": "ĐŅĐĩĐļОвиŅĐĩ ĐŊаŅŅŅОКĐēи Ņа ĐŋŅĐžĐŧĐĩĐŊĐĩĐŊи, ĐŊŅĐģиŅаĐŊĐĩ ĐŊа ĐžĐŋаŅĐēаŅа Са аŅŅ
ивиŅаĐŊĐĩ",
|
||||||
"networking_settings": "ĐŅĐĩĐļа",
|
"networking_settings": "ĐŅĐĩĐļа",
|
||||||
"networking_subtitle": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа ĐŊаŅŅŅОКĐēиŅĐĩ Са вŅŅСĐēа ŅŅŅ ŅŅŅвŅŅа",
|
"networking_subtitle": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа ĐŊаŅŅŅОКĐēиŅĐĩ Са вŅŅСĐēа ŅŅŅ ŅŅŅвŅŅа",
|
||||||
"never": "ĐиĐēĐžĐŗĐ°",
|
"never": "ĐиĐēĐžĐŗĐ°",
|
||||||
@@ -1290,6 +1366,7 @@
|
|||||||
"new_person": "ĐОв ŅОвĐĩĐē",
|
"new_person": "ĐОв ŅОвĐĩĐē",
|
||||||
"new_pin_code": "ĐОв PIN ĐēОд",
|
"new_pin_code": "ĐОв PIN ĐēОд",
|
||||||
"new_pin_code_subtitle": "ĐĸОва Đĩ ĐŋŅŅви Đ´ĐžŅŅŅĐŋ Đ´Đž СаĐēĐģŅŅĐĩĐŊа ĐŋаĐŋĐēа. ĐĄŅСдаКŅĐĩ PIN ĐēОд Са СаŅиŅĐĩĐŊ Đ´ĐžŅŅŅĐŋ Đ´Đž ŅаСи ŅŅŅаĐŊиŅа",
|
"new_pin_code_subtitle": "ĐĸОва Đĩ ĐŋŅŅви Đ´ĐžŅŅŅĐŋ Đ´Đž СаĐēĐģŅŅĐĩĐŊа ĐŋаĐŋĐēа. ĐĄŅСдаКŅĐĩ PIN ĐēОд Са СаŅиŅĐĩĐŊ Đ´ĐžŅŅŅĐŋ Đ´Đž ŅаСи ŅŅŅаĐŊиŅа",
|
||||||
|
"new_timeline": "ĐОва вŅĐĩĐŧĐĩва ĐģиĐŊиŅ",
|
||||||
"new_user_created": "ĐĄŅСдадĐĩĐŊ ĐŊОв ĐŋĐžŅŅĐĩйиŅĐĩĐģ",
|
"new_user_created": "ĐĄŅСдадĐĩĐŊ ĐŊОв ĐŋĐžŅŅĐĩйиŅĐĩĐģ",
|
||||||
"new_version_available": "ĐĐĐĐЧĐĐ ĐĐĐĐ ĐĐĐ ĐĄĐĐ¯",
|
"new_version_available": "ĐĐĐĐЧĐĐ ĐĐĐĐ ĐĐĐ ĐĄĐĐ¯",
|
||||||
"newest_first": "ĐаК-ĐŊОвиŅĐĩ ĐŋŅŅви",
|
"newest_first": "ĐаК-ĐŊОвиŅĐĩ ĐŋŅŅви",
|
||||||
@@ -1303,19 +1380,25 @@
|
|||||||
"no_assets_message": "ĐĐĐĐĐĐĐĸĐ, ĐĐ ĐĐ ĐĐЧĐĐĸĐ ĐĐĒĐ ĐĐĐĸĐ ĐĄĐ ĐĄĐĐĐĐĐ",
|
"no_assets_message": "ĐĐĐĐĐĐĐĸĐ, ĐĐ ĐĐ ĐĐЧĐĐĸĐ ĐĐĒĐ ĐĐĐĸĐ ĐĄĐ ĐĄĐĐĐĐĐ",
|
||||||
"no_assets_to_show": "ĐŅĐŧа ОйĐĩĐēŅи Са ĐŋĐžĐēаСваĐŊĐĩ",
|
"no_assets_to_show": "ĐŅĐŧа ОйĐĩĐēŅи Са ĐŋĐžĐēаСваĐŊĐĩ",
|
||||||
"no_cast_devices_found": "ĐŅĐŧа ĐŊаĐŧĐĩŅĐĩĐŊи ŅŅŅŅОКŅŅва Са ĐŋŅĐĩдаваĐŊĐĩ",
|
"no_cast_devices_found": "ĐŅĐŧа ĐŊаĐŧĐĩŅĐĩĐŊи ŅŅŅŅОКŅŅва Са ĐŋŅĐĩдаваĐŊĐĩ",
|
||||||
|
"no_checksum_local": "ĐиĐŋŅĐ˛Đ°Ņ ĐēĐžĐŊŅŅĐžĐģĐŊи ŅŅĐŧи - ĐŊĐĩ ĐŧĐžĐļĐĩ да ŅĐĩ ĐŋĐžĐģŅŅĐ°Ņ ĐģĐžĐēаĐģĐŊи ОйĐĩĐēŅи",
|
||||||
|
"no_checksum_remote": "ĐиĐŋŅĐ˛Đ°Ņ ĐēĐžĐŊŅŅĐžĐģĐŊи ŅŅĐŧи - ĐŊĐĩ ĐŧĐžĐļĐĩ да ŅĐĩ ĐŋĐžĐģŅŅĐ°Ņ ĐžĐąĐĩĐēŅи ĐžŅ ŅŅŅвŅŅа",
|
||||||
"no_duplicates_found": "ĐĐĩ ĐąŅŅ
а ĐžŅĐēŅиŅи Đ´ŅĐąĐģиĐēаŅи.",
|
"no_duplicates_found": "ĐĐĩ ĐąŅŅ
а ĐžŅĐēŅиŅи Đ´ŅĐąĐģиĐēаŅи.",
|
||||||
"no_exif_info_available": "ĐŅĐŧа exif иĐŊŅĐžŅĐŧаŅиŅ",
|
"no_exif_info_available": "ĐŅĐŧа exif иĐŊŅĐžŅĐŧаŅиŅ",
|
||||||
"no_explore_results_message": "ĐаŅĐĩŅĐĩ ĐžŅĐĩ ŅĐŊиĐŧĐēи, Са да ŅĐ°ĐˇĐŗĐģĐĩдаŅĐĩ ĐēĐžĐģĐĩĐēŅиŅŅа Ņи.",
|
"no_explore_results_message": "ĐаŅĐĩŅĐĩ ĐžŅĐĩ ŅĐŊиĐŧĐēи, Са да ŅĐ°ĐˇĐŗĐģĐĩдаŅĐĩ ĐēĐžĐģĐĩĐēŅиŅŅа Ņи.",
|
||||||
"no_favorites_message": "ĐОйавĐĩŅĐĩ в ĐģŅйиĐŧи, Са да ĐŊаĐŧиŅаŅĐĩ ĐąŅŅСО ĐŊаК-дОйŅиŅĐĩ Ņи ŅĐŊиĐŧĐēи и видĐĩĐžĐēĐģиĐŋОвĐĩ",
|
"no_favorites_message": "ĐОйавĐĩŅĐĩ в ĐģŅйиĐŧи, Са да ĐŊаĐŧиŅаŅĐĩ ĐąŅŅСО ĐŊаК-дОйŅиŅĐĩ Ņи ŅĐŊиĐŧĐēи и видĐĩĐžĐēĐģиĐŋОвĐĩ",
|
||||||
"no_libraries_message": "ĐĄŅСдаКŅĐĩ вŅĐŊŅĐŊа йийĐģиОŅĐĩĐēа Са да ŅĐ°ĐˇĐŗĐģĐĩĐļдаŅĐĩ ŅĐŊиĐŧĐēи и видĐĩĐžĐēĐģиĐŋОвĐĩ",
|
"no_libraries_message": "ĐĄŅСдаКŅĐĩ вŅĐŊŅĐŊа йийĐģиОŅĐĩĐēа Са да ŅĐ°ĐˇĐŗĐģĐĩĐļдаŅĐĩ ŅĐŊиĐŧĐēи и видĐĩĐžĐēĐģиĐŋОвĐĩ",
|
||||||
|
"no_local_assets_found": "ĐĐĩ Đĩ ĐŊаĐŧĐĩŅĐĩĐŊ ĐģĐžĐēаĐģĐĩĐŊ ОйĐĩĐēŅ Ņ ŅаĐēава ĐēĐžĐŊŅŅĐžĐģĐŊа ŅŅĐŧа",
|
||||||
"no_locked_photos_message": "ĐĄĐŊиĐŧĐēиŅĐĩ и видĐĩаŅа в СаĐēĐģŅŅĐĩĐŊаŅа ĐŋаĐŋĐēа Ņа ŅĐēŅиŅи и ĐŊĐĩ ŅĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ ĐŋŅи ŅĐ°ĐˇĐŗĐģĐĩĐļдаĐŊĐĩ ĐŊа йийĐģиОŅĐĩĐēаŅа.",
|
"no_locked_photos_message": "ĐĄĐŊиĐŧĐēиŅĐĩ и видĐĩаŅа в СаĐēĐģŅŅĐĩĐŊаŅа ĐŋаĐŋĐēа Ņа ŅĐēŅиŅи и ĐŊĐĩ ŅĐĩ ĐŋĐžĐēĐ°ĐˇĐ˛Đ°Ņ ĐŋŅи ŅĐ°ĐˇĐŗĐģĐĩĐļдаĐŊĐĩ ĐŊа йийĐģиОŅĐĩĐēаŅа.",
|
||||||
"no_name": "ĐĐĩС иĐŧĐĩ",
|
"no_name": "ĐĐĩС иĐŧĐĩ",
|
||||||
"no_notifications": "ĐŅĐŧа иСвĐĩŅŅиŅ",
|
"no_notifications": "ĐŅĐŧа иСвĐĩŅŅиŅ",
|
||||||
"no_people_found": "ĐĐĩ Ņа ĐŊаĐŧĐĩŅĐĩĐŊи ŅŅĐžŅвĐĩŅŅŅваŅи Ņ
ĐžŅа",
|
"no_people_found": "ĐĐĩ Ņа ĐŊаĐŧĐĩŅĐĩĐŊи ŅŅĐžŅвĐĩŅŅŅваŅи Ņ
ĐžŅа",
|
||||||
"no_places": "ĐŅĐŧа ĐŧĐĩŅŅа",
|
"no_places": "ĐŅĐŧа ĐŧĐĩŅŅа",
|
||||||
|
"no_remote_assets_found": "ĐĐĩ Đĩ ĐŊаĐŧĐĩŅĐĩĐŊ ОйĐĩĐēŅ ĐŊа ŅŅŅвŅŅа Ņ ŅаĐēава ĐēĐžĐŊŅŅĐžĐģĐŊа ŅŅĐŧа",
|
||||||
"no_results": "ĐŅĐŧа ŅĐĩСŅĐģŅаŅи",
|
"no_results": "ĐŅĐŧа ŅĐĩСŅĐģŅаŅи",
|
||||||
"no_results_description": "ĐĐŋиŅаКŅĐĩ ŅŅŅ ŅиĐŊĐžĐŊиĐŧ иĐģи ĐŋĐž-ОйŅа ĐēĐģŅŅОва Đ´ŅĐŧа",
|
"no_results_description": "ĐĐŋиŅаКŅĐĩ ŅŅŅ ŅиĐŊĐžĐŊиĐŧ иĐģи ĐŋĐž-ОйŅа ĐēĐģŅŅОва Đ´ŅĐŧа",
|
||||||
"no_shared_albums_message": "ĐĄŅСдаКŅĐĩ аĐģĐąŅĐŧ, Са да ŅĐŋОдĐĩĐģŅŅĐĩ ŅĐŊиĐŧĐēи и видĐĩĐžĐēĐģиĐŋОвĐĩ Ņ Ņ
ĐžŅаŅа в ĐŧŅĐĩĐļаŅа Ņи",
|
"no_shared_albums_message": "ĐĄŅСдаКŅĐĩ аĐģĐąŅĐŧ, Са да ŅĐŋОдĐĩĐģŅŅĐĩ ŅĐŊиĐŧĐēи и видĐĩĐžĐēĐģиĐŋОвĐĩ Ņ Ņ
ĐžŅаŅа в ĐŧŅĐĩĐļаŅа Ņи",
|
||||||
|
"no_uploads_in_progress": "ĐŅĐŧа ĐēаŅваĐŊĐĩ в ĐŧĐžĐŧĐĩĐŊŅа",
|
||||||
|
"not_available": "ĐĐĩĐŊаĐģиŅĐŊĐž",
|
||||||
"not_in_any_album": "ĐĐĩ Đĩ в ĐŊиĐēОК аĐģĐąŅĐŧ",
|
"not_in_any_album": "ĐĐĩ Đĩ в ĐŊиĐēОК аĐģĐąŅĐŧ",
|
||||||
"not_selected": "ĐĐĩ Đĩ иСйŅаĐŊĐž",
|
"not_selected": "ĐĐĩ Đĩ иСйŅаĐŊĐž",
|
||||||
"note_apply_storage_label_to_previously_uploaded assets": "ĐайĐĩĐģĐĩĐļĐēа: Đа да ĐŋŅиĐģĐžĐļиŅĐĩ ĐĩŅиĐēĐĩŅа Са ŅŅŅ
ŅаĐŊĐĩĐŊиĐĩ ĐēŅĐŧ ĐŋŅĐĩдваŅиŅĐĩĐģĐŊĐž ĐēаŅĐĩĐŊи аĐēŅиви, ŅŅаŅŅиŅаКŅĐĩ",
|
"note_apply_storage_label_to_previously_uploaded assets": "ĐайĐĩĐģĐĩĐļĐēа: Đа да ĐŋŅиĐģĐžĐļиŅĐĩ ĐĩŅиĐēĐĩŅа Са ŅŅŅ
ŅаĐŊĐĩĐŊиĐĩ ĐēŅĐŧ ĐŋŅĐĩдваŅиŅĐĩĐģĐŊĐž ĐēаŅĐĩĐŊи аĐēŅиви, ŅŅаŅŅиŅаКŅĐĩ",
|
||||||
@@ -1331,6 +1414,7 @@
|
|||||||
"oauth": "OAuth",
|
"oauth": "OAuth",
|
||||||
"official_immich_resources": "ĐŅиŅиаĐģĐŊа иĐŊŅĐžŅĐŧаŅĐ¸Ņ ĐˇĐ° Immich",
|
"official_immich_resources": "ĐŅиŅиаĐģĐŊа иĐŊŅĐžŅĐŧаŅĐ¸Ņ ĐˇĐ° Immich",
|
||||||
"offline": "ĐŅĐģаКĐŊ",
|
"offline": "ĐŅĐģаКĐŊ",
|
||||||
|
"offset": "ĐŅĐŧĐĩŅŅваĐŊĐĩ",
|
||||||
"ok": "ĐОйŅĐĩ",
|
"ok": "ĐОйŅĐĩ",
|
||||||
"oldest_first": "ĐаК-ŅŅаŅиŅĐĩ ĐŋŅŅви",
|
"oldest_first": "ĐаК-ŅŅаŅиŅĐĩ ĐŋŅŅви",
|
||||||
"on_this_device": "Đа ŅОва ŅŅŅŅОКŅŅвО",
|
"on_this_device": "Đа ŅОва ŅŅŅŅОКŅŅвО",
|
||||||
@@ -1349,10 +1433,13 @@
|
|||||||
"open_the_search_filters": "ĐŅваŅи ŅиĐģŅŅиŅĐĩ Са ŅŅŅŅĐĩĐŊĐĩ",
|
"open_the_search_filters": "ĐŅваŅи ŅиĐģŅŅиŅĐĩ Са ŅŅŅŅĐĩĐŊĐĩ",
|
||||||
"options": "ĐаŅŅŅОКĐēи",
|
"options": "ĐаŅŅŅОКĐēи",
|
||||||
"or": "иĐģи",
|
"or": "иĐģи",
|
||||||
|
"organize_into_albums": "Organitzar per à lbums",
|
||||||
|
"organize_into_albums_description": "Posar les fotos existents dins dels à lbums fent servir la configuraciÃŗ de sincronitzaciÃŗ",
|
||||||
"organize_your_library": "ĐŅĐŗĐ°ĐŊиСиŅаĐŊĐĩ ĐŊа ваŅаŅа йийĐģиОŅĐĩĐēа",
|
"organize_your_library": "ĐŅĐŗĐ°ĐŊиСиŅаĐŊĐĩ ĐŊа ваŅаŅа йийĐģиОŅĐĩĐēа",
|
||||||
"original": "ĐžŅĐ¸ĐŗĐ¸ĐŊаĐģ",
|
"original": "ĐžŅĐ¸ĐŗĐ¸ĐŊаĐģ",
|
||||||
"other": "ĐŅŅĐŗĐ¸",
|
"other": "ĐŅŅĐŗĐ¸",
|
||||||
"other_devices": "ĐŅŅĐŗĐ¸ ŅŅŅŅОКŅŅва",
|
"other_devices": "ĐŅŅĐŗĐ¸ ŅŅŅŅОКŅŅва",
|
||||||
|
"other_entities": "ĐŅŅĐŗĐ¸ ОйĐĩĐēŅи",
|
||||||
"other_variables": "ĐŅŅĐŗĐ¸ ĐŋŅĐžĐŧĐĩĐŊĐģиви",
|
"other_variables": "ĐŅŅĐŗĐ¸ ĐŋŅĐžĐŧĐĩĐŊĐģиви",
|
||||||
"owned": "ĐОиŅĐĩ",
|
"owned": "ĐОиŅĐĩ",
|
||||||
"owner": "ХОйŅŅвĐĩĐŊиĐē",
|
"owner": "ХОйŅŅвĐĩĐŊиĐē",
|
||||||
@@ -1407,6 +1494,9 @@
|
|||||||
"permission_onboarding_permission_limited": "ĐĐŗŅаĐŊиŅĐĩĐŊ Đ´ĐžŅŅŅĐŋ. Đа да ĐŧĐžĐļĐĩ Immich да аŅŅ
ивиŅа и ŅĐŋŅавĐģŅва ĐŗĐ°ĐģĐĩŅиŅŅа, ĐŋŅĐĩĐ´ĐžŅŅавĐĩŅĐĩ Đ´ĐžŅŅŅĐŋ Đ´Đž ŅĐŊиĐŧĐēи и видĐĩĐž в ĐŊаŅŅŅОКĐēиŅĐĩ.",
|
"permission_onboarding_permission_limited": "ĐĐŗŅаĐŊиŅĐĩĐŊ Đ´ĐžŅŅŅĐŋ. Đа да ĐŧĐžĐļĐĩ Immich да аŅŅ
ивиŅа и ŅĐŋŅавĐģŅва ĐŗĐ°ĐģĐĩŅиŅŅа, ĐŋŅĐĩĐ´ĐžŅŅавĐĩŅĐĩ Đ´ĐžŅŅŅĐŋ Đ´Đž ŅĐŊиĐŧĐēи и видĐĩĐž в ĐŊаŅŅŅОКĐēиŅĐĩ.",
|
||||||
"permission_onboarding_request": "Immich ŅĐĩ ĐŊŅĐļдаĐĩ ĐžŅ ŅаСŅĐĩŅĐĩĐŊиĐĩ Са ĐŋŅĐĩĐŗĐģĐĩĐ´ ĐŊа ŅĐŊиĐŧĐēи и видĐĩĐž.",
|
"permission_onboarding_request": "Immich ŅĐĩ ĐŊŅĐļдаĐĩ ĐžŅ ŅаСŅĐĩŅĐĩĐŊиĐĩ Са ĐŋŅĐĩĐŗĐģĐĩĐ´ ĐŊа ŅĐŊиĐŧĐēи и видĐĩĐž.",
|
||||||
"person": "ЧОвĐĩĐē",
|
"person": "ЧОвĐĩĐē",
|
||||||
|
"person_age_months": "{months, plural, one {# ĐŧĐĩŅĐĩŅ} other {# ĐŧĐĩŅĐĩŅа}}",
|
||||||
|
"person_age_year_months": "1 ĐŗĐžĐ´Đ¸ĐŊа и {months, plural, one {# ĐŧĐĩŅĐĩŅ} other {# ĐŧĐĩŅĐĩŅа}}",
|
||||||
|
"person_age_years": "{years, plural, other {# ĐŗĐžĐ´Đ¸ĐŊи}}",
|
||||||
"person_birthdate": "ĐаŅа ĐŊа ŅаĐļдаĐŊĐĩ {date}",
|
"person_birthdate": "ĐаŅа ĐŊа ŅаĐļдаĐŊĐĩ {date}",
|
||||||
"person_hidden": "{name}{hidden, select, true { (ŅĐēŅиŅ)} other {}}",
|
"person_hidden": "{name}{hidden, select, true { (ŅĐēŅиŅ)} other {}}",
|
||||||
"photo_shared_all_users": "ĐĐˇĐŗĐģĐĩĐļда, ŅĐĩ ŅŅĐĩ ŅĐŋОдĐĩĐģиĐģи ŅĐŊиĐŧĐēиŅĐĩ Ņи Ņ Đ˛ŅиŅĐēи ĐŋĐžŅŅĐĩйиŅĐĩĐģи иĐģи ĐŊŅĐŧаŅĐĩ ĐŋĐžŅŅĐĩйиŅĐĩĐģи, Ņ ĐēОиŅĐž да ŅĐŋОдĐĩĐģŅŅĐĩ.",
|
"photo_shared_all_users": "ĐĐˇĐŗĐģĐĩĐļда, ŅĐĩ ŅŅĐĩ ŅĐŋОдĐĩĐģиĐģи ŅĐŊиĐŧĐēиŅĐĩ Ņи Ņ Đ˛ŅиŅĐēи ĐŋĐžŅŅĐĩйиŅĐĩĐģи иĐģи ĐŊŅĐŧаŅĐĩ ĐŋĐžŅŅĐĩйиŅĐĩĐģи, Ņ ĐēОиŅĐž да ŅĐŋОдĐĩĐģŅŅĐĩ.",
|
||||||
@@ -1446,6 +1536,7 @@
|
|||||||
"profile_drawer_client_out_of_date_minor": "ĐОйиĐģĐŊĐžŅĐž ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩ Đĩ ĐžŅŅаŅŅĐģĐž. ĐĐžĐģŅ, аĐēŅŅаĐģиСиŅаК Đ´Đž ĐŊаК-ĐŊОваŅа вĐĩŅŅиŅ.",
|
"profile_drawer_client_out_of_date_minor": "ĐОйиĐģĐŊĐžŅĐž ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩ Đĩ ĐžŅŅаŅŅĐģĐž. ĐĐžĐģŅ, аĐēŅŅаĐģиСиŅаК Đ´Đž ĐŊаК-ĐŊОваŅа вĐĩŅŅиŅ.",
|
||||||
"profile_drawer_client_server_up_to_date": "ĐĐģиĐĩĐŊŅа и ŅŅŅвŅŅа Ņа ОйĐŊОвĐĩĐŊи",
|
"profile_drawer_client_server_up_to_date": "ĐĐģиĐĩĐŊŅа и ŅŅŅвŅŅа Ņа ОйĐŊОвĐĩĐŊи",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
|
"profile_drawer_readonly_mode": "Đ ĐĩĐļиĐŧа ŅаĐŧĐž Са ŅĐĩŅĐĩĐŊĐĩ Đĩ аĐēŅивиŅаĐŊ. ĐĄ Đ´ŅĐģĐŗĐž ĐŊаŅиŅĐēаĐŊĐĩ вŅŅŅ
Ņ ĐēаŅŅиĐēаŅа-аваŅĐ°Ņ ĐŊа ĐŋĐžŅŅĐĩйиŅĐĩĐģŅ ŅĐĩ Đ´ĐĩаĐēŅивиŅаŅĐĩ ŅаĐŧĐž Са ŅĐĩŅĐĩĐŊĐĩ.",
|
||||||
"profile_drawer_server_out_of_date_major": "ĐĐĩŅŅиŅŅа ĐŊа ŅŅŅвŅŅа Đĩ ĐžŅŅаŅŅĐģа. ĐĐžĐģŅ, аĐēŅŅаĐģиСиŅаК ĐŋĐžĐŊĐĩ Đ´Đž ĐŋĐžŅĐģĐĩĐ´ĐŊаŅа ĐŗĐģавĐŊа вĐĩŅŅиŅ.",
|
"profile_drawer_server_out_of_date_major": "ĐĐĩŅŅиŅŅа ĐŊа ŅŅŅвŅŅа Đĩ ĐžŅŅаŅŅĐģа. ĐĐžĐģŅ, аĐēŅŅаĐģиСиŅаК ĐŋĐžĐŊĐĩ Đ´Đž ĐŋĐžŅĐģĐĩĐ´ĐŊаŅа ĐŗĐģавĐŊа вĐĩŅŅиŅ.",
|
||||||
"profile_drawer_server_out_of_date_minor": "ĐĐĩŅŅиŅŅа ĐŊа ŅŅŅвŅŅа Đĩ ĐžŅŅаŅŅĐģа. ĐĐžĐģŅ, аĐēŅŅаĐģиСиŅаК Đ´Đž ĐŋĐžŅĐģĐĩĐ´ĐŊаŅа вĐĩŅŅиŅ.",
|
"profile_drawer_server_out_of_date_minor": "ĐĐĩŅŅиŅŅа ĐŊа ŅŅŅвŅŅа Đĩ ĐžŅŅаŅŅĐģа. ĐĐžĐģŅ, аĐēŅŅаĐģиСиŅаК Đ´Đž ĐŋĐžŅĐģĐĩĐ´ĐŊаŅа вĐĩŅŅиŅ.",
|
||||||
"profile_image_of_user": "ĐŅĐžŅиĐģĐŊа ŅĐŊиĐŧĐēа ĐŊа {user}",
|
"profile_image_of_user": "ĐŅĐžŅиĐģĐŊа ŅĐŊиĐŧĐēа ĐŊа {user}",
|
||||||
@@ -1484,12 +1575,16 @@
|
|||||||
"purchase_server_description_2": "ĐĄŅаŅŅŅ ĐŊа ĐŋОддŅŅĐļĐŊиĐē",
|
"purchase_server_description_2": "ĐĄŅаŅŅŅ ĐŊа ĐŋОддŅŅĐļĐŊиĐē",
|
||||||
"purchase_server_title": "ĐĄŅŅвŅŅ",
|
"purchase_server_title": "ĐĄŅŅвŅŅ",
|
||||||
"purchase_settings_server_activated": "ĐŅОдŅĐēŅОвиŅŅ ĐēĐģŅŅ ĐŊа ŅŅŅвŅŅа ŅĐĩ ŅĐŋŅавĐģŅва ĐžŅ Đ°Đ´ĐŧиĐŊиŅŅŅаŅĐžŅа",
|
"purchase_settings_server_activated": "ĐŅОдŅĐēŅОвиŅŅ ĐēĐģŅŅ ĐŊа ŅŅŅвŅŅа ŅĐĩ ŅĐŋŅавĐģŅва ĐžŅ Đ°Đ´ĐŧиĐŊиŅŅŅаŅĐžŅа",
|
||||||
|
"query_asset_id": "Buscar item per ID",
|
||||||
|
"queue_status": "Đ ĐžĐŋаŅĐēа {count} ĐžŅ {total}",
|
||||||
"rating": "ĐŅĐĩĐŊĐēа ŅŅŅ ĐˇĐ˛ĐĩСди",
|
"rating": "ĐŅĐĩĐŊĐēа ŅŅŅ ĐˇĐ˛ĐĩСди",
|
||||||
"rating_clear": "ĐСŅиŅŅи ĐžŅĐĩĐŊĐēаŅа",
|
"rating_clear": "ĐСŅиŅŅи ĐžŅĐĩĐŊĐēаŅа",
|
||||||
"rating_count": "{count, plural, one {# СвĐĩСда} other {# СвĐĩСди}}",
|
"rating_count": "{count, plural, one {# СвĐĩСда} other {# СвĐĩСди}}",
|
||||||
"rating_description": "ĐĐžĐēаĐļи EXIF ĐžŅĐĩĐŊĐēаŅа в ĐŋаĐŊĐĩĐģа Ņ Đ¸ĐŊŅĐžŅĐŧаŅиŅ",
|
"rating_description": "ĐĐžĐēаĐļи EXIF ĐžŅĐĩĐŊĐēаŅа в ĐŋаĐŊĐĩĐģа Ņ Đ¸ĐŊŅĐžŅĐŧаŅиŅ",
|
||||||
"reaction_options": "ĐĐˇĐąĐžŅ ĐŊа ŅĐĩаĐēŅиŅ",
|
"reaction_options": "ĐĐˇĐąĐžŅ ĐŊа ŅĐĩаĐēŅиŅ",
|
||||||
"read_changelog": "ĐŅĐžŅĐĩŅи ĐŋŅĐžĐŧĐĩĐŊиŅĐĩ",
|
"read_changelog": "ĐŅĐžŅĐĩŅи ĐŋŅĐžĐŧĐĩĐŊиŅĐĩ",
|
||||||
|
"readonly_mode_disabled": "Đ ĐĩĐļиĐŧа ŅаĐŧĐž Са ŅĐĩŅĐĩĐŊĐĩ Đĩ Đ´ĐĩаĐēŅивиŅаĐŊ",
|
||||||
|
"readonly_mode_enabled": "Đ ĐĩĐļиĐŧа ŅаĐŧĐž Са ŅĐĩŅĐĩĐŊĐĩ Đĩ аĐēŅивиŅаĐŊ",
|
||||||
"reassign": "ĐŅĐĩĐŊаСĐŊаŅаваĐŊĐĩ",
|
"reassign": "ĐŅĐĩĐŊаСĐŊаŅаваĐŊĐĩ",
|
||||||
"reassigned_assets_to_existing_person": "ĐŅĐĩĐŊаСĐŊаŅĐĩĐŊи {count, plural, one {# ĐĩĐģĐĩĐŧĐĩĐŊŅ} other {# ĐĩĐģĐĩĐŧĐĩĐŊŅа}} ĐŊа {name, select, null {ŅŅŅĐĩŅŅвŅĐ˛Đ°Ņ ŅОвĐĩĐē} other {{name}}}",
|
"reassigned_assets_to_existing_person": "ĐŅĐĩĐŊаСĐŊаŅĐĩĐŊи {count, plural, one {# ĐĩĐģĐĩĐŧĐĩĐŊŅ} other {# ĐĩĐģĐĩĐŧĐĩĐŊŅа}} ĐŊа {name, select, null {ŅŅŅĐĩŅŅвŅĐ˛Đ°Ņ ŅОвĐĩĐē} other {{name}}}",
|
||||||
"reassigned_assets_to_new_person": "ĐŅĐĩĐŊаСĐŊаŅĐĩĐŊи {count, plural, one {# ĐĩĐģĐĩĐŧĐĩĐŊŅ} other {# ĐĩĐģĐĩĐŧĐĩĐŊŅа}} ĐŊа ĐŊОв ŅОвĐĩĐē",
|
"reassigned_assets_to_new_person": "ĐŅĐĩĐŊаСĐŊаŅĐĩĐŊи {count, plural, one {# ĐĩĐģĐĩĐŧĐĩĐŊŅ} other {# ĐĩĐģĐĩĐŧĐĩĐŊŅа}} ĐŊа ĐŊОв ŅОвĐĩĐē",
|
||||||
@@ -1512,6 +1607,9 @@
|
|||||||
"refreshing_faces": "ĐĐŋŅĐĩŅĐŊŅваĐŊĐĩ ĐŊа ĐģиŅаŅа",
|
"refreshing_faces": "ĐĐŋŅĐĩŅĐŊŅваĐŊĐĩ ĐŊа ĐģиŅаŅа",
|
||||||
"refreshing_metadata": "ĐĐŋŅĐĩŅĐŊŅваĐŊĐĩ ĐŊа ĐŧĐĩŅадаĐŊĐŊиŅĐĩ",
|
"refreshing_metadata": "ĐĐŋŅĐĩŅĐŊŅваĐŊĐĩ ĐŊа ĐŧĐĩŅадаĐŊĐŊиŅĐĩ",
|
||||||
"regenerating_thumbnails": "ĐŅĐĩŅŅСдаваĐŊĐĩ ĐŊа ĐŧиĐŊиаŅŅŅиŅĐĩ",
|
"regenerating_thumbnails": "ĐŅĐĩŅŅСдаваĐŊĐĩ ĐŊа ĐŧиĐŊиаŅŅŅиŅĐĩ",
|
||||||
|
"remote": "Đа ŅŅŅвŅŅа",
|
||||||
|
"remote_assets": "ĐĐąĐĩĐēŅи ĐŊа ŅŅŅвŅŅа",
|
||||||
|
"remote_media_summary": "ĐйОйŅĐĩĐŊиĐĩ ĐŊа ĐŧĐĩдиКĐŊиŅĐĩ ŅаКĐģОвĐĩ ĐŊа ŅŅŅвŅŅа",
|
||||||
"remove": "ĐŅĐĩĐŧаŅ
ĐŊи",
|
"remove": "ĐŅĐĩĐŧаŅ
ĐŊи",
|
||||||
"remove_assets_album_confirmation": "ĐĄĐ¸ĐŗŅŅĐŊи Đģи ŅŅĐĩ, ŅĐĩ иŅĐēаŅĐĩ да ĐŋŅĐĩĐŧаŅ
ĐŊĐĩŅĐĩ {count, plural, one {# ĐĩĐģĐĩĐŧĐĩĐŊŅ} other {# ĐĩĐģĐĩĐŧĐĩĐŊŅа}} ĐžŅ Đ°ĐģĐąŅĐŧа?",
|
"remove_assets_album_confirmation": "ĐĄĐ¸ĐŗŅŅĐŊи Đģи ŅŅĐĩ, ŅĐĩ иŅĐēаŅĐĩ да ĐŋŅĐĩĐŧаŅ
ĐŊĐĩŅĐĩ {count, plural, one {# ĐĩĐģĐĩĐŧĐĩĐŊŅ} other {# ĐĩĐģĐĩĐŧĐĩĐŊŅа}} ĐžŅ Đ°ĐģĐąŅĐŧа?",
|
||||||
"remove_assets_shared_link_confirmation": "ĐĄĐ¸ĐŗŅŅĐŊи Đģи ŅŅĐĩ, ŅĐĩ иŅĐēаŅĐĩ да ĐŋŅĐĩĐŧаŅ
ĐŊĐĩŅĐĩ {count, plural, one {# ĐĩĐģĐĩĐŧĐĩĐŊŅ} other {# ĐĩĐģĐĩĐŧĐĩĐŊŅа}} ĐžŅ ŅОСи ŅĐŋĐžĐĩĐ´ĐĩĐģĐĩĐŊ ĐģиĐŊĐē?",
|
"remove_assets_shared_link_confirmation": "ĐĄĐ¸ĐŗŅŅĐŊи Đģи ŅŅĐĩ, ŅĐĩ иŅĐēаŅĐĩ да ĐŋŅĐĩĐŧаŅ
ĐŊĐĩŅĐĩ {count, plural, one {# ĐĩĐģĐĩĐŧĐĩĐŊŅ} other {# ĐĩĐģĐĩĐŧĐĩĐŊŅа}} ĐžŅ ŅОСи ŅĐŋĐžĐĩĐ´ĐĩĐģĐĩĐŊ ĐģиĐŊĐē?",
|
||||||
@@ -1549,19 +1647,29 @@
|
|||||||
"reset_password": "ĐŅĐģиŅаĐŊĐĩ ĐŊа ĐŋаŅĐžĐģаŅа",
|
"reset_password": "ĐŅĐģиŅаĐŊĐĩ ĐŊа ĐŋаŅĐžĐģаŅа",
|
||||||
"reset_people_visibility": "ĐŅĐģиŅаĐŊĐĩ ĐŊа видиĐŧĐžŅŅŅа ĐŊа Ņ
ĐžŅаŅа",
|
"reset_people_visibility": "ĐŅĐģиŅаĐŊĐĩ ĐŊа видиĐŧĐžŅŅŅа ĐŊа Ņ
ĐžŅаŅа",
|
||||||
"reset_pin_code": "ĐŅĐģиŅаК PIN ĐēОда",
|
"reset_pin_code": "ĐŅĐģиŅаК PIN ĐēОда",
|
||||||
|
"reset_pin_code_description": "ĐĐēĐž ŅŅĐĩ Ņи СайŅавиĐģи ĐĐĐ ĐēОда, ĐŧĐžĐļĐĩ да ŅĐĩ ОйŅŅĐŊĐĩŅĐĩ ĐēŅĐŧ адĐŧиĐŊиŅŅŅаŅĐžŅа ĐŊа ŅŅŅвŅŅа Са да ĐŗĐž ĐŊŅĐģиŅа",
|
||||||
|
"reset_pin_code_success": "ĐŖŅĐŋĐĩŅĐŊĐž ĐŊŅĐģиŅаĐŊ ĐĐĐ ĐēОд",
|
||||||
|
"reset_pin_code_with_password": "ĐĄ ваŅаŅа ĐŋаŅĐžĐģа ĐŧĐžĐļĐĩŅĐĩ виĐŊĐ°ĐŗĐ¸ да ĐŊŅĐģиŅаŅĐĩ ŅĐ˛ĐžŅ ĐĐĐ ĐēОд",
|
||||||
|
"reset_sqlite": "ĐŅĐģиŅаĐŊĐĩ ĐŊа йаСаŅа даĐŊĐŊи SQLite",
|
||||||
|
"reset_sqlite_confirmation": "ĐаиŅŅиĐŊа Đģи иŅĐēаŅĐĩ да ĐŊŅĐģиŅаŅĐĩ йаСаŅа даĐŊĐŊи SQLite? ĐŠĐĩ ŅŅŅйва да иСĐģĐĩСĐĩŅĐĩ ĐžŅ ŅиŅŅĐĩĐŧаŅа и да ŅĐĩ вĐŋиŅĐĩŅĐĩ ĐžŅĐŊОвО Са ĐŊОва ŅиĐŊŅ
ŅĐžĐŊиСаŅĐ¸Ņ ĐŊа даĐŊĐŊиŅĐĩ",
|
||||||
|
"reset_sqlite_success": "ĐŖŅĐŋĐĩŅĐŊĐž ĐŊŅĐģиŅаĐŊĐĩ ĐŊа йаСаŅа даĐŊĐŊи SQLite",
|
||||||
"reset_to_default": "ĐŅŅŅаĐŊĐĩ ĐŊа ŅайŅиŅĐŊи ĐŊаŅŅŅОКĐēи",
|
"reset_to_default": "ĐŅŅŅаĐŊĐĩ ĐŊа ŅайŅиŅĐŊи ĐŊаŅŅŅОКĐēи",
|
||||||
"resolve_duplicates": "Đ ĐĩŅи Đ´ŅĐąĐģиĐēаŅиŅĐĩ",
|
"resolve_duplicates": "Đ ĐĩŅи Đ´ŅĐąĐģиĐēаŅиŅĐĩ",
|
||||||
"resolved_all_duplicates": "ĐŅиŅĐēи Đ´ŅĐąĐģиĐēаŅи Ņа ŅĐĩŅĐĩĐŊи",
|
"resolved_all_duplicates": "ĐŅиŅĐēи Đ´ŅĐąĐģиĐēаŅи Ņа ŅĐĩŅĐĩĐŊи",
|
||||||
"restore": "ĐŅСŅŅаĐŊОвŅваĐŊĐĩ",
|
"restore": "ĐŅСŅŅаĐŊОвŅваĐŊĐĩ",
|
||||||
"restore_all": "ĐŅСŅŅаĐŊОви вŅиŅĐēи",
|
"restore_all": "ĐŅСŅŅаĐŊОви вŅиŅĐēи",
|
||||||
|
"restore_trash_action_prompt": "{count} вŅСŅŅаĐŊОвĐĩĐŊи ĐžŅ ĐēĐžŅа",
|
||||||
"restore_user": "ĐŅСŅŅаĐŊОви ĐŋĐžŅŅĐĩйиŅĐĩĐģ",
|
"restore_user": "ĐŅСŅŅаĐŊОви ĐŋĐžŅŅĐĩйиŅĐĩĐģ",
|
||||||
"restored_asset": "ĐŅСŅŅаĐŊОвĐĩĐŊ ĐĩĐģĐĩĐŧĐĩĐŊŅ",
|
"restored_asset": "ĐŅСŅŅаĐŊОвĐĩĐŊ ĐĩĐģĐĩĐŧĐĩĐŊŅ",
|
||||||
"resume": "ĐŅОдŅĐģĐļаваĐŊĐĩ",
|
"resume": "ĐŅОдŅĐģĐļаваĐŊĐĩ",
|
||||||
|
"resume_paused_jobs": "ĐŅОдŅĐģĐļи иСĐŋŅĐģĐŊĐĩĐŊиĐĩŅĐž ĐŊа {count, plural, one {# СадаŅа} other {# СадаŅи}}",
|
||||||
"retry_upload": "ĐĐŋиŅаК ĐēаŅваĐŊĐĩŅĐž ĐžŅĐŊОвО",
|
"retry_upload": "ĐĐŋиŅаК ĐēаŅваĐŊĐĩŅĐž ĐžŅĐŊОвО",
|
||||||
"review_duplicates": "Đ Đ°ĐˇĐŗĐģĐĩдаК Đ´ŅĐąĐģиĐēаŅиŅĐĩ",
|
"review_duplicates": "Đ Đ°ĐˇĐŗĐģĐĩдаК Đ´ŅĐąĐģиĐēаŅиŅĐĩ",
|
||||||
|
"review_large_files": "ĐŅĐĩĐŗĐģĐĩĐ´ ĐŊа ĐŗĐžĐģĐĩĐŧи ŅаКĐģОвĐĩ",
|
||||||
"role": "Đ ĐžĐģŅ",
|
"role": "Đ ĐžĐģŅ",
|
||||||
"role_editor": "Đ ĐĩдаĐēŅĐžŅ",
|
"role_editor": "Đ ĐĩдаĐēŅĐžŅ",
|
||||||
"role_viewer": "ĐŅиŅĐĩĐģ",
|
"role_viewer": "ĐŅиŅĐĩĐģ",
|
||||||
|
"running": "ĐСĐŋŅĐģĐŊŅваĐŊĐĩ",
|
||||||
"save": "ĐаĐŋаСи",
|
"save": "ĐаĐŋаСи",
|
||||||
"save_to_gallery": "ĐаĐŋаСи в ĐŗĐ°ĐģĐĩŅиŅŅа",
|
"save_to_gallery": "ĐаĐŋаСи в ĐŗĐ°ĐģĐĩŅиŅŅа",
|
||||||
"saved_api_key": "ĐаĐŋаСĐĩĐŊ API Key",
|
"saved_api_key": "ĐаĐŋаСĐĩĐŊ API Key",
|
||||||
@@ -1648,6 +1756,7 @@
|
|||||||
"select_user_for_sharing_page_err_album": "ĐĄŅСдаваĐŊĐĩŅĐž ĐŊа аĐģĐąŅĐŧ ĐŊĐĩ ĐąĐĩ ŅŅĐŋĐĩŅĐŊĐž",
|
"select_user_for_sharing_page_err_album": "ĐĄŅСдаваĐŊĐĩŅĐž ĐŊа аĐģĐąŅĐŧ ĐŊĐĩ ĐąĐĩ ŅŅĐŋĐĩŅĐŊĐž",
|
||||||
"selected": "ĐСйŅаĐŊĐž",
|
"selected": "ĐСйŅаĐŊĐž",
|
||||||
"selected_count": "{count, plural, other {# иСйŅаĐŊи}}",
|
"selected_count": "{count, plural, other {# иСйŅаĐŊи}}",
|
||||||
|
"selected_gps_coordinates": "ĐСйŅаĐŊи GPS ĐēООŅдиĐŊаŅи",
|
||||||
"send_message": "ĐСĐŋŅаŅĐĩŅĐĩ ŅŅОйŅĐĩĐŊиĐĩ",
|
"send_message": "ĐСĐŋŅаŅĐĩŅĐĩ ŅŅОйŅĐĩĐŊиĐĩ",
|
||||||
"send_welcome_email": "ĐСĐŋŅаŅĐĩŅĐĩ иĐŧĐĩĐšĐģ Са дОйŅĐĩ Đ´ĐžŅĐģи",
|
"send_welcome_email": "ĐСĐŋŅаŅĐĩŅĐĩ иĐŧĐĩĐšĐģ Са дОйŅĐĩ Đ´ĐžŅĐģи",
|
||||||
"server_endpoint": "ĐĐ´ŅĐĩŅ ĐŊа ŅŅŅвŅŅа",
|
"server_endpoint": "ĐĐ´ŅĐĩŅ ĐŊа ŅŅŅвŅŅа",
|
||||||
@@ -1715,6 +1824,7 @@
|
|||||||
"shared_link_clipboard_copied_massage": "ĐĐžĐŋиŅаĐŊĐž в ĐēĐģиĐŋйОŅда",
|
"shared_link_clipboard_copied_massage": "ĐĐžĐŋиŅаĐŊĐž в ĐēĐģиĐŋйОŅда",
|
||||||
"shared_link_clipboard_text": "ĐŅŅСĐēа: {link}\nĐаŅĐžĐģа: {password}",
|
"shared_link_clipboard_text": "ĐŅŅСĐēа: {link}\nĐаŅĐžĐģа: {password}",
|
||||||
"shared_link_create_error": "ĐŅĐĩŅĐēа ĐŋŅи ŅŅСдаваĐŊĐĩ ĐŊа ŅĐŋОдĐĩĐģĐĩĐŊа вŅŅСĐēа",
|
"shared_link_create_error": "ĐŅĐĩŅĐēа ĐŋŅи ŅŅСдаваĐŊĐĩ ĐŊа ŅĐŋОдĐĩĐģĐĩĐŊа вŅŅСĐēа",
|
||||||
|
"shared_link_custom_url_description": "ĐĐžŅŅŅĐŋĐĩŅĐĩ ŅĐŋОдĐĩĐģĐĩĐŊĐ¸Ņ ĐģиĐŊĐē Ņ ĐŋĐĩŅŅĐžĐŊаĐģиСиŅаĐŊ URL адŅĐĩŅ",
|
||||||
"shared_link_edit_description_hint": "ĐŅвĐĩди ĐžĐŋиŅаĐŊиĐĩ ĐŊа ŅĐŋОдĐĩĐģĐĩĐŊĐžŅĐž",
|
"shared_link_edit_description_hint": "ĐŅвĐĩди ĐžĐŋиŅаĐŊиĐĩ ĐŊа ŅĐŋОдĐĩĐģĐĩĐŊĐžŅĐž",
|
||||||
"shared_link_edit_expire_after_option_day": "1 Đ´ĐĩĐŊ",
|
"shared_link_edit_expire_after_option_day": "1 Đ´ĐĩĐŊ",
|
||||||
"shared_link_edit_expire_after_option_days": "{count} Đ´ĐŊи",
|
"shared_link_edit_expire_after_option_days": "{count} Đ´ĐŊи",
|
||||||
@@ -1740,6 +1850,7 @@
|
|||||||
"shared_link_info_chip_metadata": "EXIF",
|
"shared_link_info_chip_metadata": "EXIF",
|
||||||
"shared_link_manage_links": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа ŅĐŋОдĐĩĐģĐĩĐŊиŅĐĩ вŅŅСĐēи",
|
"shared_link_manage_links": "ĐŖĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа ŅĐŋОдĐĩĐģĐĩĐŊиŅĐĩ вŅŅСĐēи",
|
||||||
"shared_link_options": "ĐĐŋŅии Са ŅĐŋОдĐĩĐģĐĩĐŊа вŅŅСĐēа",
|
"shared_link_options": "ĐĐŋŅии Са ŅĐŋОдĐĩĐģĐĩĐŊа вŅŅСĐēа",
|
||||||
|
"shared_link_password_description": "ĐСиŅĐēваĐŊĐĩ ĐŊа ĐŋаŅĐžĐģа Са Đ´ĐžŅŅŅĐŋ Đ´Đž ŅĐŋОдĐĩĐģĐĩĐŊĐ¸Ņ ĐģиĐŊĐē",
|
||||||
"shared_links": "ĐĄĐŋОдĐĩĐģĐĩĐŊи вŅŅСĐēи",
|
"shared_links": "ĐĄĐŋОдĐĩĐģĐĩĐŊи вŅŅСĐēи",
|
||||||
"shared_links_description": "ĐĄĐŋОдĐĩĐģи ŅĐŊиĐŧĐēи и видĐĩа Ņ ĐģиĐŊĐē",
|
"shared_links_description": "ĐĄĐŋОдĐĩĐģи ŅĐŊиĐŧĐēи и видĐĩа Ņ ĐģиĐŊĐē",
|
||||||
"shared_photos_and_videos_count": "{assetCount, plural, other {# ŅĐŋОдĐĩĐģĐĩĐŊи ŅĐŊиĐŧĐēи и видĐĩа.}}",
|
"shared_photos_and_videos_count": "{assetCount, plural, other {# ŅĐŋОдĐĩĐģĐĩĐŊи ŅĐŊиĐŧĐēи и видĐĩа.}}",
|
||||||
@@ -1774,6 +1885,7 @@
|
|||||||
"show_slideshow_transition": "ĐĐžĐēаĐļи ĐŋŅĐĩŅ
Ода ĐŊа ŅĐģаКдŅĐžŅŅĐž",
|
"show_slideshow_transition": "ĐĐžĐēаĐļи ĐŋŅĐĩŅ
Ода ĐŊа ŅĐģаКдŅĐžŅŅĐž",
|
||||||
"show_supporter_badge": "ĐĐŊаŅĐēа ĐŋОддŅŅĐļĐŊиĐē",
|
"show_supporter_badge": "ĐĐŊаŅĐēа ĐŋОддŅŅĐļĐŊиĐē",
|
||||||
"show_supporter_badge_description": "ĐĐžĐēаĐļи СĐŊаŅĐēа ĐŋОддŅŅĐļĐŊиĐē",
|
"show_supporter_badge_description": "ĐĐžĐēаĐļи СĐŊаŅĐēа ĐŋОддŅŅĐļĐŊиĐē",
|
||||||
|
"show_text_search_menu": "ĐĐžĐēаĐļи ĐŧĐĩĐŊŅŅĐž Са ŅŅŅŅĐĩĐŊĐĩ ĐŊа ŅĐĩĐēŅŅ",
|
||||||
"shuffle": "РаСйŅŅĐēваĐŊĐĩ",
|
"shuffle": "РаСйŅŅĐēваĐŊĐĩ",
|
||||||
"sidebar": "ĐĄŅŅаĐŊиŅĐŊа ĐģĐĩĐŊŅа",
|
"sidebar": "ĐĄŅŅаĐŊиŅĐŊа ĐģĐĩĐŊŅа",
|
||||||
"sidebar_display_description": "ĐĐžĐēаСваĐŊĐĩ ĐŊа вŅŅСĐēа ĐēŅĐŧ Đ¸ĐˇĐŗĐģĐĩда в ŅŅŅаĐŊиŅĐŊаŅа ĐģĐĩĐŊŅа",
|
"sidebar_display_description": "ĐĐžĐēаСваĐŊĐĩ ĐŊа вŅŅСĐēа ĐēŅĐŧ Đ¸ĐˇĐŗĐģĐĩда в ŅŅŅаĐŊиŅĐŊаŅа ĐģĐĩĐŊŅа",
|
||||||
@@ -1789,6 +1901,7 @@
|
|||||||
"sort_created": "ĐаŅа ĐŊа ŅŅСдаваĐŊĐĩ",
|
"sort_created": "ĐаŅа ĐŊа ŅŅСдаваĐŊĐĩ",
|
||||||
"sort_items": "ĐŅОК ĐĩĐģĐĩĐŧĐĩĐŊŅи",
|
"sort_items": "ĐŅОК ĐĩĐģĐĩĐŧĐĩĐŊŅи",
|
||||||
"sort_modified": "ĐаŅа ĐŊа ĐŋŅĐžĐŧŅĐŊа",
|
"sort_modified": "ĐаŅа ĐŊа ĐŋŅĐžĐŧŅĐŊа",
|
||||||
|
"sort_newest": "ĐаК-ĐŊОви ŅĐŊиĐŧĐēи",
|
||||||
"sort_oldest": "ĐаК-ŅŅаŅаŅа ŅĐŊиĐŧĐēа",
|
"sort_oldest": "ĐаК-ŅŅаŅаŅа ŅĐŊиĐŧĐēа",
|
||||||
"sort_people_by_similarity": "ĐĄĐžŅŅиŅаĐŊĐĩ ĐŊа Ņ
ĐžŅа ĐŋĐž ĐŋŅиĐģиĐēа",
|
"sort_people_by_similarity": "ĐĄĐžŅŅиŅаĐŊĐĩ ĐŊа Ņ
ĐžŅа ĐŋĐž ĐŋŅиĐģиĐēа",
|
||||||
"sort_recent": "ĐаК-ĐŊОваŅа ŅĐŊиĐŧĐēа",
|
"sort_recent": "ĐаК-ĐŊОваŅа ŅĐŊиĐŧĐēа",
|
||||||
@@ -1815,6 +1928,7 @@
|
|||||||
"storage_quota": "ĐвОŅа ĐŊа Ņ
ŅаĐŊиĐģиŅĐĩŅĐž",
|
"storage_quota": "ĐвОŅа ĐŊа Ņ
ŅаĐŊиĐģиŅĐĩŅĐž",
|
||||||
"storage_usage": "ĐСĐŋĐžĐģСваĐŊи {used} ĐžŅ {available}",
|
"storage_usage": "ĐСĐŋĐžĐģСваĐŊи {used} ĐžŅ {available}",
|
||||||
"submit": "ĐСĐŋŅаŅаĐŊĐĩ",
|
"submit": "ĐСĐŋŅаŅаĐŊĐĩ",
|
||||||
|
"success": "ĐŖŅĐŋĐĩŅĐŊĐž",
|
||||||
"suggestions": "ĐŅĐĩĐ´ĐģĐžĐļĐĩĐŊиŅ",
|
"suggestions": "ĐŅĐĩĐ´ĐģĐžĐļĐĩĐŊиŅ",
|
||||||
"sunrise_on_the_beach": "ĐĐˇĐŗŅĐĩв ĐŊа ĐŋĐģаĐļа",
|
"sunrise_on_the_beach": "ĐĐˇĐŗŅĐĩв ĐŊа ĐŋĐģаĐļа",
|
||||||
"support": "ĐОддŅŅĐļĐēа",
|
"support": "ĐОддŅŅĐļĐēа",
|
||||||
@@ -1824,6 +1938,10 @@
|
|||||||
"sync": "ХиĐŊŅ
ŅĐžĐŊиСиŅаĐŊĐĩ",
|
"sync": "ХиĐŊŅ
ŅĐžĐŊиСиŅаĐŊĐĩ",
|
||||||
"sync_albums": "ХиĐŊŅ
ŅĐžĐŊиСиŅаĐŊĐĩ ĐŊа аĐģĐąŅĐŧи",
|
"sync_albums": "ХиĐŊŅ
ŅĐžĐŊиСиŅаĐŊĐĩ ĐŊа аĐģĐąŅĐŧи",
|
||||||
"sync_albums_manual_subtitle": "ХиĐŊŅ
ŅĐžĐŊиСиŅаК вŅиŅĐēи СаŅĐĩĐ´ĐĩĐŊи видĐĩа и ŅĐŊиĐŧĐēи в иСйŅаĐŊиŅĐĩ аŅŅ
ивĐŊи аĐģĐąŅĐŧи",
|
"sync_albums_manual_subtitle": "ХиĐŊŅ
ŅĐžĐŊиСиŅаК вŅиŅĐēи СаŅĐĩĐ´ĐĩĐŊи видĐĩа и ŅĐŊиĐŧĐēи в иСйŅаĐŊиŅĐĩ аŅŅ
ивĐŊи аĐģĐąŅĐŧи",
|
||||||
|
"sync_local": "ĐĐžĐēаĐģĐŊа ŅиĐŊŅ
ŅĐžĐŊиСаŅиŅ",
|
||||||
|
"sync_remote": "ХиĐŊŅ
ŅĐžĐŊиСаŅĐ¸Ņ ŅŅŅ ŅŅŅвŅŅа",
|
||||||
|
"sync_status": "ĐĄŅŅŅĐžŅĐŊиĐĩ ĐŊа ŅиĐŊŅ
ŅĐžĐŊиСаŅиŅŅа",
|
||||||
|
"sync_status_subtitle": "ĐŅĐĩĐŗĐģĐĩĐ´ и ŅĐŋŅавĐģĐĩĐŊиĐĩ ĐŊа ŅиŅŅĐĩĐŧаŅа Са ŅиĐŊŅ
ŅĐžĐŊиСаŅиŅ",
|
||||||
"sync_upload_album_setting_subtitle": "ĐĄŅСдаваКŅĐĩ и СаŅĐĩĐļдаКŅĐĩ ŅĐŊиĐŧĐēи и видĐĩа в иСйŅаĐŊи аĐģĐąŅĐŧи в Immich",
|
"sync_upload_album_setting_subtitle": "ĐĄŅСдаваКŅĐĩ и СаŅĐĩĐļдаКŅĐĩ ŅĐŊиĐŧĐēи и видĐĩа в иСйŅаĐŊи аĐģĐąŅĐŧи в Immich",
|
||||||
"tag": "ĐĸĐ°Đŗ",
|
"tag": "ĐĸĐ°Đŗ",
|
||||||
"tag_assets": "ĐĸĐ°ĐŗĐŊи ĐĩĐģĐĩĐŧĐĩĐŊŅи",
|
"tag_assets": "ĐĸĐ°ĐŗĐŊи ĐĩĐģĐĩĐŧĐĩĐŊŅи",
|
||||||
@@ -1834,6 +1952,7 @@
|
|||||||
"tag_updated": "ĐĐēŅŅаĐģиСиŅаĐŊ ĐĩŅиĐēĐĩŅ: {tag}",
|
"tag_updated": "ĐĐēŅŅаĐģиСиŅаĐŊ ĐĩŅиĐēĐĩŅ: {tag}",
|
||||||
"tagged_assets": "ĐĸĐ°ĐŗĐŊаŅи {count, plural, one {# ĐĩĐģĐĩĐŧĐĩĐŊŅ} other {# ĐĩĐģĐĩĐŧĐĩĐŊŅи}}",
|
"tagged_assets": "ĐĸĐ°ĐŗĐŊаŅи {count, plural, one {# ĐĩĐģĐĩĐŧĐĩĐŊŅ} other {# ĐĩĐģĐĩĐŧĐĩĐŊŅи}}",
|
||||||
"tags": "ĐŅиĐēĐĩŅ",
|
"tags": "ĐŅиĐēĐĩŅ",
|
||||||
|
"tap_to_run_job": "ĐĐžĐēĐžŅĐŊĐĩŅĐĩ, Са да ŅŅаŅŅиŅаŅĐĩ СадаŅаŅа",
|
||||||
"template": "ШайĐģĐžĐŊ",
|
"template": "ШайĐģĐžĐŊ",
|
||||||
"theme": "ĐĸĐĩĐŧа",
|
"theme": "ĐĸĐĩĐŧа",
|
||||||
"theme_selection": "ĐĐˇĐąĐžŅ ĐŊа ŅĐĩĐŧа",
|
"theme_selection": "ĐĐˇĐąĐžŅ ĐŊа ŅĐĩĐŧа",
|
||||||
@@ -1860,7 +1979,9 @@
|
|||||||
"to_change_password": "ĐŅĐžĐŧŅĐŊа ĐŊа ĐŋаŅĐžĐģаŅа",
|
"to_change_password": "ĐŅĐžĐŧŅĐŊа ĐŊа ĐŋаŅĐžĐģаŅа",
|
||||||
"to_favorite": "ĐŅйиĐŧ",
|
"to_favorite": "ĐŅйиĐŧ",
|
||||||
"to_login": "ĐĐŋиŅваĐŊĐĩ",
|
"to_login": "ĐĐŋиŅваĐŊĐĩ",
|
||||||
|
"to_multi_select": "Са Đ¸ĐˇĐąĐžŅ ĐŊа ĐŊŅĐēĐžĐģĐēĐž",
|
||||||
"to_parent": "ĐŅиди ĐēŅĐŧ ŅОдиŅĐĩĐģŅĐēĐ¸Ņ ĐĩĐģĐĩĐŧĐĩĐŊŅ",
|
"to_parent": "ĐŅиди ĐēŅĐŧ ŅОдиŅĐĩĐģŅĐēĐ¸Ņ ĐĩĐģĐĩĐŧĐĩĐŊŅ",
|
||||||
|
"to_select": "Са иСйОŅ",
|
||||||
"to_trash": "ĐĐžŅŅĐĩ",
|
"to_trash": "ĐĐžŅŅĐĩ",
|
||||||
"toggle_settings": "ĐŅĐĩвĐēĐģŅŅваĐŊĐĩ ĐŊа ĐŊаŅŅŅОКĐēиŅĐĩ",
|
"toggle_settings": "ĐŅĐĩвĐēĐģŅŅваĐŊĐĩ ĐŊа ĐŊаŅŅŅОКĐēиŅĐĩ",
|
||||||
"total": "ĐĐąŅĐž",
|
"total": "ĐĐąŅĐž",
|
||||||
@@ -1880,6 +2001,7 @@
|
|||||||
"trash_page_select_assets_btn": "ĐСйĐĩŅи ОйĐĩĐēŅи",
|
"trash_page_select_assets_btn": "ĐСйĐĩŅи ОйĐĩĐēŅи",
|
||||||
"trash_page_title": "Đ ĐēĐžŅа ({count})",
|
"trash_page_title": "Đ ĐēĐžŅа ({count})",
|
||||||
"trashed_items_will_be_permanently_deleted_after": "ĐСŅ
вŅŅĐģĐĩĐŊиŅĐĩ в ĐēĐžŅŅĐĩŅĐž ĐĩĐģĐĩĐŧĐĩĐŊŅи ŅĐĩ ĐąŅĐ´Đ°Ņ Đ¸ĐˇŅŅиŅи Са ĐŋĐžŅŅĐžŅĐŊĐŊĐž ŅĐģĐĩĐ´ {days, plural, one {# Đ´ĐĩĐŊ} other {# Đ´ĐŊи}}.",
|
"trashed_items_will_be_permanently_deleted_after": "ĐСŅ
вŅŅĐģĐĩĐŊиŅĐĩ в ĐēĐžŅŅĐĩŅĐž ĐĩĐģĐĩĐŧĐĩĐŊŅи ŅĐĩ ĐąŅĐ´Đ°Ņ Đ¸ĐˇŅŅиŅи Са ĐŋĐžŅŅĐžŅĐŊĐŊĐž ŅĐģĐĩĐ´ {days, plural, one {# Đ´ĐĩĐŊ} other {# Đ´ĐŊи}}.",
|
||||||
|
"troubleshoot": "ĐŅŅŅŅаĐŊŅваĐŊĐĩ ĐŊа ĐŋŅОйĐģĐĩĐŧи",
|
||||||
"type": "ĐĸиĐŋ",
|
"type": "ĐĸиĐŋ",
|
||||||
"unable_to_change_pin_code": "ĐĐĩвŅСĐŧĐžĐļĐŊа ĐŋŅĐžĐŧŅĐŊа ĐŊа PIN ĐēОда",
|
"unable_to_change_pin_code": "ĐĐĩвŅСĐŧĐžĐļĐŊа ĐŋŅĐžĐŧŅĐŊа ĐŊа PIN ĐēОда",
|
||||||
"unable_to_setup_pin_code": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž СадаваĐŊĐĩ ĐŊа PIN ĐēОда",
|
"unable_to_setup_pin_code": "ĐĐĩŅŅĐŋĐĩŅĐŊĐž СадаваĐŊĐĩ ĐŊа PIN ĐēОда",
|
||||||
@@ -1910,13 +2032,17 @@
|
|||||||
"unstacked_assets_count": "РаСĐēаŅĐĩĐŊи {count, plural, one {# ĐĩĐģĐĩĐŧĐĩĐŊŅ} other {# ĐĩĐģĐĩĐŧĐĩĐŊŅи}}",
|
"unstacked_assets_count": "РаСĐēаŅĐĩĐŊи {count, plural, one {# ĐĩĐģĐĩĐŧĐĩĐŊŅ} other {# ĐĩĐģĐĩĐŧĐĩĐŊŅи}}",
|
||||||
"untagged": "ĐĐĩĐŧаŅĐēиŅаĐŊи",
|
"untagged": "ĐĐĩĐŧаŅĐēиŅаĐŊи",
|
||||||
"up_next": "ĐĄĐģĐĩдваŅ",
|
"up_next": "ĐĄĐģĐĩдваŅ",
|
||||||
|
"update_location_action_prompt": "ĐĐąĐŊОви ĐēООŅдиĐŊаŅиŅĐĩ ĐŊа {count} иСйŅаĐŊи ОйĐĩĐēŅа Ņ:",
|
||||||
"updated_at": "ĐĐąĐŊОвĐĩĐŊĐž",
|
"updated_at": "ĐĐąĐŊОвĐĩĐŊĐž",
|
||||||
"updated_password": "ĐаŅĐžĐģаŅа Đĩ аĐēŅŅаĐģиСиŅаĐŊа",
|
"updated_password": "ĐаŅĐžĐģаŅа Đĩ аĐēŅŅаĐģиСиŅаĐŊа",
|
||||||
"upload": "ĐаŅваĐŊĐĩ",
|
"upload": "ĐаŅваĐŊĐĩ",
|
||||||
|
"upload_action_prompt": "{count} ĐŊа ĐžĐŋаŅĐēа Са ĐēаŅваĐŊĐĩ",
|
||||||
"upload_concurrency": "ĐŖŅĐŋĐžŅĐĩĐ´ĐŊи ĐēаŅваĐŊиŅ",
|
"upload_concurrency": "ĐŖŅĐŋĐžŅĐĩĐ´ĐŊи ĐēаŅваĐŊиŅ",
|
||||||
|
"upload_details": "ĐĐĩŅаКĐģи Са ĐēаŅваĐŊĐĩŅĐž",
|
||||||
"upload_dialog_info": "ĐŅĐēаŅĐĩ Đģи да аŅŅ
ивиŅаŅĐĩ ĐŊа ŅŅŅвŅŅа иСйŅаĐŊиŅĐĩ ОйĐĩĐēŅи?",
|
"upload_dialog_info": "ĐŅĐēаŅĐĩ Đģи да аŅŅ
ивиŅаŅĐĩ ĐŊа ŅŅŅвŅŅа иСйŅаĐŊиŅĐĩ ОйĐĩĐēŅи?",
|
||||||
"upload_dialog_title": "ĐаŅи ОйĐĩĐēŅ",
|
"upload_dialog_title": "ĐаŅи ОйĐĩĐēŅ",
|
||||||
"upload_errors": "ĐаŅваĐŊĐĩŅĐž Đĩ СавŅŅĐĩĐŊĐž Ņ {count, plural, one {# ĐŗŅĐĩŅĐēа} other {# ĐŗŅĐĩŅĐēи}}, ОйĐŊОвĐĩŅĐĩ ŅŅŅаĐŊиŅаŅа Са да видиŅĐĩ ĐŊОвиŅĐĩ ĐĩĐģĐĩĐŧĐĩĐŊŅи.",
|
"upload_errors": "ĐаŅваĐŊĐĩŅĐž Đĩ СавŅŅĐĩĐŊĐž Ņ {count, plural, one {# ĐŗŅĐĩŅĐēа} other {# ĐŗŅĐĩŅĐēи}}, ОйĐŊОвĐĩŅĐĩ ŅŅŅаĐŊиŅаŅа Са да видиŅĐĩ ĐŊОвиŅĐĩ ĐĩĐģĐĩĐŧĐĩĐŊŅи.",
|
||||||
|
"upload_finished": "ĐаŅваĐŊĐĩŅĐž СавŅŅŅи",
|
||||||
"upload_progress": "ĐŅŅĐ°Đ˛Đ°Ņ {remaining, number} - ĐĐąŅайОŅĐĩĐŊи {processed, number}/{total, number}",
|
"upload_progress": "ĐŅŅĐ°Đ˛Đ°Ņ {remaining, number} - ĐĐąŅайОŅĐĩĐŊи {processed, number}/{total, number}",
|
||||||
"upload_skipped_duplicates": "ĐŅĐĩŅĐēĐžŅĐĩĐŊи {count, plural, one {# Đ´ŅĐąĐģиŅаĐŊ ĐĩĐģĐĩĐŧĐĩĐŊŅ} other {# Đ´ŅĐąĐģиŅаĐŊи ĐĩĐģĐĩĐŧĐĩĐŊŅи}}",
|
"upload_skipped_duplicates": "ĐŅĐĩŅĐēĐžŅĐĩĐŊи {count, plural, one {# Đ´ŅĐąĐģиŅаĐŊ ĐĩĐģĐĩĐŧĐĩĐŊŅ} other {# Đ´ŅĐąĐģиŅаĐŊи ĐĩĐģĐĩĐŧĐĩĐŊŅи}}",
|
||||||
"upload_status_duplicates": "ĐŅĐąĐģиĐēаŅи",
|
"upload_status_duplicates": "ĐŅĐąĐģиĐēаŅи",
|
||||||
@@ -1925,6 +2051,7 @@
|
|||||||
"upload_success": "ĐаŅваĐŊĐĩŅĐž Đĩ ŅŅĐŋĐĩŅĐŊĐž, ĐžĐŋŅĐĩŅĐŊĐĩŅĐĩ ŅŅŅаĐŊиŅаŅа, Са да видиŅĐĩ ĐŊОвиŅĐĩ ŅаКĐģОвĐĩ.",
|
"upload_success": "ĐаŅваĐŊĐĩŅĐž Đĩ ŅŅĐŋĐĩŅĐŊĐž, ĐžĐŋŅĐĩŅĐŊĐĩŅĐĩ ŅŅŅаĐŊиŅаŅа, Са да видиŅĐĩ ĐŊОвиŅĐĩ ŅаКĐģОвĐĩ.",
|
||||||
"upload_to_immich": "ĐаСваĐŊĐĩ в Immich ({count})",
|
"upload_to_immich": "ĐаСваĐŊĐĩ в Immich ({count})",
|
||||||
"uploading": "ĐаŅваĐŧĐĩ",
|
"uploading": "ĐаŅваĐŧĐĩ",
|
||||||
|
"uploading_media": "ĐаŅваĐŊĐĩ ĐŊа ĐŧĐĩдиКĐŊи ŅаКĐģОвĐĩ",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"usage": "ĐĐžŅŅĐĩĐąĐģĐĩĐŊиĐĩ",
|
"usage": "ĐĐžŅŅĐĩĐąĐģĐĩĐŊиĐĩ",
|
||||||
"use_biometric": "ĐСĐŋĐžĐģСваК йиОĐŧĐĩŅŅиŅ",
|
"use_biometric": "ĐСĐŋĐžĐģСваК йиОĐŧĐĩŅŅиŅ",
|
||||||
@@ -1945,6 +2072,7 @@
|
|||||||
"user_usage_stats_description": "ĐŅĐĩĐŗĐģĐĩĐ´ ĐŊа ŅŅаŅиŅŅиĐēаŅа Са иСĐŋĐžĐģСваĐŊĐĩŅĐž ĐŊа аĐēаŅĐŊŅа",
|
"user_usage_stats_description": "ĐŅĐĩĐŗĐģĐĩĐ´ ĐŊа ŅŅаŅиŅŅиĐēаŅа Са иСĐŋĐžĐģСваĐŊĐĩŅĐž ĐŊа аĐēаŅĐŊŅа",
|
||||||
"username": "ĐĐžŅŅĐĩйиŅĐĩĐģŅĐēĐž иĐŧĐĩ",
|
"username": "ĐĐžŅŅĐĩйиŅĐĩĐģŅĐēĐž иĐŧĐĩ",
|
||||||
"users": "ĐĐžŅŅĐĩйиŅĐĩĐģи",
|
"users": "ĐĐžŅŅĐĩйиŅĐĩĐģи",
|
||||||
|
"users_added_to_album_count": "{count, plural, one {ĐОйавĐĩĐŊ Đĩ # ĐŋĐžŅŅĐĩйиŅĐĩĐģ} other {ĐОйавĐĩĐŊи Ņа # ĐŋĐžŅŅĐĩйиŅĐĩĐģŅ}} ĐŊа аĐģĐąŅĐŧа",
|
||||||
"utilities": "ĐĐŊŅŅŅŅĐŧĐĩĐŊŅи",
|
"utilities": "ĐĐŊŅŅŅŅĐŧĐĩĐŊŅи",
|
||||||
"validate": "ĐаĐģидиŅаĐŊĐĩ",
|
"validate": "ĐаĐģидиŅаĐŊĐĩ",
|
||||||
"validate_endpoint_error": "ĐĐžĐģŅ, вŅвĐĩди ĐŋŅавиĐģĐĩĐŊ URL",
|
"validate_endpoint_error": "ĐĐžĐģŅ, вŅвĐĩди ĐŋŅавиĐģĐĩĐŊ URL",
|
||||||
@@ -1963,6 +2091,7 @@
|
|||||||
"view_album": "Đ Đ°ĐˇĐŗĐģĐĩдаК аĐģĐąŅĐŧа",
|
"view_album": "Đ Đ°ĐˇĐŗĐģĐĩдаК аĐģĐąŅĐŧа",
|
||||||
"view_all": "ĐŅĐĩĐŗĐģĐĩĐ´ ĐŊа вŅиŅĐēи",
|
"view_all": "ĐŅĐĩĐŗĐģĐĩĐ´ ĐŊа вŅиŅĐēи",
|
||||||
"view_all_users": "ĐŅĐĩĐŗĐģĐĩĐ´ ĐŊа вŅиŅĐēи ĐŋĐžŅŅĐĩйиŅĐĩĐģи",
|
"view_all_users": "ĐŅĐĩĐŗĐģĐĩĐ´ ĐŊа вŅиŅĐēи ĐŋĐžŅŅĐĩйиŅĐĩĐģи",
|
||||||
|
"view_details": "ĐОдŅОйĐŊĐžŅŅи Са Đ¸ĐˇĐŗĐģĐĩда",
|
||||||
"view_in_timeline": "ĐĐžĐēаĐļи вŅв вŅĐĩĐŧĐĩва ĐģиĐŊиŅ",
|
"view_in_timeline": "ĐĐžĐēаĐļи вŅв вŅĐĩĐŧĐĩва ĐģиĐŊиŅ",
|
||||||
"view_link": "ĐŅĐĩĐŗĐģĐĩĐ´ ĐŊа вŅŅСĐēаŅа",
|
"view_link": "ĐŅĐĩĐŗĐģĐĩĐ´ ĐŊа вŅŅСĐēаŅа",
|
||||||
"view_links": "ĐŅĐĩĐŗĐģĐĩĐ´ ĐŊа вŅŅСĐēиŅĐĩ",
|
"view_links": "ĐŅĐĩĐŗĐģĐĩĐ´ ĐŊа вŅŅСĐēиŅĐĩ",
|
||||||
@@ -1970,6 +2099,7 @@
|
|||||||
"view_next_asset": "ĐŅĐĩĐŗĐģĐĩĐ´ ĐŊа ŅĐģĐĩдваŅĐ¸Ņ ŅаКĐģ",
|
"view_next_asset": "ĐŅĐĩĐŗĐģĐĩĐ´ ĐŊа ŅĐģĐĩдваŅĐ¸Ņ ŅаКĐģ",
|
||||||
"view_previous_asset": "ĐŅĐĩĐŗĐģĐĩĐ´ ĐŊа ĐŋŅĐĩдиŅĐŊĐ¸Ņ ŅаКĐģ",
|
"view_previous_asset": "ĐŅĐĩĐŗĐģĐĩĐ´ ĐŊа ĐŋŅĐĩдиŅĐŊĐ¸Ņ ŅаКĐģ",
|
||||||
"view_qr_code": "ĐиĐļ QR ĐēОда",
|
"view_qr_code": "ĐиĐļ QR ĐēОда",
|
||||||
|
"view_similar_photos": "ĐиĐļ ĐŋОдОйĐŊи ŅĐŊиĐŧĐēи",
|
||||||
"view_stack": "ĐĐžĐēаĐļи в ŅŅĐĩĐē",
|
"view_stack": "ĐĐžĐēаĐļи в ŅŅĐĩĐē",
|
||||||
"view_user": "ĐиĐļ ĐŋĐžŅŅĐĩйиŅĐĩĐģŅ",
|
"view_user": "ĐиĐļ ĐŋĐžŅŅĐĩйиŅĐĩĐģŅ",
|
||||||
"viewer_remove_from_stack": "ĐŅĐĩĐŧаŅ
ваĐŊĐĩ ĐžŅ ĐžĐŋаŅĐēаŅа",
|
"viewer_remove_from_stack": "ĐŅĐĩĐŧаŅ
ваĐŊĐĩ ĐžŅ ĐžĐŋаŅĐēаŅа",
|
||||||
@@ -1988,5 +2118,6 @@
|
|||||||
"yes": "Đа",
|
"yes": "Đа",
|
||||||
"you_dont_have_any_shared_links": "ĐŅĐŧаŅĐĩ ŅĐŋОдĐĩĐģĐĩĐŊи вŅŅСĐēи",
|
"you_dont_have_any_shared_links": "ĐŅĐŧаŅĐĩ ŅĐŋОдĐĩĐģĐĩĐŊи вŅŅСĐēи",
|
||||||
"your_wifi_name": "ĐаŅаŅа Wi-Fi ĐŧŅĐĩĐļа",
|
"your_wifi_name": "ĐаŅаŅа Wi-Fi ĐŧŅĐĩĐļа",
|
||||||
"zoom_image": "ĐŖĐ˛ĐĩĐģиŅаваĐŊĐĩ ĐŊа иСОйŅаĐļĐĩĐŊиĐĩŅĐž"
|
"zoom_image": "ĐŖĐ˛ĐĩĐģиŅаваĐŊĐĩ ĐŊа иСОйŅаĐļĐĩĐŊиĐĩŅĐž",
|
||||||
|
"zoom_to_bounds": "ĐŅийĐģиĐļи Đ´Đž ŅŅйиŅаĐŊĐĩ в ĐŗŅаĐŊиŅиŅĐĩ"
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-1
@@ -14,5 +14,10 @@
|
|||||||
"add_exclusion_pattern": "Putem wan paten wae hemi karem aot",
|
"add_exclusion_pattern": "Putem wan paten wae hemi karem aot",
|
||||||
"add_import_path": "Putem wan pat blo import",
|
"add_import_path": "Putem wan pat blo import",
|
||||||
"add_location": "Putem wan place blo hem",
|
"add_location": "Putem wan place blo hem",
|
||||||
"add_more_users": "Putem mor man"
|
"add_more_users": "Putem mor man",
|
||||||
|
"readonly_mode_enabled": "Mod blo yu no save janjem i on",
|
||||||
|
"reassigned_assets_to_new_person": "Janjem{count, plural, one {# asset} other {# assets}} blo nu man",
|
||||||
|
"reassing_hint": "janjem ol sumtin yu bin joos i go blo wan man",
|
||||||
|
"recent-albums": "album i no old tu mas",
|
||||||
|
"recent_searches": "lukabout wea i no old tu mas"
|
||||||
}
|
}
|
||||||
|
|||||||
+37
-5
@@ -14,6 +14,7 @@
|
|||||||
"add_a_location": "āĻāĻāĻāĻŋ āĻ
āĻŦāϏā§āĻĨāĻžāύ āϝā§āĻ āĻāϰā§āύ",
|
"add_a_location": "āĻāĻāĻāĻŋ āĻ
āĻŦāϏā§āĻĨāĻžāύ āϝā§āĻ āĻāϰā§āύ",
|
||||||
"add_a_name": "āĻāĻāĻāĻŋ āύāĻžāĻŽ āϝā§āĻ āĻāϰā§āύ",
|
"add_a_name": "āĻāĻāĻāĻŋ āύāĻžāĻŽ āϝā§āĻ āĻāϰā§āύ",
|
||||||
"add_a_title": "āĻāĻāĻāĻŋ āĻļāĻŋāϰā§āύāĻžāĻŽ āϝā§āĻ āĻāϰā§āύ",
|
"add_a_title": "āĻāĻāĻāĻŋ āĻļāĻŋāϰā§āύāĻžāĻŽ āϝā§āĻ āĻāϰā§āύ",
|
||||||
|
"add_birthday": "āĻāĻāĻāĻŋ āĻāύā§āĻŽāĻĻāĻŋāύ āϝā§āĻ āĻāϰā§āύ",
|
||||||
"add_endpoint": "āĻāύā§āĻĄāĻĒāϝāĻŧā§āύā§āĻ āϝā§āĻ āĻāϰā§āύ",
|
"add_endpoint": "āĻāύā§āĻĄāĻĒāϝāĻŧā§āύā§āĻ āϝā§āĻ āĻāϰā§āύ",
|
||||||
"add_exclusion_pattern": "āĻŦāĻšāĻŋāϰā§āĻā§āϤāĻāϰāĻŖ āύāĻŽā§āύāĻž",
|
"add_exclusion_pattern": "āĻŦāĻšāĻŋāϰā§āĻā§āϤāĻāϰāĻŖ āύāĻŽā§āύāĻž",
|
||||||
"add_import_path": "āĻāĻŽāĻĒā§āϰā§āĻ āĻāϰāĻžāϰ āĻĒāĻžāĻĨ āϝā§āĻā§āϤ āĻāϰā§āύ",
|
"add_import_path": "āĻāĻŽāĻĒā§āϰā§āĻ āĻāϰāĻžāϰ āĻĒāĻžāĻĨ āϝā§āĻā§āϤ āĻāϰā§āύ",
|
||||||
@@ -27,6 +28,9 @@
|
|||||||
"add_to_album": "āĻāϞāĻŦāĻžāĻŽ āĻ āϝā§āĻ āĻāϰā§āύ",
|
"add_to_album": "āĻāϞāĻŦāĻžāĻŽ āĻ āϝā§āĻ āĻāϰā§āύ",
|
||||||
"add_to_album_bottom_sheet_added": "{album} āĻ āϝā§āĻ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§",
|
"add_to_album_bottom_sheet_added": "{album} āĻ āϝā§āĻ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§",
|
||||||
"add_to_album_bottom_sheet_already_exists": "{album} āĻ āĻāĻā§ āĻĨā§āĻā§āĻ āĻāĻā§",
|
"add_to_album_bottom_sheet_already_exists": "{album} āĻ āĻāĻā§ āĻĨā§āĻā§āĻ āĻāĻā§",
|
||||||
|
"add_to_album_toggle": "{album} - āĻāϰ āύāĻŋāϰā§āĻŦāĻžāĻāύ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰā§āύ",
|
||||||
|
"add_to_albums": "āĻ
ā§āϝāĻžāϞāĻŦāĻžāĻŽā§ āϝā§āĻ āĻāϰā§āύ",
|
||||||
|
"add_to_albums_count": "āĻ
ā§āϝāĻžāϞāĻŦāĻžāĻŽā§ āϝā§āĻ āĻāϰā§āύ ({count})",
|
||||||
"add_to_shared_album": "āĻļā§āϝāĻŧāĻžāϰ āĻāϰāĻž āĻ
ā§āϝāĻžāϞāĻŦāĻžāĻŽā§ āϝā§āĻ āĻāϰā§āύ",
|
"add_to_shared_album": "āĻļā§āϝāĻŧāĻžāϰ āĻāϰāĻž āĻ
ā§āϝāĻžāϞāĻŦāĻžāĻŽā§ āϝā§āĻ āĻāϰā§āύ",
|
||||||
"add_url": "āϞāĻŋāĻā§āĻ āϝā§āĻ āĻāϰā§āύ",
|
"add_url": "āϞāĻŋāĻā§āĻ āϝā§āĻ āĻāϰā§āύ",
|
||||||
"added_to_archive": "āĻāϰā§āĻāĻžāĻāĻ āĻ āϝā§āĻ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§",
|
"added_to_archive": "āĻāϰā§āĻāĻžāĻāĻ āĻ āϝā§āĻ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§",
|
||||||
@@ -44,6 +48,13 @@
|
|||||||
"backup_database": "āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĄāĻžāĻŽā§āĻĒ āϤā§āϰāĻŋ āĻāϰā§āύ",
|
"backup_database": "āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĄāĻžāĻŽā§āĻĒ āϤā§āϰāĻŋ āĻāϰā§āύ",
|
||||||
"backup_database_enable_description": "āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĄāĻžāĻŽā§āĻĒ āϏāĻā§āϰāĻŋāϝāĻŧ āĻāϰā§āύ",
|
"backup_database_enable_description": "āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĄāĻžāĻŽā§āĻĒ āϏāĻā§āϰāĻŋāϝāĻŧ āĻāϰā§āύ",
|
||||||
"backup_keep_last_amount": "āĻāĻā§āϰ āĻĄāĻžāĻŽā§āĻĒā§āϰ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āϰāĻžāĻāĻž āĻšāĻŦā§",
|
"backup_keep_last_amount": "āĻāĻā§āϰ āĻĄāĻžāĻŽā§āĻĒā§āϰ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āϰāĻžāĻāĻž āĻšāĻŦā§",
|
||||||
|
"backup_onboarding_1_description": "āĻ
āĻĢāϏāĻžāĻāĻ āĻāĻĒāĻŋ āĻā§āϞāĻžāĻāĻĄā§ āĻ
āĻĨāĻŦāĻž āĻ
āύā§āϝ āĻā§āύāĻ āĻā§āϤ āϏā§āĻĨāĻžāύā§āĨ¤",
|
||||||
|
"backup_onboarding_2_description": "āĻŦāĻŋāĻāĻŋāύā§āύ āĻĄāĻŋāĻāĻžāĻāϏ⧠āϏā§āĻĨāĻžāύā§āϝāĻŧ āĻāĻĒāĻŋāĨ¤ āĻāϰ āĻŽāϧā§āϝ⧠āϰāϝāĻŧā§āĻā§ āĻĒā§āϰāϧāĻžāύ āĻĢāĻžāĻāϞ āĻāĻŦāĻ āϏā§āĻĨāĻžāύā§āϝāĻŧāĻāĻžāĻŦā§ āϏā§āĻ āĻĢāĻžāĻāϞāĻā§āϞāĻŋāϰ āĻŦā§āϝāĻžāĻāĻāĻĒāĨ¤",
|
||||||
|
"backup_onboarding_3_description": "āĻŽā§āϞ āĻĢāĻžāĻāϞ āϏāĻš āĻāĻĒāύāĻžāϰ āĻĄā§āĻāĻžāϰ āĻŽā§āĻ āĻāĻĒāĻŋāĨ¤ āĻāϰ āĻŽāϧā§āϝ⧠āϰāϝāĻŧā§āĻā§ ā§§āĻāĻŋ āĻ
āĻĢāϏāĻžāĻāĻ āĻāĻĒāĻŋ āĻāĻŦāĻ ā§¨āĻāĻŋ āϏā§āĻĨāĻžāύā§āϝāĻŧ āĻāĻĒāĻŋāĨ¤",
|
||||||
|
"backup_onboarding_description": "āĻāĻĒāύāĻžāϰ āĻĄā§āĻāĻž āϏā§āϰāĻā§āώāĻŋāϤ āϰāĻžāĻāĻžāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ <backblaze-link>3-2-1 āĻŦā§āϝāĻžāĻāĻāĻĒ āĻā§āĻļāϞ</backblaze-link> āϏā§āĻĒāĻžāϰāĻŋāĻļ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ āĻāĻāĻāĻŋ āĻŦāĻŋāϏā§āϤā§āϤ āĻŦā§āϝāĻžāĻāĻāĻĒ āϏāĻŽāĻžāϧāĻžāύā§āϰ āĻāύā§āϝ āĻāĻĒāύāĻžāϰ āĻāĻĒāϞā§āĻĄ āĻāϰāĻž āĻĢāĻā§/āĻāĻŋāĻĄāĻŋāĻāĻā§āϞāĻŋāϰ āĻāĻĒāĻŋ āĻāĻŦāĻ Immich āĻĄāĻžāĻāĻžāĻŦā§āϏ āϰāĻžāĻāĻž āĻāĻāĻŋāϤāĨ¤",
|
||||||
|
"backup_onboarding_footer": "Immich āĻāϰ āĻŦā§āϝāĻžāĻāĻāĻĒ āύā§āĻā§āĻžāϰ āĻŦāĻŋāώā§ā§ āĻāϰāĻ āϤāĻĨā§āϝā§āϰ āĻāύā§āϝ, āĻ
āύā§āĻā§āϰāĻš āĻāϰ⧠<link>āĻĄāĻā§āĻŽā§āύā§āĻā§āĻļāύ</link> āĻĻā§āĻā§āύāĨ¤",
|
||||||
|
"backup_onboarding_parts_title": "ā§Š-⧍-ā§§ āĻŦā§āϝāĻžāĻāĻāĻĒā§āϰ āĻŽāϧā§āϝ⧠āϰāϝāĻŧā§āĻā§:",
|
||||||
|
"backup_onboarding_title": "āĻŦā§āϝāĻžāĻāĻāĻĒ",
|
||||||
"backup_settings": "āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĄāĻžāĻŽā§āĻĒ āϏā§āĻāĻŋāĻāϏ",
|
"backup_settings": "āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĄāĻžāĻŽā§āĻĒ āϏā§āĻāĻŋāĻāϏ",
|
||||||
"backup_settings_description": "āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĄāĻžāĻŽā§āĻĒ āϏā§āĻāĻŋāĻāϏ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰā§āύāĨ¤",
|
"backup_settings_description": "āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĄāĻžāĻŽā§āĻĒ āϏā§āĻāĻŋāĻāϏ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰā§āύāĨ¤",
|
||||||
"cleared_jobs": "{job} āĻāϰ āĻāύā§āϝ jobs āĻāĻžāϞāĻŋ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§",
|
"cleared_jobs": "{job} āĻāϰ āĻāύā§āϝ jobs āĻāĻžāϞāĻŋ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§",
|
||||||
@@ -64,7 +75,7 @@
|
|||||||
"external_library_management": "āĻŦāĻšāĻŋāϰāĻžāĻāϤ āĻā§āϰāύā§āĻĨāĻžāĻāĻžāϰ āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž",
|
"external_library_management": "āĻŦāĻšāĻŋāϰāĻžāĻāϤ āĻā§āϰāύā§āĻĨāĻžāĻāĻžāϰ āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž",
|
||||||
"face_detection": "āĻŽā§āĻ āϏāύāĻžāĻā§āϤāĻāϰāĻŖ",
|
"face_detection": "āĻŽā§āĻ āϏāύāĻžāĻā§āϤāĻāϰāĻŖ",
|
||||||
"face_detection_description": "āĻŽā§āĻļāĻŋāύ āϞāĻžāϰā§āύāĻŋāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻ
ā§āϝāĻžāϏā§āĻā§ āĻĨāĻžāĻāĻž āĻŽā§āĻ/āĻā§āĻšāĻžāϰāĻž āĻā§āϞāĻŋ āϏāύāĻžāĻā§āϤ āĻāϰā§āύāĨ¤ āĻāĻŋāĻĄāĻŋāĻ āĻā§āϞāĻŋāϰ āĻāύā§āϝ, āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰāĻž āĻšāϝāĻŧāĨ¤ \"āϰāĻŋāĻĢā§āϰā§āĻļ\" (āĻĒā§āύāϰāĻžāϝāĻŧ) āϏāĻŽāϏā§āϤ āĻ
ā§āϝāĻžāϏā§āĻ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻž āĻāϰā§āĨ¤ \"āϰāĻŋāϏā§āĻ\" āĻāϰāĻžāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻ
āϤāĻŋāϰāĻŋāĻā§āϤāĻāĻžāĻŦā§ āϏāĻŽāϏā§āϤ āĻŦāϰā§āϤāĻŽāĻžāύ āĻŽā§āĻā§āϰ āĻĄā§āĻāĻž āϏāĻžāĻĢ āĻāϰā§āĨ¤ \"āĻ
āύā§āĻĒāϏā§āĻĨāĻŋāϤ\" āĻ
ā§āϝāĻžāϏā§āĻāĻā§āϞāĻŋāĻā§ āϏāĻžāϰāĻŋāĻŦāĻĻā§āϧ āĻāϰ⧠āϝāĻž āĻāĻāύāĻ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻž āĻāϰāĻž āĻšāϝāĻŧāύāĻŋāĨ¤ āϏāύāĻžāĻā§āϤ āĻāϰāĻž āĻŽā§āĻāĻā§āϞāĻŋāĻā§ āĻĢā§āϏāĻŋāϝāĻŧāĻžāϞ āϰāĻŋāĻāĻāύāĻŋāĻļāύā§āϰ āĻāύā§āϝ āϏāĻžāϰāĻŋāĻŦāĻĻā§āϧ āĻāϰāĻž āĻšāĻŦā§, āĻĢā§āϏāĻŋāϝāĻŧāĻžāϞ āĻĄāĻŋāĻā§āĻāĻļāύ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻšāĻāϝāĻŧāĻžāϰ āĻĒāϰā§, āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻŦāĻž āύāϤā§āύ āĻŦā§āϝāĻā§āϤāĻŋāĻĻā§āϰ āĻŽāϧā§āϝ⧠āĻā§āώā§āĻ ā§āĻŦāĻĻā§āϧ āĻāϰā§āĨ¤",
|
"face_detection_description": "āĻŽā§āĻļāĻŋāύ āϞāĻžāϰā§āύāĻŋāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻ
ā§āϝāĻžāϏā§āĻā§ āĻĨāĻžāĻāĻž āĻŽā§āĻ/āĻā§āĻšāĻžāϰāĻž āĻā§āϞāĻŋ āϏāύāĻžāĻā§āϤ āĻāϰā§āύāĨ¤ āĻāĻŋāĻĄāĻŋāĻ āĻā§āϞāĻŋāϰ āĻāύā§āϝ, āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰāĻž āĻšāϝāĻŧāĨ¤ \"āϰāĻŋāĻĢā§āϰā§āĻļ\" (āĻĒā§āύāϰāĻžāϝāĻŧ) āϏāĻŽāϏā§āϤ āĻ
ā§āϝāĻžāϏā§āĻ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻž āĻāϰā§āĨ¤ \"āϰāĻŋāϏā§āĻ\" āĻāϰāĻžāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻ
āϤāĻŋāϰāĻŋāĻā§āϤāĻāĻžāĻŦā§ āϏāĻŽāϏā§āϤ āĻŦāϰā§āϤāĻŽāĻžāύ āĻŽā§āĻā§āϰ āĻĄā§āĻāĻž āϏāĻžāĻĢ āĻāϰā§āĨ¤ \"āĻ
āύā§āĻĒāϏā§āĻĨāĻŋāϤ\" āĻ
ā§āϝāĻžāϏā§āĻāĻā§āϞāĻŋāĻā§ āϏāĻžāϰāĻŋāĻŦāĻĻā§āϧ āĻāϰ⧠āϝāĻž āĻāĻāύāĻ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻž āĻāϰāĻž āĻšāϝāĻŧāύāĻŋāĨ¤ āϏāύāĻžāĻā§āϤ āĻāϰāĻž āĻŽā§āĻāĻā§āϞāĻŋāĻā§ āĻĢā§āϏāĻŋāϝāĻŧāĻžāϞ āϰāĻŋāĻāĻāύāĻŋāĻļāύā§āϰ āĻāύā§āϝ āϏāĻžāϰāĻŋāĻŦāĻĻā§āϧ āĻāϰāĻž āĻšāĻŦā§, āĻĢā§āϏāĻŋāϝāĻŧāĻžāϞ āĻĄāĻŋāĻā§āĻāĻļāύ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻšāĻāϝāĻŧāĻžāϰ āĻĒāϰā§, āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻŦāĻž āύāϤā§āύ āĻŦā§āϝāĻā§āϤāĻŋāĻĻā§āϰ āĻŽāϧā§āϝ⧠āĻā§āώā§āĻ ā§āĻŦāĻĻā§āϧ āĻāϰā§āĨ¤",
|
||||||
"facial_recognition_job_description": "āĻļāύāĻžāĻā§āϤ āĻāϰāĻž āĻŽā§āĻāĻā§āϞāĻŋāĻā§ āĻŽāĻžāύā§āώā§āϰ āĻŽāϧā§āϝ⧠āĻā§āώā§āĻ ā§āĻā§āĻā§āϤ āĻāϰā§āύāĨ¤ āĻŽā§āĻ āϏāύāĻžāĻā§āϤāĻāϰāĻŖ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻšāĻāϝāĻŧāĻžāϰ āĻĒāϰ⧠āĻāĻ āϧāĻžāĻĒāĻāĻŋ āĻāϞā§āĨ¤ \"āϰāĻŋāϏā§āĻ\" (āĻĒā§āύāϰāĻžāϝāĻŧ) āϏāĻŽāϏā§āϤ āĻŽā§āĻāĻā§ āĻā§āϞāĻžāϏā§āĻāĻžāϰ āĻāϰā§āĨ¤ \"āĻ
āύā§āĻĒāϏā§āĻĨāĻŋāϤ\" āĻŽā§āĻāĻā§āϞāĻŋāĻā§ āϏāĻžāϰāĻŋāϤ⧠āϰāĻžāĻā§ āϝā§āĻāĻžāύ⧠āĻā§āύāĻ āĻŦā§āϝāĻā§āϤāĻŋāĻā§ āĻŦāϰāĻžāĻĻā§āĻĻ āĻāϰāĻž āĻšāϝāĻŧāύāĻŋāĨ¤",
|
"facial_recognition_job_description": "āĻļāύāĻžāĻā§āϤ āĻāϰāĻž āĻŽā§āĻāĻā§āϞāĻŋāĻā§ āĻŽāĻžāύā§āώā§āϰ āĻŽāϧā§āϝ⧠āĻā§āώā§āĻ ā§āĻā§āĻā§āϤ/āĻā§āϰā§āĻĒ āĻāϰā§āύāĨ¤ āĻŽā§āĻ āϏāύāĻžāĻā§āϤāĻāϰāĻŖ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻšāĻāϝāĻŧāĻžāϰ āĻĒāϰ⧠āĻāĻ āϧāĻžāĻĒāĻāĻŋ āĻāϞā§āĨ¤ \"āϰāĻŋāϏā§āĻ\" (āĻĒā§āύāϰāĻžāϝāĻŧ) āϏāĻŽāϏā§āϤ āĻŽā§āĻāĻā§ āĻā§āϞāĻžāϏā§āĻāĻžāϰ āĻāϰā§āĨ¤ \"āĻ
āύā§āĻĒāϏā§āĻĨāĻŋāϤ/āĻŽāĻŋāϏāĻŋāĻ\" āĻŽā§āĻāĻā§āϞāĻŋāĻā§ āϏāĻžāϰāĻŋāϤ⧠āϰāĻžāĻā§ āϝā§āĻā§āϞ⧠āĻā§āύāĻ āĻŦā§āϝāĻā§āϤāĻŋāĻā§ āĻāϏāĻžāĻāύ/āĻŦāϰāĻžāĻĻā§āĻĻ āĻāϰāĻž āĻšāϝāĻŧāύāĻŋāĨ¤",
|
||||||
"failed_job_command": "āĻāĻŽāĻžāύā§āĻĄ {command} āĻāĻžāĻā§āϰ āĻāύā§āϝ āĻŦā§āϝāϰā§āĻĨ āĻšāϝāĻŧā§āĻā§: {job}",
|
"failed_job_command": "āĻāĻŽāĻžāύā§āĻĄ {command} āĻāĻžāĻā§āϰ āĻāύā§āϝ āĻŦā§āϝāϰā§āĻĨ āĻšāϝāĻŧā§āĻā§: {job}",
|
||||||
"force_delete_user_warning": "āϏāϤāϰā§āĻāϤāĻž: āĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻāĻŦāĻ āϏāĻŽāϏā§āϤ āϏāĻŽā§āĻĒāĻĻ āĻ
āĻŦāĻŋāϞāĻŽā§āĻŦā§ āϏāϰāĻŋāϝāĻŧā§ āĻĢā§āϞāĻŦā§āĨ¤ āĻāĻāĻŋ āĻĒā§āϰā§āĻŦāĻžāĻŦāϏā§āĻĨāĻžāϝāĻŧ āĻĢā§āϰāĻžāύ⧠āϝāĻžāĻŦā§ āύāĻž āĻāĻŦāĻ āĻĢāĻžāĻāϞāĻā§āϞāĻŋ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰāĻž āϝāĻžāĻŦā§ āύāĻžāĨ¤",
|
"force_delete_user_warning": "āϏāϤāϰā§āĻāϤāĻž: āĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻāĻŦāĻ āϏāĻŽāϏā§āϤ āϏāĻŽā§āĻĒāĻĻ āĻ
āĻŦāĻŋāϞāĻŽā§āĻŦā§ āϏāϰāĻŋāϝāĻŧā§ āĻĢā§āϞāĻŦā§āĨ¤ āĻāĻāĻŋ āĻĒā§āϰā§āĻŦāĻžāĻŦāϏā§āĻĨāĻžāϝāĻŧ āĻĢā§āϰāĻžāύ⧠āϝāĻžāĻŦā§ āύāĻž āĻāĻŦāĻ āĻĢāĻžāĻāϞāĻā§āϞāĻŋ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰāĻž āϝāĻžāĻŦā§ āύāĻžāĨ¤",
|
||||||
"image_format": "āĻĢāϰāĻŽā§āϝāĻžāĻ",
|
"image_format": "āĻĢāϰāĻŽā§āϝāĻžāĻ",
|
||||||
@@ -75,9 +86,9 @@
|
|||||||
"image_fullsize_quality_description": "āĻĒā§āϰā§āĻŖ-āĻāĻāĻžāϰā§āϰ āĻāĻŦāĻŋāϰ āĻŽāĻžāύ ā§§-ā§§ā§Ļā§ĻāĨ¤ āĻāĻā§āĻāϤāϰ āĻšāϞ⧠āĻāĻžāϞā§, āĻāĻŋāύā§āϤ⧠āĻāϰāĻ āĻŦāĻĄāĻŧ āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻšāϝāĻŧāĨ¤",
|
"image_fullsize_quality_description": "āĻĒā§āϰā§āĻŖ-āĻāĻāĻžāϰā§āϰ āĻāĻŦāĻŋāϰ āĻŽāĻžāύ ā§§-ā§§ā§Ļā§ĻāĨ¤ āĻāĻā§āĻāϤāϰ āĻšāϞ⧠āĻāĻžāϞā§, āĻāĻŋāύā§āϤ⧠āĻāϰāĻ āĻŦāĻĄāĻŧ āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻšāϝāĻŧāĨ¤",
|
||||||
"image_fullsize_title": "āĻĒā§āϰā§āĻŖ-āĻāĻāĻžāϰā§āϰ āĻāĻŋāϤā§āϰ āϏā§āĻāĻŋāĻāϏ",
|
"image_fullsize_title": "āĻĒā§āϰā§āĻŖ-āĻāĻāĻžāϰā§āϰ āĻāĻŋāϤā§āϰ āϏā§āĻāĻŋāĻāϏ",
|
||||||
"image_prefer_embedded_preview": "āĻāĻŽā§āĻŦā§āĻĄ āĻāϰāĻž āĻĒā§āϰāĻŋāĻāĻŋāĻ āĻĒāĻāύā§āĻĻ āĻāϰā§āύ",
|
"image_prefer_embedded_preview": "āĻāĻŽā§āĻŦā§āĻĄ āĻāϰāĻž āĻĒā§āϰāĻŋāĻāĻŋāĻ āĻĒāĻāύā§āĻĻ āĻāϰā§āύ",
|
||||||
"image_prefer_embedded_preview_setting_description": "āĻāĻŦāĻŋ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻžāĻāϰāĻŖā§āϰ āĻāύā§āϝ āĻāĻŦāĻ āϝāĻāύāĻ āĻāĻĒāϞāĻŦā§āϧ āĻĨāĻžāĻāĻŦā§ āϤāĻāύ RAW āĻĢāĻā§āϤ⧠āĻāĻŽāĻŦā§āĻĄā§āĻĄ āĻĒā§āϰāĻŋāĻāĻŋāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤ āĻāĻāĻŋ āĻāĻŋāĻā§ āĻāĻŦāĻŋāϰ āĻāύā§āϝ āĻāϰāĻ āϏāĻ āĻŋāĻ āϰāĻ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻĒāĻžāϰā§, āϤāĻŦā§ āĻĒā§āϰāĻŋāĻāĻŋāĻāϝāĻŧā§āϰ āĻŽāĻžāύ āĻā§āϝāĻžāĻŽā§āϰāĻž-āύāĻŋāϰā§āĻāϰ āĻāĻŦāĻ āĻāĻŦāĻŋāϤ⧠āĻāϰāĻ āĻāĻŽā§āĻĒā§āϰā§āĻļāύ āĻāϰā§āĻāĻŋāĻĢā§āϝāĻžāĻā§āĻ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤",
|
"image_prefer_embedded_preview_setting_description": "āϝāĻĻāĻŋ āĻĒāĻžāĻā§āĻž āϝāĻžā§, RAW āĻāĻŦāĻŋāϰ āĻā§āϤāϰ⧠āĻĨāĻžāĻāĻž āĻĒā§āϰāĻŋāĻāĻŋāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤ āĻāϤ⧠āĻāĻŋāĻā§ āĻāĻŦāĻŋāϰ āϰāĻ āĻāϰāĻ āϏāĻ āĻŋāĻ āĻĻā§āĻāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§, āϤāĻŦā§ āĻŽāĻžāύ āĻā§āϝāĻžāĻŽā§āϰāĻžāϰ āĻāĻĒāϰ āύāĻŋāϰā§āĻāϰ āĻāϰ⧠āĻāĻŦāĻ āĻāĻŦāĻŋāϤ⧠āĻŦāĻžā§āϤāĻŋ āĻāĻŽāĻĒā§āϰā§āĻļāύ āĻāϰā§āĻāĻŋāĻĢā§āϝāĻžāĻā§āĻ āĻĻā§āĻāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤",
|
||||||
"image_prefer_wide_gamut": "āĻĒā§āϰāĻļāϏā§āϤ āĻĒāϰāĻŋāϏāϰ āĻĒāĻāύā§āĻĻ āĻāϰā§āύ",
|
"image_prefer_wide_gamut": "āĻĒā§āϰāĻļāϏā§āϤ āĻĒāϰāĻŋāϏāϰ āĻĒāĻāύā§āĻĻ āĻāϰā§āύ",
|
||||||
"image_prefer_wide_gamut_setting_description": "āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞā§āϰ āĻāύā§āϝ āĻĄāĻŋāϏāĻĒā§āϞ⧠P3 āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤ āĻāĻāĻŋ āĻĒā§āϰāĻļāϏā§āϤ āϰāĻā§āϰ āϏā§āĻĨāĻžāύ āϏāĻš āĻāĻŦāĻŋāϰ āĻĒā§āϰāĻžāĻŖāĻŦāύā§āϤāϤāĻž āĻāϰāĻ āĻāĻžāϞāĻāĻžāĻŦā§ āϏāĻāϰāĻā§āώāĻŖ āĻāϰā§, āϤāĻŦā§ āĻĒā§āϰāĻžāύ⧠āĻŦā§āϰāĻžāĻāĻāĻžāϰ āϏāĻāϏā§āĻāϰāĻŖ āϏāĻš āĻĒā§āϰāĻžāύ⧠āĻĄāĻŋāĻāĻžāĻāϏāĻā§āϞāĻŋāϤ⧠āĻāĻŦāĻŋāĻā§āϞāĻŋ āĻāĻŋāύā§āύāĻāĻžāĻŦā§ āĻĒā§āϰāĻĻāϰā§āĻļāĻŋāϤ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ āϰāĻā§āϰ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāĻĄāĻŧāĻžāϤ⧠sRGB āĻāĻŦāĻŋāĻā§āϞāĻŋāĻā§ sRGB āĻšāĻŋāϏāĻžāĻŦā§ āϰāĻžāĻāĻž āĻšāϝāĻŧāĨ¤",
|
"image_prefer_wide_gamut_setting_description": "āĻĨāĻžāĻŽā§āĻŦāύā§āĻāϞā§āϰ āĻāύā§āϝ Display P3 āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤ āĻāĻāĻŋ āĻā§āĻžāĻāĻĄ āĻāĻžāϞāĻžāϰāϏā§āĻĒā§āϏ āĻāĻŦāĻŋāϰ āĻāĻā§āĻā§āĻŦāϞāϤāĻž āĻ āĻĒā§āϰāĻžāĻŖāĻŦāύā§āϤ āϰāĻ āĻāĻžāϞā§āĻāĻžāĻŦā§ āϧāϰ⧠āϰāĻžāĻā§, āϤāĻŦā§ āĻĒā§āϰāύ⧠āĻĄāĻŋāĻāĻžāĻāϏ āĻŦāĻž āĻŦā§āϰāĻžāĻāĻāĻžāϰ⧠āĻāĻŦāĻŋāĻā§āϞ⧠āĻāĻŋāύā§āύāĻāĻžāĻŦā§ āĻĻā§āĻāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤ sRGB āĻāĻŦāĻŋāĻā§āϞ⧠āϰāĻā§āϰ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻā§āĻžāϤ⧠sRGB āĻšāĻŋāϏā§āĻŦā§āĻ āϰāĻžāĻāĻž āĻšāĻŦā§āĨ¤",
|
||||||
"image_preview_description": "āϏā§āĻā§āϰāĻŋāĻĒāĻĄ āĻŽā§āĻāĻžāĻĄā§āĻāĻž āϏāĻš āĻŽāĻžāĻāĻžāϰāĻŋ āĻāĻāĻžāϰā§āϰ āĻāĻŦāĻŋ, āĻāĻāĻāĻŋ āĻāĻāĻ āϏāĻŽā§āĻĒāĻĻ āĻĻā§āĻāĻžāϰ āϏāĻŽāϝāĻŧ āĻāĻŦāĻ āĻŽā§āĻļāĻŋāύ āϞāĻžāϰā§āύāĻŋāĻāϝāĻŧā§āϰ āĻāύā§āϝ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāϝāĻŧ",
|
"image_preview_description": "āϏā§āĻā§āϰāĻŋāĻĒāĻĄ āĻŽā§āĻāĻžāĻĄā§āĻāĻž āϏāĻš āĻŽāĻžāĻāĻžāϰāĻŋ āĻāĻāĻžāϰā§āϰ āĻāĻŦāĻŋ, āĻāĻāĻāĻŋ āĻāĻāĻ āϏāĻŽā§āĻĒāĻĻ āĻĻā§āĻāĻžāϰ āϏāĻŽāϝāĻŧ āĻāĻŦāĻ āĻŽā§āĻļāĻŋāύ āϞāĻžāϰā§āύāĻŋāĻāϝāĻŧā§āϰ āĻāύā§āϝ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāϝāĻŧ",
|
||||||
"image_preview_quality_description": "ā§§-ā§§ā§Ļā§Ļ āĻāϰ āĻŽāϧā§āϝ⧠āĻĒā§āϰāĻŋāĻāĻŋāĻ āĻā§āϝāĻŧāĻžāϞāĻŋāĻāĻŋāĨ¤ āĻŦā§āĻļāĻŋ āĻšāϞ⧠āĻāĻžāϞā§, āĻāĻŋāύā§āϤ⧠āĻŦāĻĄāĻŧ āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻšāϝāĻŧ āĻāĻŦāĻ āĻ
ā§āϝāĻžāĻĒā§āϰ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻžāĻļā§āϞāϤāĻž āĻāĻŽāĻžāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻŽ āĻŽāĻžāύ āϏā§āĻ āĻāϰāϞ⧠āĻŽā§āĻļāĻŋāύ āϞāĻžāϰā§āύāĻŋāĻ āĻā§āϝāĻŧāĻžāϞāĻŋāĻāĻŋāϰ āĻāĻĒāϰ āĻĒā§āϰāĻāĻžāĻŦ āĻĒāĻĄāĻŧāϤ⧠āĻĒāĻžāϰā§āĨ¤",
|
"image_preview_quality_description": "ā§§-ā§§ā§Ļā§Ļ āĻāϰ āĻŽāϧā§āϝ⧠āĻĒā§āϰāĻŋāĻāĻŋāĻ āĻā§āϝāĻŧāĻžāϞāĻŋāĻāĻŋāĨ¤ āĻŦā§āĻļāĻŋ āĻšāϞ⧠āĻāĻžāϞā§, āĻāĻŋāύā§āϤ⧠āĻŦāĻĄāĻŧ āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻšāϝāĻŧ āĻāĻŦāĻ āĻ
ā§āϝāĻžāĻĒā§āϰ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻžāĻļā§āϞāϤāĻž āĻāĻŽāĻžāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻŽ āĻŽāĻžāύ āϏā§āĻ āĻāϰāϞ⧠āĻŽā§āĻļāĻŋāύ āϞāĻžāϰā§āύāĻŋāĻ āĻā§āϝāĻŧāĻžāϞāĻŋāĻāĻŋāϰ āĻāĻĒāϰ āĻĒā§āϰāĻāĻžāĻŦ āĻĒāĻĄāĻŧāϤ⧠āĻĒāĻžāϰā§āĨ¤",
|
||||||
"image_preview_title": "āĻĒā§āϰāĻŋāĻāĻŋāĻ āϏā§āĻāĻŋāĻāϏ",
|
"image_preview_title": "āĻĒā§āϰāĻŋāĻāĻŋāĻ āϏā§āĻāĻŋāĻāϏ",
|
||||||
@@ -91,9 +102,30 @@
|
|||||||
"image_thumbnail_title": "āĻĨāĻžāĻŽā§āĻŦāύā§āϞ āϏā§āĻāĻŋāĻāϏ",
|
"image_thumbnail_title": "āĻĨāĻžāĻŽā§āĻŦāύā§āϞ āϏā§āĻāĻŋāĻāϏ",
|
||||||
"job_concurrency": "{job} āĻāύāĻāĻžāϰā§āύā§āϏāĻŋ",
|
"job_concurrency": "{job} āĻāύāĻāĻžāϰā§āύā§āϏāĻŋ",
|
||||||
"job_created": "Job āϤā§āϰāĻŋ āĻšāϝāĻŧā§āĻā§",
|
"job_created": "Job āϤā§āϰāĻŋ āĻšāϝāĻŧā§āĻā§",
|
||||||
"job_not_concurrency_safe": "āĻāĻ āĻāĻžāĻāĻāĻŋ āϏāĻŽāĻāĻžāϞā§āύ-āύāĻŋāϰāĻžāĻĒāĻĻ āύāϝāĻŧāĨ¤",
|
"job_not_concurrency_safe": "āĻāĻ āĻāĻžāĻāĻāĻŋ āϏāĻŽāĻžāύā§āϤāϰāĻžāϞāĻāĻžāĻŦā§ āĻāĻžāϞāĻžāύ⧠āύāĻŋāϰāĻžāĻĒāĻĻ āύā§",
|
||||||
"job_settings": "āĻāĻžāĻā§āϰ āϏā§āĻāĻŋāĻāϏ",
|
"job_settings": "āĻāĻžāĻā§āϰ āϏā§āĻāĻŋāĻāϏ",
|
||||||
"job_settings_description": "āĻāĻžāĻā§āϰ āϏāĻŽāĻžāύā§āϤāϰāĻžāϞāϤāĻž āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰā§āύ",
|
"job_settings_description": "āĻāĻžāĻā§āϰ āϏāĻŽāĻžāύā§āϤāϰāĻžāϞāϤāĻž āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰā§āύ",
|
||||||
"job_status": "āĻāĻžāĻāϰāĻŋāϰ āĻ
āĻŦāϏā§āĻĨāĻž"
|
"job_status": "āĻāĻžāĻāϰāĻŋāϰ āĻ
āĻŦāϏā§āĻĨāĻž",
|
||||||
|
"jobs_delayed": "{jobCount, plural, other {# āĻŦāĻŋāϞāĻŽā§āĻŦāĻŋāϤ}}",
|
||||||
|
"jobs_failed": "{jobCount, plural, other {# āĻŦā§āϝāϰā§āĻĨ}}",
|
||||||
|
"library_created": "āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āϤā§āϰāĻŋ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§āĻ {library}",
|
||||||
|
"library_deleted": "āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āĻŽā§āĻā§ āĻĢā§āϞāĻž āĻšāϝāĻŧā§āĻā§",
|
||||||
|
"library_import_path_description": "āĻāĻŽā§āĻĒā§āϰā§āĻ/āϝā§āĻ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻĢā§āϞā§āĻĄāĻžāϰ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰā§āύāĨ¤ āϏāĻžāĻŦāĻĢā§āϞā§āĻĄāĻžāϰ āϏāĻš āĻāĻ āĻĢā§āϞā§āĻĄāĻžāϰāĻāĻŋ āĻāĻŦāĻŋ āĻāĻŦāĻ āĻāĻŋāĻĄāĻŋāĻāϰ āĻāύā§āϝ āϏā§āĻā§āϝāĻžāύ āĻāϰāĻž āĻšāĻŦā§āĨ¤",
|
||||||
|
"library_scanning": "āĻĒāϰā§āϝāĻžāϝāĻŧāĻā§āϰāĻŽāĻŋāĻ āϏā§āĻā§āϝāĻžāύāĻŋāĻ",
|
||||||
|
"library_scanning_description": "āĻĒāϰā§āϝāĻžāϝāĻŧāĻā§āϰāĻŽāĻŋāĻ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āϏā§āĻā§āϝāĻžāύāĻŋāĻ āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰā§āύ",
|
||||||
|
"library_scanning_enable_description": "āĻĒāϰā§āϝāĻžāϝāĻŧāĻā§āϰāĻŽāĻŋāĻ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āϏā§āĻā§āϝāĻžāύāĻŋāĻ āϏāĻā§āώāĻŽ āĻāϰā§āύ",
|
||||||
|
"library_settings": "āĻŦāĻšāĻŋāϰāĻžāĻāϤ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ",
|
||||||
|
"library_settings_description": "āĻŦāĻšāĻŋāϰāĻžāĻāϤ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āϏā§āĻāĻŋāĻāϏ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰā§āύ",
|
||||||
|
"library_tasks_description": "āύāϤā§āύ āĻāĻŦāĻ/āĻ
āĻĨāĻŦāĻž āĻĒāϰāĻŋāĻŦāϰā§āϤāĻŋāϤ āϏāĻŽā§āĻĒāĻĻā§āϰ āĻāύā§āϝ āĻŦāĻšāĻŋāϰāĻžāĻāϤ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āϏā§āĻā§āϝāĻžāύ āĻāϰā§āύ",
|
||||||
|
"library_watching_enable_description": "āĻĢāĻžāĻāϞ āĻĒāϰāĻŋāĻŦāϰā§āϤāύā§āϰ āĻāύā§āϝ āĻŦāĻšāĻŋāϰāĻžāĻāϤ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋāĻā§āϞāĻŋ āĻĻā§āĻā§āύ",
|
||||||
|
"library_watching_settings": "āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āĻĻā§āĻāĻž (āĻĒāϰā§āĻā§āώāĻžāĻŽā§āϞāĻ)",
|
||||||
|
"library_watching_settings_description": "āĻĒāϰāĻŋāĻŦāϰā§āϤāĻŋāϤ āĻĢāĻžāĻāϞāĻā§āϞāĻŋāϰ āĻāύā§āϝ āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧāĻāĻžāĻŦā§ āύāĻāϰ āϰāĻžāĻā§āύ",
|
||||||
|
"logging_enable_description": "āϞāĻāĻŋāĻ āĻāύāĻžāĻŦāϞ/āϏāĻā§āώāĻŽ āĻāϰā§āύ",
|
||||||
|
"logging_level_description": "āϏāĻā§āϰāĻŋāϝāĻŧ āĻĨāĻžāĻāĻžāĻāĻžāϞā§āύ, āĻā§āύ āϞāĻ āϏā§āϤāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤",
|
||||||
|
"logging_settings": "āϞāĻāĻŋāĻ",
|
||||||
|
"machine_learning_clip_model": "CLIP āĻŽāĻĄā§āϞ",
|
||||||
|
"machine_learning_clip_model_description": "<link>āĻāĻāĻžāύā§</link> āϤāĻžāϞāĻŋāĻāĻžāĻā§āĻā§āϤ āĻāĻāĻāĻŋ CLIP āĻŽāĻĄā§āϞā§āϰ āύāĻžāĻŽāĨ¤ āĻŽāύ⧠āϰāĻžāĻāĻŦā§āύ, āĻŽāĻĄā§āϞ āĻĒāϰāĻŋāĻŦāϰā§āϤāύā§āϰ āĻĒāϰ āϏāĻŦ āĻāĻŦāĻŋāϰ āĻāύā§āϝ āĻ
āĻŦāĻļā§āϝāĻ âSmart Searchâ āĻāĻžāĻāĻāĻŋ āĻāĻŦāĻžāϰ āĻāĻžāϞāĻžāϤ⧠āĻšāĻŦā§āĨ¤",
|
||||||
|
"machine_learning_duplicate_detection": "āĻĒā§āύāϰāĻžāĻŦā§āϤā§āϤāĻŋ āϏāύāĻžāĻā§āϤāĻāϰāĻŖ",
|
||||||
|
"machine_learning_duplicate_detection_enabled": "āĻĒā§āύāϰāĻžāĻŦā§āϤā§āϤāĻŋ āĻļāύāĻžāĻā§āϤāĻāϰāĻŖ āĻāĻžāϞ⧠āĻāϰā§āύ"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user