Compare commits
30 Commits
feat-no-th
...
refactor/t
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
53aced666e | ||
|
|
6c9d506c74 | ||
|
|
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 |
3
.github/workflows/fix-format.yml
vendored
3
.github/workflows/fix-format.yml
vendored
@@ -28,6 +28,9 @@ jobs:
|
|||||||
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:
|
||||||
|
|||||||
13
.github/workflows/org-checks.yml
vendored
13
.github/workflows/org-checks.yml
vendored
@@ -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
|
|
||||||
12
.github/workflows/org-pr-require-conventional-commit.yml
vendored
Normal file
12
.github/workflows/org-pr-require-conventional-commit.yml
vendored
Normal file
@@ -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
|
||||||
15
.github/workflows/org-zizmor.yml
vendored
Normal file
15
.github/workflows/org-zizmor.yml
vendored
Normal file
@@ -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'
|
|
||||||
27
.github/workflows/static_analysis.yml
vendored
27
.github/workflows/static_analysis.yml
vendored
@@ -106,30 +106,3 @@ jobs:
|
|||||||
# 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@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
|
||||||
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@2d92b76c45b91eb80fc44c74ce3fce0ee94e8f9d # v3.30.0
|
|
||||||
with:
|
|
||||||
sarif_file: results.sarif
|
|
||||||
category: zizmor
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@immich/cli",
|
"name": "@immich/cli",
|
||||||
"version": "2.2.89",
|
"version": "2.2.90",
|
||||||
"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",
|
||||||
@@ -20,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.18.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",
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ services:
|
|||||||
user: '${UID:-0}:${GID:-0}'
|
user: '${UID:-0}:${GID:-0}'
|
||||||
build:
|
build:
|
||||||
context: ../
|
context: ../
|
||||||
dockerfile: server/Dockerfile
|
dockerfile: server/Dockerfile.dev
|
||||||
target: dev
|
target: dev
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
volumes:
|
volumes:
|
||||||
@@ -85,7 +85,7 @@ services:
|
|||||||
user: '${UID:-0}:${GID:-0}'
|
user: '${UID:-0}:${GID:-0}'
|
||||||
build:
|
build:
|
||||||
context: ../
|
context: ../
|
||||||
dockerfile: server/Dockerfile
|
dockerfile: server/Dockerfile.dev
|
||||||
target: dev
|
target: dev
|
||||||
command: ['immich-web']
|
command: ['immich-web']
|
||||||
env_file:
|
env_file:
|
||||||
@@ -149,7 +149,7 @@ services:
|
|||||||
|
|
||||||
database:
|
database:
|
||||||
container_name: immich_postgres
|
container_name: immich_postgres
|
||||||
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:8d292bdb796aa58bbbaa47fe971c8516f6f57d6a47e7172e62754feb6ed4e7b0
|
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:c44be5f2871c59362966d71eab4268170eb6f5653c0e6170184e72b38ffdf107
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ services:
|
|||||||
|
|
||||||
database:
|
database:
|
||||||
container_name: immich_postgres
|
container_name: immich_postgres
|
||||||
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:8d292bdb796aa58bbbaa47fe971c8516f6f57d6a47e7172e62754feb6ed4e7b0
|
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:c44be5f2871c59362966d71eab4268170eb6f5653c0e6170184e72b38ffdf107
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ services:
|
|||||||
|
|
||||||
database:
|
database:
|
||||||
container_name: immich_postgres
|
container_name: immich_postgres
|
||||||
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:8d292bdb796aa58bbbaa47fe971c8516f6f57d6a47e7172e62754feb6ed4e7b0
|
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}
|
||||||
|
|||||||
@@ -110,6 +110,16 @@ const projects: CommunityProjectProps[] = [
|
|||||||
description: 'A tiny, zero-login web app for collecting photos/videos from anyone into your Immich server.',
|
description: 'A tiny, zero-login web app for collecting photos/videos from anyone into your Immich server.',
|
||||||
url: 'https://github.com/Nasogaa/immich-drop',
|
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 {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
4
docs/static/archived-versions.json
vendored
4
docs/static/archived-versions.json
vendored
@@ -1,4 +1,8 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"label": "v1.142.1",
|
||||||
|
"url": "https://v1.142.1.archive.immich.app"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"label": "v1.142.0",
|
"label": "v1.142.0",
|
||||||
"url": "https://v1.142.0.archive.immich.app"
|
"url": "https://v1.142.0.archive.immich.app"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "immich-e2e",
|
"name": "immich-e2e",
|
||||||
"version": "1.142.0",
|
"version": "1.142.1",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
"@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.18.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",
|
||||||
|
|||||||
@@ -409,6 +409,7 @@
|
|||||||
"recent-albums": "Нядаўнія альбомы",
|
"recent-albums": "Нядаўнія альбомы",
|
||||||
"recent_searches": "Нядаўнія пошукі",
|
"recent_searches": "Нядаўнія пошукі",
|
||||||
"recently_added": "Нядаўна дададзена",
|
"recently_added": "Нядаўна дададзена",
|
||||||
|
"refresh_faces": "Абнавіць твары",
|
||||||
"remove": "Выдаліць",
|
"remove": "Выдаліць",
|
||||||
"remove_from_album": "Выдаліць з альбома",
|
"remove_from_album": "Выдаліць з альбома",
|
||||||
"remove_from_favorites": "Выдаліць з абраных",
|
"remove_from_favorites": "Выдаліць з абраных",
|
||||||
|
|||||||
@@ -1515,7 +1515,7 @@
|
|||||||
"profile_drawer_client_out_of_date_minor": "Mobile-App ist veraltet. Bitte aktualisiere auf die neueste Minor-Version.",
|
"profile_drawer_client_out_of_date_minor": "Mobile-App ist veraltet. Bitte aktualisiere auf die neueste Minor-Version.",
|
||||||
"profile_drawer_client_server_up_to_date": "Die App- und Server-Versionen sind aktuell",
|
"profile_drawer_client_server_up_to_date": "Die App- und Server-Versionen sind aktuell",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
"profile_drawer_readonly_mode": "Schreibgeschützter Modus aktiviert. Tippe zweimal auf das Benutzer-Avatar-Symbol, um den Modus zu verlassen.",
|
"profile_drawer_readonly_mode": "Schreibgeschützter Modus aktiviert. Halte das Benutzer-Avatar-Symbol gedrückt, um den Modus zu verlassen.",
|
||||||
"profile_drawer_server_out_of_date_major": "Server-Version ist veraltet. Bitte aktualisiere auf die neueste Major-Version.",
|
"profile_drawer_server_out_of_date_major": "Server-Version ist veraltet. Bitte aktualisiere auf die neueste Major-Version.",
|
||||||
"profile_drawer_server_out_of_date_minor": "Server-Version ist veraltet. Bitte aktualisiere auf die neueste Minor-Version.",
|
"profile_drawer_server_out_of_date_minor": "Server-Version ist veraltet. Bitte aktualisiere auf die neueste Minor-Version.",
|
||||||
"profile_image_of_user": "Profilbild von {user}",
|
"profile_image_of_user": "Profilbild von {user}",
|
||||||
@@ -1547,7 +1547,7 @@
|
|||||||
"purchase_per_server": "Pro Server",
|
"purchase_per_server": "Pro Server",
|
||||||
"purchase_per_user": "Pro Benutzer",
|
"purchase_per_user": "Pro Benutzer",
|
||||||
"purchase_remove_product_key": "Produktschlüssel entfernen",
|
"purchase_remove_product_key": "Produktschlüssel entfernen",
|
||||||
"purchase_remove_product_key_prompt": "Sicher, dass der Produktschlüssel entfernt werden soll?",
|
"purchase_remove_product_key_prompt": "Bist Du sicher, dass der Produktschlüssel entfernt werden soll?",
|
||||||
"purchase_remove_server_product_key": "Server-Produktschlüssel entfernen",
|
"purchase_remove_server_product_key": "Server-Produktschlüssel entfernen",
|
||||||
"purchase_remove_server_product_key_prompt": "Sicher, dass der Server-Produktschlüssel entfernt werden soll?",
|
"purchase_remove_server_product_key_prompt": "Sicher, dass der Server-Produktschlüssel entfernt werden soll?",
|
||||||
"purchase_server_description_1": "Für den gesamten Server",
|
"purchase_server_description_1": "Für den gesamten Server",
|
||||||
@@ -1917,6 +1917,8 @@
|
|||||||
"sync_albums_manual_subtitle": "Synchronisiere alle hochgeladenen Videos und Fotos in die ausgewählten Backup-Alben",
|
"sync_albums_manual_subtitle": "Synchronisiere alle hochgeladenen Videos und Fotos in die ausgewählten Backup-Alben",
|
||||||
"sync_local": "Lokal synchronisieren",
|
"sync_local": "Lokal synchronisieren",
|
||||||
"sync_remote": "mit Server synchronisieren",
|
"sync_remote": "mit Server synchronisieren",
|
||||||
|
"sync_status": "Synchronisierungstatus",
|
||||||
|
"sync_status_subtitle": "Synchronisierungssystem anzeigen und bearbeiten",
|
||||||
"sync_upload_album_setting_subtitle": "Erstelle deine ausgewählten Alben in Immich und lade die Fotos und Videos dort hoch",
|
"sync_upload_album_setting_subtitle": "Erstelle deine ausgewählten Alben in Immich und lade die Fotos und Videos dort hoch",
|
||||||
"tag": "Tag",
|
"tag": "Tag",
|
||||||
"tag_assets": "Dateien taggen",
|
"tag_assets": "Dateien taggen",
|
||||||
@@ -1976,6 +1978,7 @@
|
|||||||
"trash_page_select_assets_btn": "Elemente auswählen",
|
"trash_page_select_assets_btn": "Elemente auswählen",
|
||||||
"trash_page_title": "Papierkorb ({count})",
|
"trash_page_title": "Papierkorb ({count})",
|
||||||
"trashed_items_will_be_permanently_deleted_after": "Gelöschte Objekte werden nach {days, plural, one {# Tag} other {# Tagen}} endgültig gelöscht.",
|
"trashed_items_will_be_permanently_deleted_after": "Gelöschte Objekte werden nach {days, plural, one {# Tag} other {# Tagen}} endgültig gelöscht.",
|
||||||
|
"troubleshoot": "Fehler beheben",
|
||||||
"type": "Typ",
|
"type": "Typ",
|
||||||
"unable_to_change_pin_code": "PIN Code konnte nicht geändert werden",
|
"unable_to_change_pin_code": "PIN Code konnte nicht geändert werden",
|
||||||
"unable_to_setup_pin_code": "PIN Code konnte nicht festgelegt werden",
|
"unable_to_setup_pin_code": "PIN Code konnte nicht festgelegt werden",
|
||||||
|
|||||||
@@ -387,8 +387,6 @@
|
|||||||
"admin_password": "Admin Password",
|
"admin_password": "Admin Password",
|
||||||
"administration": "Administration",
|
"administration": "Administration",
|
||||||
"advanced": "Advanced",
|
"advanced": "Advanced",
|
||||||
"advanced_settings_beta_timeline_subtitle": "Try the new app experience",
|
|
||||||
"advanced_settings_beta_timeline_title": "Beta Timeline",
|
|
||||||
"advanced_settings_enable_alternate_media_filter_subtitle": "Use this option to filter media during sync based on alternate criteria. Only try this if you have issues with the app detecting all albums.",
|
"advanced_settings_enable_alternate_media_filter_subtitle": "Use this option to filter media during sync based on alternate criteria. Only try this if you have issues with the app detecting all albums.",
|
||||||
"advanced_settings_enable_alternate_media_filter_title": "[EXPERIMENTAL] Use alternate device album sync filter",
|
"advanced_settings_enable_alternate_media_filter_title": "[EXPERIMENTAL] Use alternate device album sync filter",
|
||||||
"advanced_settings_log_level_title": "Log level: {level}",
|
"advanced_settings_log_level_title": "Log level: {level}",
|
||||||
@@ -1339,6 +1337,8 @@
|
|||||||
"my_albums": "My albums",
|
"my_albums": "My albums",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
"name_or_nickname": "Name or nickname",
|
"name_or_nickname": "Name or nickname",
|
||||||
|
"navigate": "Navigate",
|
||||||
|
"navigate_to_time": "Navigate to Time",
|
||||||
"network_requirement_photos_upload": "Use cellular data to backup photos",
|
"network_requirement_photos_upload": "Use cellular data to backup photos",
|
||||||
"network_requirement_videos_upload": "Use cellular data to backup videos",
|
"network_requirement_videos_upload": "Use cellular data to backup videos",
|
||||||
"network_requirements_updated": "Network requirements changed, resetting backup queue",
|
"network_requirements_updated": "Network requirements changed, resetting backup queue",
|
||||||
@@ -1351,6 +1351,7 @@
|
|||||||
"new_person": "New person",
|
"new_person": "New person",
|
||||||
"new_pin_code": "New PIN code",
|
"new_pin_code": "New PIN code",
|
||||||
"new_pin_code_subtitle": "This is your first time accessing the locked folder. Create a PIN code to securely access this page",
|
"new_pin_code_subtitle": "This is your first time accessing the locked folder. Create a PIN code to securely access this page",
|
||||||
|
"new_timeline": "New Timeline",
|
||||||
"new_user_created": "New user created",
|
"new_user_created": "New user created",
|
||||||
"new_version_available": "NEW VERSION AVAILABLE",
|
"new_version_available": "NEW VERSION AVAILABLE",
|
||||||
"newest_first": "Newest first",
|
"newest_first": "Newest first",
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
"added_to_favorites_count": "Agregado {count, number} a favoritos",
|
"added_to_favorites_count": "Agregado {count, number} a favoritos",
|
||||||
"admin": {
|
"admin": {
|
||||||
"add_exclusion_pattern_description": "Agrega patrones de exclusión. Puedes utilizar los caracteres *, ** y ? (globbing). Ejemplos: para ignorar todos los archivos en cualquier directorio llamado \"Raw\", utiliza \"**/Raw/**\". Para ignorar todos los archivos que terminan en \".tif\", utiliza \"**/*.tif\". Para ignorar una ruta absoluta, utiliza \"/carpeta/a/ignorar/**\".",
|
"add_exclusion_pattern_description": "Agrega patrones de exclusión. Puedes utilizar los caracteres *, ** y ? (globbing). Ejemplos: para ignorar todos los archivos en cualquier directorio llamado \"Raw\", utiliza \"**/Raw/**\". Para ignorar todos los archivos que terminan en \".tif\", utiliza \"**/*.tif\". Para ignorar una ruta absoluta, utiliza \"/carpeta/a/ignorar/**\".",
|
||||||
"admin_user": "Usuario administrativo",
|
"admin_user": "Usuario administrador",
|
||||||
"asset_offline_description": "Este recurso externo de la biblioteca ya no se encuentra en el disco y se ha movido a la papelera. Si el archivo se movió dentro de la biblioteca, comprueba la línea temporal para el nuevo recurso correspondiente. Para restaurar este recurso, asegúrate de que Immich puede acceder a la siguiente ruta de archivo y escanear la biblioteca.",
|
"asset_offline_description": "Este recurso externo de la biblioteca ya no se encuentra en el disco y se ha movido a la papelera. Si el archivo se movió dentro de la biblioteca, comprueba la línea temporal para el nuevo recurso correspondiente. Para restaurar este recurso, asegúrate de que Immich puede acceder a la siguiente ruta de archivo y escanear la biblioteca.",
|
||||||
"authentication_settings": "Parámetros de autenticación",
|
"authentication_settings": "Parámetros de autenticación",
|
||||||
"authentication_settings_description": "Gestionar contraseñas, OAuth y otros parámetros de autenticación",
|
"authentication_settings_description": "Gestionar contraseñas, OAuth y otros parámetros de autenticación",
|
||||||
@@ -1515,7 +1515,7 @@
|
|||||||
"profile_drawer_client_out_of_date_minor": "La app está desactualizada. Por favor actualiza a la última versión menor.",
|
"profile_drawer_client_out_of_date_minor": "La app está desactualizada. Por favor actualiza a la última versión menor.",
|
||||||
"profile_drawer_client_server_up_to_date": "Cliente y Servidor están actualizados",
|
"profile_drawer_client_server_up_to_date": "Cliente y Servidor están actualizados",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
"profile_drawer_readonly_mode": "Modo Solo lectura habilitado. Toque dos veces el ícono del avatar del usuario para salir.",
|
"profile_drawer_readonly_mode": "Modo Solo lectura habilitado. Mantén pulsado el icono del avatar del usuario para salir.",
|
||||||
"profile_drawer_server_out_of_date_major": "El servidor está desactualizado. Por favor actualiza a la última versión principal.",
|
"profile_drawer_server_out_of_date_major": "El servidor está desactualizado. Por favor actualiza a la última versión principal.",
|
||||||
"profile_drawer_server_out_of_date_minor": "El servidor está desactualizado. Por favor actualiza a la última versión menor.",
|
"profile_drawer_server_out_of_date_minor": "El servidor está desactualizado. Por favor actualiza a la última versión menor.",
|
||||||
"profile_image_of_user": "Foto de perfil de {user}",
|
"profile_image_of_user": "Foto de perfil de {user}",
|
||||||
@@ -1917,6 +1917,8 @@
|
|||||||
"sync_albums_manual_subtitle": "Sincroniza todos los videos y fotos subidos con los álbumes seleccionados a respaldar",
|
"sync_albums_manual_subtitle": "Sincroniza todos los videos y fotos subidos con los álbumes seleccionados a respaldar",
|
||||||
"sync_local": "Sincronización Local",
|
"sync_local": "Sincronización Local",
|
||||||
"sync_remote": "Sincronización Remota",
|
"sync_remote": "Sincronización Remota",
|
||||||
|
"sync_status": "Estado de la sincronización",
|
||||||
|
"sync_status_subtitle": "Ver y gestionar el estado de la sincronización",
|
||||||
"sync_upload_album_setting_subtitle": "Crea y sube tus fotos y videos a los álbumes seleccionados en Immich",
|
"sync_upload_album_setting_subtitle": "Crea y sube tus fotos y videos a los álbumes seleccionados en Immich",
|
||||||
"tag": "Etiqueta",
|
"tag": "Etiqueta",
|
||||||
"tag_assets": "Etiquetar activos",
|
"tag_assets": "Etiquetar activos",
|
||||||
@@ -1976,6 +1978,7 @@
|
|||||||
"trash_page_select_assets_btn": "Seleccionar elementos",
|
"trash_page_select_assets_btn": "Seleccionar elementos",
|
||||||
"trash_page_title": "Papelera ({count})",
|
"trash_page_title": "Papelera ({count})",
|
||||||
"trashed_items_will_be_permanently_deleted_after": "Los elementos en la papelera serán eliminados permanentemente tras {days, plural, one {# día} other {# días}}.",
|
"trashed_items_will_be_permanently_deleted_after": "Los elementos en la papelera serán eliminados permanentemente tras {days, plural, one {# día} other {# días}}.",
|
||||||
|
"troubleshoot": "Solucionar problemas",
|
||||||
"type": "Tipo",
|
"type": "Tipo",
|
||||||
"unable_to_change_pin_code": "No se ha podido cambiar el PIN",
|
"unable_to_change_pin_code": "No se ha podido cambiar el PIN",
|
||||||
"unable_to_setup_pin_code": "No se ha podido establecer el PIN",
|
"unable_to_setup_pin_code": "No se ha podido establecer el PIN",
|
||||||
|
|||||||
10
i18n/eu.json
10
i18n/eu.json
@@ -42,6 +42,7 @@
|
|||||||
"authentication_settings_description": "Kudeatu pasahitza, OAuth edo beste segurtasun konfigurazio bat",
|
"authentication_settings_description": "Kudeatu pasahitza, OAuth edo beste segurtasun konfigurazio bat",
|
||||||
"authentication_settings_disable_all": "Seguru zaude saioa hasteko modu guztiak desgaitu nahi dituzula? Saioa hastea guztiz desgaitua izango da.",
|
"authentication_settings_disable_all": "Seguru zaude saioa hasteko modu guztiak desgaitu nahi dituzula? Saioa hastea guztiz desgaitua izango da.",
|
||||||
"authentication_settings_reenable": "Berriro gaitzeko, erabili <link>Server Command</link>.",
|
"authentication_settings_reenable": "Berriro gaitzeko, erabili <link>Server Command</link>.",
|
||||||
|
"background_task_job": "Atzealdeko Lanak",
|
||||||
"backup_onboarding_footer": "Immich-en babes kopiei buruzko informazio gehiago nahi baduzu, mesedez irakurri <link>dokumentazioa</link>.",
|
"backup_onboarding_footer": "Immich-en babes kopiei buruzko informazio gehiago nahi baduzu, mesedez irakurri <link>dokumentazioa</link>.",
|
||||||
"backup_onboarding_title": "Babes Kopiak",
|
"backup_onboarding_title": "Babes Kopiak",
|
||||||
"confirm_delete_library": "Seguru zaude {library} ezabatu nahi duzula?",
|
"confirm_delete_library": "Seguru zaude {library} ezabatu nahi duzula?",
|
||||||
@@ -62,6 +63,15 @@
|
|||||||
"job_created": "Zeregina sortuta",
|
"job_created": "Zeregina sortuta",
|
||||||
"job_settings": "Zereginaren konfigurazioa",
|
"job_settings": "Zereginaren konfigurazioa",
|
||||||
"job_status": "Zereginaren Egoera",
|
"job_status": "Zereginaren Egoera",
|
||||||
|
"logging_enable_description": "Gaitu erregistroak",
|
||||||
|
"logging_level_description": "Erregistroak gaituta daudenean, nolako erregistro maila erabili.",
|
||||||
|
"logging_settings": "Erregistroak",
|
||||||
|
"machine_learning_duplicate_detection": "Bizkoizketa Detekzioa",
|
||||||
|
"machine_learning_duplicate_detection_enabled": "Gaitu bikoizketa detekezioa",
|
||||||
|
"machine_learning_facial_recognition": "Aurpegi-Ezagutza",
|
||||||
|
"machine_learning_facial_recognition_description": "Detektatu, ezagutu eta aurpegiak banatu argazkietan",
|
||||||
|
"machine_learning_facial_recognition_model": "Aurpegi-Ezagutza eredua",
|
||||||
|
"machine_learning_facial_recognition_setting": "Aurpegi-Ezagutza Gaitu",
|
||||||
"machine_learning_smart_search_enabled": "Gaitu bilaketa arina",
|
"machine_learning_smart_search_enabled": "Gaitu bilaketa arina",
|
||||||
"manage_log_settings": "Kudeatu erregistroen konfigurazioa",
|
"manage_log_settings": "Kudeatu erregistroen konfigurazioa",
|
||||||
"map_dark_style": "Beltz estiloa",
|
"map_dark_style": "Beltz estiloa",
|
||||||
|
|||||||
@@ -389,7 +389,7 @@
|
|||||||
"advanced": "Avancé",
|
"advanced": "Avancé",
|
||||||
"advanced_settings_beta_timeline_subtitle": "Essayer la nouvelle application",
|
"advanced_settings_beta_timeline_subtitle": "Essayer la nouvelle application",
|
||||||
"advanced_settings_beta_timeline_title": "Timeline de la béta",
|
"advanced_settings_beta_timeline_title": "Timeline de la béta",
|
||||||
"advanced_settings_enable_alternate_media_filter_subtitle": "Utilisez cette option pour filtrer les média durant la synchronisation avec des critères alternatifs. N'utilisez cela que lorsque l'application n'arrive pas à détecter tout les albums.",
|
"advanced_settings_enable_alternate_media_filter_subtitle": "Utilisez cette option pour filtrer les média durant la synchronisation avec des critères alternatifs. N'utilisez cela que lorsque l'application n'arrive pas à détecter tous les albums.",
|
||||||
"advanced_settings_enable_alternate_media_filter_title": "[EXPÉRIMENTAL] Utiliser le filtre de synchronisation d'album alternatif",
|
"advanced_settings_enable_alternate_media_filter_title": "[EXPÉRIMENTAL] Utiliser le filtre de synchronisation d'album alternatif",
|
||||||
"advanced_settings_log_level_title": "Niveau de journalisation : {level}",
|
"advanced_settings_log_level_title": "Niveau de journalisation : {level}",
|
||||||
"advanced_settings_prefer_remote_subtitle": "Certains appareils sont très lents à charger des miniatures à partir de ressources locales. Activez ce paramètre pour charger des images externes à la place.",
|
"advanced_settings_prefer_remote_subtitle": "Certains appareils sont très lents à charger des miniatures à partir de ressources locales. Activez ce paramètre pour charger des images externes à la place.",
|
||||||
@@ -1964,7 +1964,7 @@
|
|||||||
"total": "Total",
|
"total": "Total",
|
||||||
"total_usage": "Utilisation globale",
|
"total_usage": "Utilisation globale",
|
||||||
"trash": "Corbeille",
|
"trash": "Corbeille",
|
||||||
"trash_action_prompt": "{count} mis à la corbeille",
|
"trash_action_prompt": "{count} média(s) mis à la corbeille",
|
||||||
"trash_all": "Tout supprimer",
|
"trash_all": "Tout supprimer",
|
||||||
"trash_count": "Corbeille {count, number}",
|
"trash_count": "Corbeille {count, number}",
|
||||||
"trash_delete_asset": "Mettre à la corbeille/Supprimer un média",
|
"trash_delete_asset": "Mettre à la corbeille/Supprimer un média",
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
"add_a_location": "Engadir unha ubicación",
|
"add_a_location": "Engadir unha ubicación",
|
||||||
"add_a_name": "Engadir un nome",
|
"add_a_name": "Engadir un nome",
|
||||||
"add_a_title": "Engadir un título",
|
"add_a_title": "Engadir un título",
|
||||||
|
"add_birthday": "Engadir cumpleanos",
|
||||||
"add_endpoint": "Engadir endpoint",
|
"add_endpoint": "Engadir endpoint",
|
||||||
"add_exclusion_pattern": "Engadir patrón de exclusión",
|
"add_exclusion_pattern": "Engadir patrón de exclusión",
|
||||||
"add_import_path": "Engadir ruta de importación",
|
"add_import_path": "Engadir ruta de importación",
|
||||||
@@ -22,10 +23,14 @@
|
|||||||
"add_partner": "Engadir compañeiro/a",
|
"add_partner": "Engadir compañeiro/a",
|
||||||
"add_path": "Engadir ruta",
|
"add_path": "Engadir ruta",
|
||||||
"add_photos": "Engadir fotos",
|
"add_photos": "Engadir fotos",
|
||||||
|
"add_tag": "Engadir etiqueta",
|
||||||
"add_to": "Engadir a…",
|
"add_to": "Engadir a…",
|
||||||
"add_to_album": "Engadir ao álbum",
|
"add_to_album": "Engadir ao álbum",
|
||||||
"add_to_album_bottom_sheet_added": "Engadido a {album}",
|
"add_to_album_bottom_sheet_added": "Engadido a {album}",
|
||||||
"add_to_album_bottom_sheet_already_exists": "Xa está en {album}",
|
"add_to_album_bottom_sheet_already_exists": "Xa está en {album}",
|
||||||
|
"add_to_album_toggle": "Alternar selección para o {album}",
|
||||||
|
"add_to_albums": "Engadir en álbums",
|
||||||
|
"add_to_albums_count": "Engadir a {count} álbums",
|
||||||
"add_to_shared_album": "Engadir ao álbum compartido",
|
"add_to_shared_album": "Engadir ao álbum compartido",
|
||||||
"add_url": "Engadir URL",
|
"add_url": "Engadir URL",
|
||||||
"added_to_archive": "Engadido ao arquivo",
|
"added_to_archive": "Engadido ao arquivo",
|
||||||
@@ -33,6 +38,7 @@
|
|||||||
"added_to_favorites_count": "Engadido {count, number} a favoritos",
|
"added_to_favorites_count": "Engadido {count, number} a favoritos",
|
||||||
"admin": {
|
"admin": {
|
||||||
"add_exclusion_pattern_description": "Engadir patróns de exclusión. Admítense caracteres comodín usando *, ** e ?. Para ignorar todos os ficheiros en calquera directorio chamado \"Raw\", emprega \"**/Raw/**\". Para ignorar todos os ficheiros que rematen en \".tif\", usa \"**/*.tif\". Para ignorar unha ruta absoluta, emprega \"/ruta/a/ignorar/**\".",
|
"add_exclusion_pattern_description": "Engadir patróns de exclusión. Admítense caracteres comodín usando *, ** e ?. Para ignorar todos os ficheiros en calquera directorio chamado \"Raw\", emprega \"**/Raw/**\". Para ignorar todos os ficheiros que rematen en \".tif\", usa \"**/*.tif\". Para ignorar unha ruta absoluta, emprega \"/ruta/a/ignorar/**\".",
|
||||||
|
"admin_user": "Usuario administrador",
|
||||||
"asset_offline_description": "Este activo da biblioteca externa xa non se atopa no disco e moveuse ao lixo. Se o ficheiro se moveu dentro da biblioteca, comproba a túa liña de tempo para o novo activo correspondente. Para restaurar este activo, asegúrate de que Immich poida acceder á ruta do ficheiro a continuación e escanee a biblioteca.",
|
"asset_offline_description": "Este activo da biblioteca externa xa non se atopa no disco e moveuse ao lixo. Se o ficheiro se moveu dentro da biblioteca, comproba a túa liña de tempo para o novo activo correspondente. Para restaurar este activo, asegúrate de que Immich poida acceder á ruta do ficheiro a continuación e escanee a biblioteca.",
|
||||||
"authentication_settings": "Configuración de autenticación",
|
"authentication_settings": "Configuración de autenticación",
|
||||||
"authentication_settings_description": "Xestionar contrasinal, OAuth e outras configuracións de autenticación",
|
"authentication_settings_description": "Xestionar contrasinal, OAuth e outras configuracións de autenticación",
|
||||||
|
|||||||
26
i18n/he.json
26
i18n/he.json
@@ -1093,7 +1093,7 @@
|
|||||||
"haptic_feedback_switch": "אפשר משוב ברטט",
|
"haptic_feedback_switch": "אפשר משוב ברטט",
|
||||||
"haptic_feedback_title": "משוב ברטט",
|
"haptic_feedback_title": "משוב ברטט",
|
||||||
"has_quota": "יש מכסה",
|
"has_quota": "יש מכסה",
|
||||||
"hash_asset": "גיבוב תמונה",
|
"hash_asset": "גבב פריט",
|
||||||
"hashed_assets": "תמונות מגובבות",
|
"hashed_assets": "תמונות מגובבות",
|
||||||
"hashing": "מגבב",
|
"hashing": "מגבב",
|
||||||
"header_settings_add_header_tip": "הוסף כותרת",
|
"header_settings_add_header_tip": "הוסף כותרת",
|
||||||
@@ -1129,7 +1129,7 @@
|
|||||||
"hour": "שעה",
|
"hour": "שעה",
|
||||||
"hours": "שעות",
|
"hours": "שעות",
|
||||||
"id": "מזהה",
|
"id": "מזהה",
|
||||||
"idle": "ממתין",
|
"idle": "במצב סרק",
|
||||||
"ignore_icloud_photos": "התעלם מתמונות iCloud",
|
"ignore_icloud_photos": "התעלם מתמונות iCloud",
|
||||||
"ignore_icloud_photos_description": "תמונות שמאוחסנות ב-iCloud לא יועלו לשרת",
|
"ignore_icloud_photos_description": "תמונות שמאוחסנות ב-iCloud לא יועלו לשרת",
|
||||||
"image": "תמונה",
|
"image": "תמונה",
|
||||||
@@ -1412,6 +1412,8 @@
|
|||||||
"open_the_search_filters": "פתח את מסנני החיפוש",
|
"open_the_search_filters": "פתח את מסנני החיפוש",
|
||||||
"options": "אפשרויות",
|
"options": "אפשרויות",
|
||||||
"or": "או",
|
"or": "או",
|
||||||
|
"organize_into_albums": "ארגן בתוך אלבומים",
|
||||||
|
"organize_into_albums_description": "שים תמונות קיימות בתוך אלבומים באמצעות הגדרות הסנכרון הנוכחיות",
|
||||||
"organize_your_library": "ארגן את הספרייה שלך",
|
"organize_your_library": "ארגן את הספרייה שלך",
|
||||||
"original": "מקורי",
|
"original": "מקורי",
|
||||||
"other": "אחר",
|
"other": "אחר",
|
||||||
@@ -1471,9 +1473,9 @@
|
|||||||
"permission_onboarding_permission_limited": "הרשאה מוגבלת. כדי לתת ליישום לגבות ולנהל את כל אוסף הגלריה שלך, הענק הרשאה לתמונות וסרטונים בהגדרות.",
|
"permission_onboarding_permission_limited": "הרשאה מוגבלת. כדי לתת ליישום לגבות ולנהל את כל אוסף הגלריה שלך, הענק הרשאה לתמונות וסרטונים בהגדרות.",
|
||||||
"permission_onboarding_request": "היישום דורש הרשאה כדי לראות את התמונות והסרטונים שלך.",
|
"permission_onboarding_request": "היישום דורש הרשאה כדי לראות את התמונות והסרטונים שלך.",
|
||||||
"person": "אדם",
|
"person": "אדם",
|
||||||
"person_age_months": "בן {months, plural, one {חודש #} other {# חודשים}}",
|
"person_age_months": "בגיל {months, plural, one {חודש #} other {# חודשים}}",
|
||||||
"person_age_year_months": "בן שנה, {months, plural, one {חודש #} other {# חודשים}}",
|
"person_age_year_months": "בגיל שנה ו{months, plural, one {חודש #} other {# חודשים}}",
|
||||||
"person_age_years": "בן {years, plural, 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": "נראה ששיתפת את התמונות שלך עם כל המשתמשים או שאין לך אף משתמש לשתף איתו.",
|
||||||
@@ -1513,7 +1515,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_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}",
|
||||||
@@ -1552,7 +1554,8 @@
|
|||||||
"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}",
|
"query_asset_id": "שאילתה על מזהה הפריט",
|
||||||
|
"queue_status": "{count} מתוך {total} עומדים בתור",
|
||||||
"rating": "דירוג כוכב",
|
"rating": "דירוג כוכב",
|
||||||
"rating_clear": "נקה דירוג",
|
"rating_clear": "נקה דירוג",
|
||||||
"rating_count": "{count, plural, one {כוכב #} other {# כוכבים}}",
|
"rating_count": "{count, plural, one {כוכב #} other {# כוכבים}}",
|
||||||
@@ -1637,6 +1640,7 @@
|
|||||||
"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": "צפייה בקבצים גדולים",
|
"review_large_files": "צפייה בקבצים גדולים",
|
||||||
@@ -1903,7 +1907,7 @@
|
|||||||
"submit": "שלח",
|
"submit": "שלח",
|
||||||
"success": "בוצע בהצלחה",
|
"success": "בוצע בהצלחה",
|
||||||
"suggestions": "הצעות",
|
"suggestions": "הצעות",
|
||||||
"sunrise_on_the_beach": "Sunrise on the beach (מומלץ לחפש באנגלית לתוצאות טובות יותר)",
|
"sunrise_on_the_beach": "שקיעה בחוף",
|
||||||
"support": "תמיכה",
|
"support": "תמיכה",
|
||||||
"support_and_feedback": "תמיכה & משוב",
|
"support_and_feedback": "תמיכה & משוב",
|
||||||
"support_third_party_description": "התקנת ה-Immich שלך נארזה על ידי צד שלישי. בעיות שאתה חווה עשויות להיגרם על ידי חבילה זו, אז בבקשה תעלה בעיות איתם ראשית כל באמצעות הקישורים למטה.",
|
"support_third_party_description": "התקנת ה-Immich שלך נארזה על ידי צד שלישי. בעיות שאתה חווה עשויות להיגרם על ידי חבילה זו, אז בבקשה תעלה בעיות איתם ראשית כל באמצעות הקישורים למטה.",
|
||||||
@@ -1912,7 +1916,9 @@
|
|||||||
"sync_albums": "סנכרן אלבומים",
|
"sync_albums": "סנכרן אלבומים",
|
||||||
"sync_albums_manual_subtitle": "סנכרן את כל הסרטונים והתמונות שהועלו לאלבומי הגיבוי שנבחרו",
|
"sync_albums_manual_subtitle": "סנכרן את כל הסרטונים והתמונות שהועלו לאלבומי הגיבוי שנבחרו",
|
||||||
"sync_local": "סנכרן מקומי",
|
"sync_local": "סנכרן מקומי",
|
||||||
"sync_remote": "סנכרן מרוחק",
|
"sync_remote": "סנכרן נקודת קצה מרוחקת",
|
||||||
|
"sync_status": "סנכרן מצב",
|
||||||
|
"sync_status_subtitle": "הצג ונהל את מערכת הסנכרון",
|
||||||
"sync_upload_album_setting_subtitle": "צור והעלה תמונות וסרטונים שלך לאלבומים שנבחרו ביישום",
|
"sync_upload_album_setting_subtitle": "צור והעלה תמונות וסרטונים שלך לאלבומים שנבחרו ביישום",
|
||||||
"tag": "תג",
|
"tag": "תג",
|
||||||
"tag_assets": "תיוג תמונות",
|
"tag_assets": "תיוג תמונות",
|
||||||
@@ -1972,6 +1978,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",
|
||||||
@@ -2069,6 +2076,7 @@
|
|||||||
"view_next_asset": "הצג את התמונה הבאה",
|
"view_next_asset": "הצג את התמונה הבאה",
|
||||||
"view_previous_asset": "הצג את התמונה הקודמת",
|
"view_previous_asset": "הצג את התמונה הקודמת",
|
||||||
"view_qr_code": "הצג ברקוד",
|
"view_qr_code": "הצג ברקוד",
|
||||||
|
"view_similar_photos": "הצג תמונות דומות",
|
||||||
"view_stack": "הצג ערימה",
|
"view_stack": "הצג ערימה",
|
||||||
"view_user": "הצג משתמש",
|
"view_user": "הצג משתמש",
|
||||||
"viewer_remove_from_stack": "הסר מערימה",
|
"viewer_remove_from_stack": "הסר מערימה",
|
||||||
|
|||||||
@@ -1515,7 +1515,7 @@
|
|||||||
"profile_drawer_client_out_of_date_minor": "L'applicazione non è aggiornata. Aggiorna all'ultima versione minore.",
|
"profile_drawer_client_out_of_date_minor": "L'applicazione non è aggiornata. Aggiorna all'ultima versione minore.",
|
||||||
"profile_drawer_client_server_up_to_date": "Client e server sono aggiornati",
|
"profile_drawer_client_server_up_to_date": "Client e server sono aggiornati",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
"profile_drawer_readonly_mode": "Modalità di sola lettura abilitata. Tocca due volte l'icona dell'avatar dell'utente per disabilitarla.",
|
"profile_drawer_readonly_mode": "Modalità di sola lettura abilitata. Tieni premuto sull'avatar dell'utente per disabilitarla.",
|
||||||
"profile_drawer_server_out_of_date_major": "Il server non è aggiornato. Aggiorna all'ultima versione principale.",
|
"profile_drawer_server_out_of_date_major": "Il server non è aggiornato. Aggiorna all'ultima versione principale.",
|
||||||
"profile_drawer_server_out_of_date_minor": "Il server non è aggiornato. Aggiorna all'ultima versione minore.",
|
"profile_drawer_server_out_of_date_minor": "Il server non è aggiornato. Aggiorna all'ultima versione minore.",
|
||||||
"profile_image_of_user": "Immagine profilo di {user}",
|
"profile_image_of_user": "Immagine profilo di {user}",
|
||||||
|
|||||||
@@ -1515,7 +1515,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_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} のプロフィール画像",
|
||||||
@@ -1640,6 +1640,7 @@
|
|||||||
"restore_user": "ユーザーを復元",
|
"restore_user": "ユーザーを復元",
|
||||||
"restored_asset": "項目を復元しました",
|
"restored_asset": "項目を復元しました",
|
||||||
"resume": "再開",
|
"resume": "再開",
|
||||||
|
"resume_paused_jobs": "再開: {count, plural, one {# paused job} other {# paused jobs}}",
|
||||||
"retry_upload": "アップロードを再試行",
|
"retry_upload": "アップロードを再試行",
|
||||||
"review_duplicates": "重複を調査",
|
"review_duplicates": "重複を調査",
|
||||||
"review_large_files": "サイズの大きなファイルを見る",
|
"review_large_files": "サイズの大きなファイルを見る",
|
||||||
@@ -1916,6 +1917,8 @@
|
|||||||
"sync_albums_manual_subtitle": "アップロード済みの全ての写真や動画を選択されたバックアップアルバムに同期する",
|
"sync_albums_manual_subtitle": "アップロード済みの全ての写真や動画を選択されたバックアップアルバムに同期する",
|
||||||
"sync_local": "ローカルを同期",
|
"sync_local": "ローカルを同期",
|
||||||
"sync_remote": "リモートを同期",
|
"sync_remote": "リモートを同期",
|
||||||
|
"sync_status": "同期の状態",
|
||||||
|
"sync_status_subtitle": "同期システムを確認・管理",
|
||||||
"sync_upload_album_setting_subtitle": "サーバー上のアルバムの内容を端末上のアルバムと同期します (サーバーにアルバムが無い場合自動で作成されます。また、アップロードされていない写真や動画は同期されません)",
|
"sync_upload_album_setting_subtitle": "サーバー上のアルバムの内容を端末上のアルバムと同期します (サーバーにアルバムが無い場合自動で作成されます。また、アップロードされていない写真や動画は同期されません)",
|
||||||
"tag": "タグ付けする",
|
"tag": "タグ付けする",
|
||||||
"tag_assets": "アセットにタグ付けする",
|
"tag_assets": "アセットにタグ付けする",
|
||||||
@@ -1975,6 +1978,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コードをセットアップできませんでした",
|
||||||
|
|||||||
513
i18n/lt.json
513
i18n/lt.json
@@ -28,13 +28,16 @@
|
|||||||
"add_to_album": "Pridėti į albumą",
|
"add_to_album": "Pridėti į albumą",
|
||||||
"add_to_album_bottom_sheet_added": "Pridėta į {album}",
|
"add_to_album_bottom_sheet_added": "Pridėta į {album}",
|
||||||
"add_to_album_bottom_sheet_already_exists": "Jau yra albume {album}",
|
"add_to_album_bottom_sheet_already_exists": "Jau yra albume {album}",
|
||||||
|
"add_to_album_toggle": "Perjungti pažymėjimus albumui {album}",
|
||||||
|
"add_to_albums": "Pridėti į albumus",
|
||||||
|
"add_to_albums_count": "Pridėti į albumus ({count})",
|
||||||
"add_to_shared_album": "Pridėti į bendrinamą albumą",
|
"add_to_shared_album": "Pridėti į bendrinamą albumą",
|
||||||
"add_url": "Pridėti URL",
|
"add_url": "Pridėti URL",
|
||||||
"added_to_archive": "Pridėta į archyvą",
|
"added_to_archive": "Pridėta į archyvą",
|
||||||
"added_to_favorites": "Pridėta prie mėgstamiausių",
|
"added_to_favorites": "Pridėta prie mėgstamiausių",
|
||||||
"added_to_favorites_count": "{count, plural, one {# pridėtas} few {# pridėti} other {# pridėta}} prie mėgstamiausių",
|
"added_to_favorites_count": "{count, plural, one {# pridėtas} few {# pridėti} other {# pridėta}} prie mėgstamiausių",
|
||||||
"admin": {
|
"admin": {
|
||||||
"add_exclusion_pattern_description": "Pridėti išimčių taisyklęs. Plaikomi simboliai *,**, ir ?. Ignoruoti bet kokius failus bet kuriame aplanke užvadintame \"Raw\", naudokite \"**/RAW/**\". Ignoravimui failų su plėtiniu \".tif\", naudokite \"**/*.tiff\". Aplanko kelio nustatymams, naudokite \"/aplanko/kelias/ignoruoti/**\"",
|
"add_exclusion_pattern_description": "Pridėti išimčių taisykles. Palaikomi simboliai *,**, ir ?. Ignoruoti bet kokius failus bet kuriame aplanke pavadintame \"Raw\", naudokite \"**/RAW/**\". Ignoravimui failų su plėtiniu \".tif\", naudokite \"**/*.tiff\". Aplanko kelio nustatymams, naudokite \"/aplanko/kelias/ignoruoti/**\".",
|
||||||
"admin_user": "Administratorius",
|
"admin_user": "Administratorius",
|
||||||
"asset_offline_description": "Šis išorinės bibliotekos elementas nebepasiekiamas diske ir buvo perkeltas į šiukšliadėžę. Jei failas buvo perkeltas toje pačioje bibliotekoje, laiko skalėje rasite naują atitinkamą elementą. Jei norite šį elementą atkurti, įsitikinkite, kad Immich gali pasiekti failą žemiau nurodytu adresu, ir suvykdykite bibliotekos skenavimą.",
|
"asset_offline_description": "Šis išorinės bibliotekos elementas nebepasiekiamas diske ir buvo perkeltas į šiukšliadėžę. Jei failas buvo perkeltas toje pačioje bibliotekoje, laiko skalėje rasite naują atitinkamą elementą. Jei norite šį elementą atkurti, įsitikinkite, kad Immich gali pasiekti failą žemiau nurodytu adresu, ir suvykdykite bibliotekos skenavimą.",
|
||||||
"authentication_settings": "Autentifikavimo nustatymai",
|
"authentication_settings": "Autentifikavimo nustatymai",
|
||||||
@@ -45,6 +48,10 @@
|
|||||||
"backup_database": "Sukurti duomenų bazės išklotinę",
|
"backup_database": "Sukurti duomenų bazės išklotinę",
|
||||||
"backup_database_enable_description": "Įgalinti duomenų bazės išklotinės",
|
"backup_database_enable_description": "Įgalinti duomenų bazės išklotinės",
|
||||||
"backup_keep_last_amount": "Išsaugomų ankstesnių duomenų bazės išklotinių skaičius",
|
"backup_keep_last_amount": "Išsaugomų ankstesnių duomenų bazės išklotinių skaičius",
|
||||||
|
"backup_onboarding_1_description": "išorinė kopija debesyje arba kitoje fizinėje lokacijoje.",
|
||||||
|
"backup_onboarding_2_description": "vietinės kopijos kituose prietaisuose. Tai apima pagrindinius failus ir jų vietines kopijas.",
|
||||||
|
"backup_onboarding_3_description": "viso jūsų duomenų kopijų, įskaitant originalius failus. Tai apima 1 išorinę ir 2 vietines kopijas.",
|
||||||
|
"backup_onboarding_description": "Jūsų duomenų apsaugojimui rekomenduojama <backblaze-link>3-2-1 atsarginės kopijos strategija</backblaze-link> . Jūs turėtumėte saugoti įkeltų nuotraukų/video bei Immich duomenų bazės kopijas išsamiam atsarginių kopijų sprendimui.",
|
||||||
"backup_onboarding_footer": "Daugiau informacijos apie „Immich“ atsarginių kopijų kūrimą rasite <link>dokumentacijoje</link>.",
|
"backup_onboarding_footer": "Daugiau informacijos apie „Immich“ atsarginių kopijų kūrimą rasite <link>dokumentacijoje</link>.",
|
||||||
"backup_onboarding_parts_title": "3-2-1 atsarginė kopija apima:",
|
"backup_onboarding_parts_title": "3-2-1 atsarginė kopija apima:",
|
||||||
"backup_onboarding_title": "Atsarginės kopijos",
|
"backup_onboarding_title": "Atsarginės kopijos",
|
||||||
@@ -75,7 +82,7 @@
|
|||||||
"image_format_description": "WebP sukuria mažesnius failus nei JPEG, tačiau lėčiau juos apdoroja.",
|
"image_format_description": "WebP sukuria mažesnius failus nei JPEG, tačiau lėčiau juos apdoroja.",
|
||||||
"image_fullsize_description": "Pilno dydžio nuotrauka be meta duomenų naudojama priartinus",
|
"image_fullsize_description": "Pilno dydžio nuotrauka be meta duomenų naudojama priartinus",
|
||||||
"image_fullsize_enabled": "Įgalinti pilno dydžio nuotraukų generavimą",
|
"image_fullsize_enabled": "Įgalinti pilno dydžio nuotraukų generavimą",
|
||||||
"image_fullsize_enabled_description": "Generuoti viso dydžio vaizdą neinternetui pritaikytiems formatams. Kai įjungta parinktis „Pirmenybė įterptai peržiūrai“, įterptosios peržiūros naudojamos tiesiogiai be konvertavimo. Tai neturi įtakos internetui pritaikytiems formatams, pvz., JPEG",
|
"image_fullsize_enabled_description": "Generuoti viso dydžio vaizdą naršyklėms nepritaikytiems formatams. Kai įjungta parinktis „Pirmenybė įterptai peržiūrai“, įterptosios peržiūros naudojamos tiesiogiai be konvertavimo. Tai neturi įtakos internetui pritaikytiems formatams, pvz., JPEG.",
|
||||||
"image_fullsize_quality_description": "Pilno dydžio nuotraukų kokybė 1-100. Didesnė yra geresnė, tačiau sukuria didesniu failus.",
|
"image_fullsize_quality_description": "Pilno dydžio nuotraukų kokybė 1-100. Didesnė yra geresnė, tačiau sukuria didesniu failus.",
|
||||||
"image_fullsize_title": "Pilno dydžio nuotraukų Nustatymai",
|
"image_fullsize_title": "Pilno dydžio nuotraukų Nustatymai",
|
||||||
"image_prefer_embedded_preview": "Pageidautinai rodyti įterptą peržiūrą",
|
"image_prefer_embedded_preview": "Pageidautinai rodyti įterptą peržiūrą",
|
||||||
@@ -99,8 +106,8 @@
|
|||||||
"job_settings": "Užduočių nustatymai",
|
"job_settings": "Užduočių nustatymai",
|
||||||
"job_settings_description": "Keisti užduočių lygiagretumą",
|
"job_settings_description": "Keisti užduočių lygiagretumą",
|
||||||
"job_status": "Užduočių būsenos",
|
"job_status": "Užduočių būsenos",
|
||||||
"jobs_delayed": "{jobCount, plural, other {# delayed}}",
|
"jobs_delayed": "{jobCount, plural, one {# atidėtas} few {# atidėti} other {# atidėtų}}",
|
||||||
"jobs_failed": "{jobCount, plural, other {# failed}}",
|
"jobs_failed": "{jobCount, plural, other {# nepavyko}}",
|
||||||
"library_created": "Sukurta biblioteka: {library}",
|
"library_created": "Sukurta biblioteka: {library}",
|
||||||
"library_deleted": "Biblioteka ištrinta",
|
"library_deleted": "Biblioteka ištrinta",
|
||||||
"library_import_path_description": "Nurodykite aplanką, kurį norite importuoti. Šiame aplanke, įskaitant poaplankius, bus nuskaityti vaizdai ir vaizdo įrašai.",
|
"library_import_path_description": "Nurodykite aplanką, kurį norite importuoti. Šiame aplanke, įskaitant poaplankius, bus nuskaityti vaizdai ir vaizdo įrašai.",
|
||||||
@@ -165,7 +172,7 @@
|
|||||||
"metadata_extraction_job": "Metaduomenų nuskaitymas",
|
"metadata_extraction_job": "Metaduomenų nuskaitymas",
|
||||||
"metadata_extraction_job_description": "Kiekvieno bibliotekos elemento metaduomenų nuskaitymas, tokių kaip GPS koordinatės, veidai ar rezoliucija",
|
"metadata_extraction_job_description": "Kiekvieno bibliotekos elemento metaduomenų nuskaitymas, tokių kaip GPS koordinatės, veidai ar rezoliucija",
|
||||||
"metadata_faces_import_setting": "Įjungti veidų importą",
|
"metadata_faces_import_setting": "Įjungti veidų importą",
|
||||||
"metadata_faces_import_setting_description": "Importuoti veidus iš vaizdo EXIF duomenų ir papildomų failų",
|
"metadata_faces_import_setting_description": "Importuoti veidus iš vaizdo EXIF duomenų ir susietų failų",
|
||||||
"metadata_settings": "Metaduomenų nustatymai",
|
"metadata_settings": "Metaduomenų nustatymai",
|
||||||
"metadata_settings_description": "Tvarkyti metaduomenų nustatymus",
|
"metadata_settings_description": "Tvarkyti metaduomenų nustatymus",
|
||||||
"migration_job": "Tvarkymas",
|
"migration_job": "Tvarkymas",
|
||||||
@@ -182,6 +189,8 @@
|
|||||||
"nightly_tasks_settings_description": "Valdyti naktines užduotis",
|
"nightly_tasks_settings_description": "Valdyti naktines užduotis",
|
||||||
"nightly_tasks_start_time_setting": "Pradžios laikas",
|
"nightly_tasks_start_time_setting": "Pradžios laikas",
|
||||||
"nightly_tasks_start_time_setting_description": "Laikas kada serveris pradės vykdyti naktines užduotis",
|
"nightly_tasks_start_time_setting_description": "Laikas kada serveris pradės vykdyti naktines užduotis",
|
||||||
|
"nightly_tasks_sync_quota_usage_setting": "Sinchronizuoti kvotos naudojimą",
|
||||||
|
"nightly_tasks_sync_quota_usage_setting_description": "Atnaujinti vartotojo vietos kvotą remiantis dabartiniu vartojimu",
|
||||||
"no_paths_added": "Keliai nepridėti",
|
"no_paths_added": "Keliai nepridėti",
|
||||||
"no_pattern_added": "Šablonas nepridėtas",
|
"no_pattern_added": "Šablonas nepridėtas",
|
||||||
"note_apply_storage_label_previous_assets": "Pastaba: norėdami pritaikyti Saugyklos Žymą seniau įkeltiems ištekliams, paleiskite",
|
"note_apply_storage_label_previous_assets": "Pastaba: norėdami pritaikyti Saugyklos Žymą seniau įkeltiems ištekliams, paleiskite",
|
||||||
@@ -303,29 +312,72 @@
|
|||||||
"transcoding_codecs_learn_more": "Sužinoti daugiau apie naudojamą terminologiją, naudokite FFmpeg dokumentaciją <h264-link>H.264 codec</h264-link>, <hevc-link>HEVC codec</hevc-link> and <vp9-link>VP9 codec</vp9-link>.",
|
"transcoding_codecs_learn_more": "Sužinoti daugiau apie naudojamą terminologiją, naudokite FFmpeg dokumentaciją <h264-link>H.264 codec</h264-link>, <hevc-link>HEVC codec</hevc-link> and <vp9-link>VP9 codec</vp9-link>.",
|
||||||
"transcoding_constant_quality_mode": "Pastovios kokybės režimas",
|
"transcoding_constant_quality_mode": "Pastovios kokybės režimas",
|
||||||
"transcoding_constant_quality_mode_description": "ICQ yra geriau nei CPQ, tačiau ne visi įrenginiai palaiko šį spartinimo būdą. Šis pasirinkimas būtų naudojamas kai nustatytas Kodavimas Pagal Kokybę. NVENC nepalaiko šio pasirinkimo todėl bus ignoruojamas.",
|
"transcoding_constant_quality_mode_description": "ICQ yra geriau nei CPQ, tačiau ne visi įrenginiai palaiko šį spartinimo būdą. Šis pasirinkimas būtų naudojamas kai nustatytas Kodavimas Pagal Kokybę. NVENC nepalaiko šio pasirinkimo todėl bus ignoruojamas.",
|
||||||
|
"transcoding_constant_rate_factor": "Pastovaus greičio faktorius (-crf)",
|
||||||
"transcoding_constant_rate_factor_description": "Video kokybės lygis. Tipinės reikšmės yra 23 jei H.264, 28 jei HVEC, 31 jei VP9, ir 35 jei AV1. Kuo mažesnis tuo kokybiškesnis tačiau didesni failai.",
|
"transcoding_constant_rate_factor_description": "Video kokybės lygis. Tipinės reikšmės yra 23 jei H.264, 28 jei HVEC, 31 jei VP9, ir 35 jei AV1. Kuo mažesnis tuo kokybiškesnis tačiau didesni failai.",
|
||||||
"transcoding_disabled_description": "Nedaryti perkodavimo, įrašų peržiūra gali neveikti ant kai kūrių sąsajų",
|
"transcoding_disabled_description": "Nedaryti perkodavimo, įrašų peržiūra gali neveikti ant kai kūrių sąsajų",
|
||||||
|
"transcoding_encoding_options": "Užkodavimo parinktys",
|
||||||
|
"transcoding_encoding_options_description": "Nustatyti kodekus, rezoliuciją, kokybę ir kitas parinktis užkoduojamiems vaizdo įrašams",
|
||||||
"transcoding_hardware_acceleration": "Techninės įrangos spartinimas",
|
"transcoding_hardware_acceleration": "Techninės įrangos spartinimas",
|
||||||
|
"transcoding_hardware_acceleration_description": "Eksperimentinis: greitesnis perkodavimas, bet galimai prastesne kokybe prie tos pačios bitų spartos",
|
||||||
"transcoding_hardware_decoding": "Aparatinis dekodavimas",
|
"transcoding_hardware_decoding": "Aparatinis dekodavimas",
|
||||||
|
"transcoding_hardware_decoding_setting_description": "Įgalina visapusišką paspartinimą vietoje tik užkodavimo paspartinimo. Gali neveikti su kai kuriais vaizdo įrašais.",
|
||||||
|
"transcoding_max_b_frames": "Maksimaliai B-kadrų",
|
||||||
|
"transcoding_max_b_frames_description": "Didesnės reikšmės pagerina suspaudimo efektyvumą, bet sulėtina užkodavimą. Senesniuose prietaisuose gali būti nepalaikomas aparatinis spartinimas. 0 išjungia B-kadrus, o -1 nustato reikšmę automatiškai.",
|
||||||
"transcoding_max_bitrate": "Maksimalus bitų srautas",
|
"transcoding_max_bitrate": "Maksimalus bitų srautas",
|
||||||
"transcoding_max_bitrate_description": "Pasirenkant max bitrate galima pasiekti labiau nuspėjamą failų dydį su minimaliais kokybės praradimais. Prie 720p, tipinės reikšmės yra 2600 kbits/s jei BP9 ar HVEC, arba 4500 kbits/s jei H.264. Neveiksnus jei pasirenkamas 0.",
|
"transcoding_max_bitrate_description": "Pasirenkant max bitrate galima pasiekti labiau nuspėjamą failų dydį su minimaliais kokybės praradimais. Prie 720p, tipinės reikšmės yra 2600 kbits/s jei BP9 ar HVEC, arba 4500 kbits/s jei H.264. Neveiksnus jei pasirenkamas 0.",
|
||||||
|
"transcoding_max_keyframe_interval": "Maksimalus raktinio kadro intervalas",
|
||||||
|
"transcoding_max_keyframe_interval_description": "Nustato maksimalų kadro atstumą tarp raktinių kadrų. Žemesnės reikšmės pablogina suspaudimo efektyvumą, bet pagerina prasukimo laiką ir gali pagerinti greito veiksmo scenų kokybę. 0 - nustato šią reikšmę automatiškai.",
|
||||||
|
"transcoding_optimal_description": "Vaizdo įrašai aukštesne nei tikslinė rezoliucija arba nepalaikomu formatu",
|
||||||
"transcoding_policy": "Transkodavimo politika",
|
"transcoding_policy": "Transkodavimo politika",
|
||||||
|
"transcoding_policy_description": "Nustatyti kada vaizdo įrašas bus perkoduotas",
|
||||||
|
"transcoding_preferred_hardware_device": "Pageidaujamas aparatinės įrangos įrenginys",
|
||||||
|
"transcoding_preferred_hardware_device_description": "Galioja tik VAAPI ir QSV. Nustato dri mazgą aparatiniam perkodavimui.",
|
||||||
|
"transcoding_preset_preset": "Iš anksto nustatytas (-preset)",
|
||||||
"transcoding_preset_preset_description": "Kompresijos greitis. Siekiant tam tikro bitrate lėtesnis apdorojimas lems mažesnius failų dydžius ir padidins kokybę. VP9 ignoruos greičius virš \"gretesnis\" lygio.",
|
"transcoding_preset_preset_description": "Kompresijos greitis. Siekiant tam tikro bitrate lėtesnis apdorojimas lems mažesnius failų dydžius ir padidins kokybę. VP9 ignoruos greičius virš \"gretesnis\" lygio.",
|
||||||
|
"transcoding_reference_frames": "Nuorodiniai kadrai",
|
||||||
|
"transcoding_reference_frames_description": "Kadrų, į kuriuos reikia remtis suspaudžiant duotą kadrą, skaičius. Aukštesnė reikšmė pagerina suspaudimo efektyvumą, bet sulėtina užkodavimą. 0 - nustato reikšmę automatiškai.",
|
||||||
|
"transcoding_required_description": "Tik nepalaikomo formato vaizdo įrašai",
|
||||||
|
"transcoding_settings": "Vaizdo įrašų perkodavimo nustatymai",
|
||||||
|
"transcoding_settings_description": "Valdyti kuriuos vaizdo įrašus perkoduoti ir kaip juos apdoroti",
|
||||||
|
"transcoding_target_resolution": "Skiriamoji geba",
|
||||||
"transcoding_target_resolution_description": "Didesnės skiriamosios gebos gali išsaugoti daugiau detalių, tačiau jas koduoti užtrunka ilgiau, failų dydžiai yra didesni ir gali sumažėti programos jautrumas.",
|
"transcoding_target_resolution_description": "Didesnės skiriamosios gebos gali išsaugoti daugiau detalių, tačiau jas koduoti užtrunka ilgiau, failų dydžiai yra didesni ir gali sumažėti programos jautrumas.",
|
||||||
|
"transcoding_temporal_aq": "Laikinas adaptyvus kvantavimas",
|
||||||
|
"transcoding_temporal_aq_description": "Galioja tik NVENC. Pagerina detalių, mažo judesio scenų kokybę. Gali būti nepalaikoma senesnių įrenginių.",
|
||||||
|
"transcoding_threads": "Gijos",
|
||||||
|
"transcoding_threads_description": "Didesnės reikšmės pagreitina kodavimą, bet kol aktyvus palieka mažiau serverio resursų kitoms užduotims. Ši reikšmė negali būti didesnė už procesoriaus branduolių kiekį. Jei reikšmė 0, tai išnaudoja maksimaliai.",
|
||||||
|
"transcoding_tone_mapping": "Tonų atvaizdavimas",
|
||||||
|
"transcoding_tone_mapping_description": "Bandoma išsaugoti HDR vaizdo įrašų išvaizdą konvertuojant į SDR. Kiekvienas algoritmas taiko skirtingus kompromisus dėl spalvų, detalių ir šviesumo. Hable išsaugo detales, Mobius išsaugo spalvas, o Reinhard išsaugo šviesumą.",
|
||||||
|
"transcoding_transcode_policy": "Perkodavimo strategija",
|
||||||
|
"transcoding_transcode_policy_description": "Strategija, kada vaizdo įrašas turi būti perkoduotas. HDR vaizdo įrašai visada bus perkoduoti (išskyrus jei perkodavimas išjungtas).",
|
||||||
|
"transcoding_two_pass_encoding": "Dviejų perėjimų užkodavimas",
|
||||||
|
"transcoding_two_pass_encoding_setting_description": "Perkoduoti su dviem perėjimais, kad gauti geriau užkoduotą vaizdo įrašą. Kai maksimalus bitų srautas įjungtas (veikimui reikalaujamas H.264 ir HVEC), tada naudojamas bitų intervalas remiantis maksimaliu bitų srautu ir ignoruojamas CRF. Su VP9 gali būti naudojamas CRF, jei maksimalus bitų srautas yra išjungtas.",
|
||||||
"transcoding_video_codec": "Video kodekas",
|
"transcoding_video_codec": "Video kodekas",
|
||||||
|
"transcoding_video_codec_description": "VP9 turi didelį efektyvumą ir tinklo suderinamumą, bet užtrunka ilgiau perkoduojant. HVEC veikia panašiai, bet turi mažesnį tinklo suderinamumą. H.264 yra plačiai palaikomas ir greitai perkoduojamas, bet kuria didelius failus. AV1 yra efektyviausias kodekas, bet nepalaikomas senesnių prietaisų.",
|
||||||
"trash_enabled_description": "Įgalinti šiukšliadėžės funkcijas",
|
"trash_enabled_description": "Įgalinti šiukšliadėžės funkcijas",
|
||||||
"trash_number_of_days": "Dienų skaičius",
|
"trash_number_of_days": "Dienų skaičius",
|
||||||
|
"trash_number_of_days_description": "Kiek dienų bus laikomi elementai šiukšliadėžėje prieš galutinai juos ištrinant",
|
||||||
"trash_settings": "Šiukšliadėžės nustatymai",
|
"trash_settings": "Šiukšliadėžės nustatymai",
|
||||||
"trash_settings_description": "Tvarkyti šiukšliadėžės nustatymus",
|
"trash_settings_description": "Tvarkyti šiukšliadėžės nustatymus",
|
||||||
|
"unlink_all_oauth_accounts": "Atsieti visas OAuth paskyras",
|
||||||
|
"unlink_all_oauth_accounts_description": "Nepamirškite atsieti visas OAuth paskyras prieš migruojant pas naują tiekėją.",
|
||||||
|
"unlink_all_oauth_accounts_prompt": "Ar tikrai norite atsieti visas OAuth paskyras? Tai negrįžtama operacija kuri atstatys OAuth ID kiekvienam vartotojui.",
|
||||||
"user_cleanup_job": "Vartotojų išvalymas",
|
"user_cleanup_job": "Vartotojų išvalymas",
|
||||||
|
"user_delete_delay": "<b>{user}</b> paskyra ir elementai bus nustatyti galutiniam ištrynimui už {delay, plural, one {# dienos} other {# dienų}}.",
|
||||||
"user_delete_delay_settings": "Ištrynimo delsa",
|
"user_delete_delay_settings": "Ištrynimo delsa",
|
||||||
"user_delete_delay_settings_description": "Skaičius dienų po ištrynimo kuomet vartotojo paskyrą ir susiję duomenys bus negražinamai ištrinti. Vartotojo Trynimo užduotis paleidžiama vidurnaktį ir tikrina kurie vartotojai gali būti trinami. Šio nustatymo pakeitimai bus naudojami sekančio užduoties paleidimo metu.",
|
"user_delete_delay_settings_description": "Skaičius dienų po ištrynimo kuomet naudotojo paskyra ir susiję duomenys bus negražinamai ištrinti. Naudotojo trynimo užduotis paleidžiama vidurnaktį ir tikrina kurie naudotojai gali būti trinami. Šio nustatymo pakeitimai bus naudojami sekančio užduoties paleidimo metu.",
|
||||||
|
"user_delete_immediately": "<b>{user}</b> paskyra ir elementai bus <b>nedelsiant</b> įtraukti galutiniam pašalinimui.",
|
||||||
|
"user_delete_immediately_checkbox": "Ištrinti naudotoją ir elementus nedelsiant",
|
||||||
|
"user_details": "Naudotojo duomenys",
|
||||||
"user_management": "Naudotojų valdymas",
|
"user_management": "Naudotojų valdymas",
|
||||||
"user_password_has_been_reset": "Naudotojo slaptažodis buvo iš naujo nustatytas:",
|
"user_password_has_been_reset": "Naudotojo slaptažodis buvo iš naujo nustatytas:",
|
||||||
|
"user_password_reset_description": "Perduokite laikiną slaptažodį naudotojui ir informuokite, kad pasikeistų slaptažodį pirmo prisijungimo metu.",
|
||||||
"user_restore_description": "Naudotojo <b>{user}</b> paskyra bus atkurta.",
|
"user_restore_description": "Naudotojo <b>{user}</b> paskyra bus atkurta.",
|
||||||
|
"user_restore_scheduled_removal": "Atkurti naudotoją - suplanuotas pašalinimas {date, date, long}",
|
||||||
"user_settings": "Naudotojo nustatymai",
|
"user_settings": "Naudotojo nustatymai",
|
||||||
"user_settings_description": "Valdyti naudotojo nustatymus",
|
"user_settings_description": "Valdyti naudotojo nustatymus",
|
||||||
"user_successfully_removed": "Naudotojas {email} sėkmingai pašalintas.",
|
"user_successfully_removed": "Naudotojas {email} sėkmingai pašalintas.",
|
||||||
|
"version_check_enabled_description": "Įgalinti versijų tikrinimą",
|
||||||
|
"version_check_implications": "Versijų tikrinimas reikalauja periodiškos komunikacijos su github.com",
|
||||||
"version_check_settings": "Versijos tikrinimas",
|
"version_check_settings": "Versijos tikrinimas",
|
||||||
"version_check_settings_description": "Įjungti/išjungti naujos versijos pranešimus",
|
"version_check_settings_description": "Įjungti/išjungti naujos versijos pranešimus",
|
||||||
"video_conversion_job": "Vaizdo įrašų konvertavimas",
|
"video_conversion_job": "Vaizdo įrašų konvertavimas",
|
||||||
@@ -334,10 +386,36 @@
|
|||||||
"admin_email": "Administratoriaus el. paštas",
|
"admin_email": "Administratoriaus el. paštas",
|
||||||
"admin_password": "Administratoriaus slaptažodis",
|
"admin_password": "Administratoriaus slaptažodis",
|
||||||
"administration": "Administravimas",
|
"administration": "Administravimas",
|
||||||
|
"advanced": "Sudėtingesnis",
|
||||||
|
"advanced_settings_beta_timeline_subtitle": "Išbandykite naujos programos patirtį",
|
||||||
|
"advanced_settings_beta_timeline_title": "Beta laiko juosta",
|
||||||
|
"advanced_settings_enable_alternate_media_filter_subtitle": "Naudokite šį nustatymą medijos filtravimui sinchronizuojant remiantis alternatyviais kriterijais. Naudokite tik jei programa turi problemų su visų albumų aptikimu.",
|
||||||
|
"advanced_settings_enable_alternate_media_filter_title": "[EKSPERIMENTINIS] Naudokite alternatyvų įrenginio albumų sinchronizavimo filtrą",
|
||||||
|
"advanced_settings_log_level_title": "Žurnalo įrašų lygis: {level}",
|
||||||
|
"advanced_settings_prefer_remote_subtitle": "Kai kurie įrenginiai labai lėtai įkelia miniatiūras iš vietinių elementų. Aktyvuokite šį nustatymą, kad vietoje to užkrautumėte nuotolines nuotraukas.",
|
||||||
|
"advanced_settings_prefer_remote_title": "Teikti pirmenybę nuotolinėms nuotraukoms",
|
||||||
|
"advanced_settings_proxy_headers_subtitle": "Nustatykite tarpinio serverio antraštes kurias Immich siųs su kiekvienu užklausimu",
|
||||||
|
"advanced_settings_proxy_headers_title": "Tarpinio serverio antraštės",
|
||||||
|
"advanced_settings_readonly_mode_subtitle": "Įgalina tik skaitymo režimą kai nuotraukas galima tik žiūrėti, draudžiama pažymėti kelias, dalintis, transliuoti ar ištrinti. Įgalinkit/uždrauskit tik skaitymą per naudotojo avatar'ą iš pagrindinio lango",
|
||||||
|
"advanced_settings_readonly_mode_title": "Tik skaitymo režimas",
|
||||||
|
"advanced_settings_self_signed_ssl_subtitle": "Praleidžia SSL sertifikato tikrinimą serverio galutiniam taškui. Privaloma pačių pasirašytiems sertifikatams.",
|
||||||
|
"advanced_settings_self_signed_ssl_title": "Leisti pačių pasirašytus SSL sertifikatus",
|
||||||
|
"advanced_settings_sync_remote_deletions_subtitle": "Automatiškai ištrinti ar atkurti elementus įrenginyje, kai tie veiksmai atliekami naršyklėje",
|
||||||
|
"advanced_settings_sync_remote_deletions_title": "Sinchronizuoti nuotolinius ištrynimus [EKSPERIMENTINIS]",
|
||||||
|
"advanced_settings_tile_subtitle": "Pažangesni naudotojų nustatymai",
|
||||||
|
"advanced_settings_troubleshooting_subtitle": "Įgalinti papildomas galimybes trikčių šalinimui",
|
||||||
|
"advanced_settings_troubleshooting_title": "Trikčių šalinimas",
|
||||||
|
"age_months": "Amžius {months, plural, one {# mėnesis} few {# mėnesiai} other {# mėnesių}}",
|
||||||
|
"age_year_months": "Amžius 1 metai, {months, plural, one {# mėnesis} few {# mėnesiai} other {# mėnesių}}",
|
||||||
|
"age_years": "{years, plural, other {Amžius #}}",
|
||||||
"album_added": "Albumas pridėtas",
|
"album_added": "Albumas pridėtas",
|
||||||
"album_added_notification_setting_description": "Gauti el. pašto pranešimą, kai būsite pridėtas prie bendrinamo albumo",
|
"album_added_notification_setting_description": "Gauti el. pašto pranešimą, kai būsite pridėtas prie bendrinamo albumo",
|
||||||
"album_cover_updated": "Albumo viršelis atnaujintas",
|
"album_cover_updated": "Albumo viršelis atnaujintas",
|
||||||
"album_delete_confirmation": "Ar tikrai norite ištrinti albumą {album}?",
|
"album_delete_confirmation": "Ar tikrai norite ištrinti albumą {album}?",
|
||||||
|
"album_delete_confirmation_description": "Jei šiuo albumu dalijamasi, tai kiti naudotojai jo nebegalės pasiekti.",
|
||||||
|
"album_deleted": "Albumas ištrintas",
|
||||||
|
"album_info_card_backup_album_excluded": "neįtrauktas",
|
||||||
|
"album_info_card_backup_album_included": "įtrauktas",
|
||||||
"album_info_updated": "Albumo informacija atnaujinta",
|
"album_info_updated": "Albumo informacija atnaujinta",
|
||||||
"album_leave": "Palikti albumą?",
|
"album_leave": "Palikti albumą?",
|
||||||
"album_leave_confirmation": "Ar tikrai norite palikti albumą {album}?",
|
"album_leave_confirmation": "Ar tikrai norite palikti albumą {album}?",
|
||||||
@@ -345,16 +423,27 @@
|
|||||||
"album_options": "Albumo parinktys",
|
"album_options": "Albumo parinktys",
|
||||||
"album_remove_user": "Pašalinti naudotoją?",
|
"album_remove_user": "Pašalinti naudotoją?",
|
||||||
"album_remove_user_confirmation": "Ar tikrai norite pašalinti naudotoją {user}?",
|
"album_remove_user_confirmation": "Ar tikrai norite pašalinti naudotoją {user}?",
|
||||||
|
"album_search_not_found": "Pagal jūsų paiešką albumų nerasta",
|
||||||
"album_share_no_users": "Atrodo, kad bendrinate šį albumą su visais naudotojais, arba neturite naudotojų, su kuriais galėtumėte bendrinti.",
|
"album_share_no_users": "Atrodo, kad bendrinate šį albumą su visais naudotojais, arba neturite naudotojų, su kuriais galėtumėte bendrinti.",
|
||||||
"album_updated": "Albumas atnaujintas",
|
"album_updated": "Albumas atnaujintas",
|
||||||
"album_updated_setting_description": "Gauti pranešimą el. paštu, kai bendrinamas albumas turi naujų elementų",
|
"album_updated_setting_description": "Gauti pranešimą el. paštu, kai bendrinamas albumas turi naujų elementų",
|
||||||
|
"album_user_left": "Paliko {album}",
|
||||||
"album_user_removed": "Pašalintas {user}",
|
"album_user_removed": "Pašalintas {user}",
|
||||||
|
"album_viewer_appbar_delete_confirm": "Ar tikrai norite ištrinti šį albumą iš savo paskyros?",
|
||||||
"album_viewer_appbar_share_err_delete": "Nepavyko ištrinti albumo",
|
"album_viewer_appbar_share_err_delete": "Nepavyko ištrinti albumo",
|
||||||
"album_viewer_appbar_share_err_leave": "Nepavyko išeiti iš albumo",
|
"album_viewer_appbar_share_err_leave": "Nepavyko išeiti iš albumo",
|
||||||
|
"album_viewer_appbar_share_err_remove": "Kilo problemų pašalinant elementus iš albumo",
|
||||||
"album_viewer_appbar_share_err_title": "Nepavyko pakeisti albumo pavadinimą",
|
"album_viewer_appbar_share_err_title": "Nepavyko pakeisti albumo pavadinimą",
|
||||||
|
"album_viewer_appbar_share_leave": "Palikti albumą",
|
||||||
|
"album_viewer_appbar_share_to": "Dalintis su",
|
||||||
|
"album_viewer_page_share_add_users": "Pridėti naudotojų",
|
||||||
"album_with_link_access": "Tegul visi, turintys nuorodą, mato šio albumo nuotraukas ir žmones.",
|
"album_with_link_access": "Tegul visi, turintys nuorodą, mato šio albumo nuotraukas ir žmones.",
|
||||||
"albums": "Albumai",
|
"albums": "Albumai",
|
||||||
"albums_count": "{count, plural, one {# albumas} few {# albumai} other {# albumų}}",
|
"albums_count": "{count, plural, one {# albumas} few {# albumai} other {# albumų}}",
|
||||||
|
"albums_default_sort_order": "Pradinė albumo rūšiavimo tvarka",
|
||||||
|
"albums_default_sort_order_description": "Pradinė elementų rūšiavimo tvarka kai kuriamas naujas albumas.",
|
||||||
|
"albums_feature_description": "Elementų rinkinys kuriuo galima dalintis su kitais naudotojais.",
|
||||||
|
"albums_on_device_count": "Albumų įrenginyje ({count})",
|
||||||
"all": "Visi",
|
"all": "Visi",
|
||||||
"all_albums": "Visi albumai",
|
"all_albums": "Visi albumai",
|
||||||
"all_people": "Visi žmonės",
|
"all_people": "Visi žmonės",
|
||||||
@@ -363,51 +452,154 @@
|
|||||||
"allow_edits": "Leisti redagavimus",
|
"allow_edits": "Leisti redagavimus",
|
||||||
"allow_public_user_to_download": "Leisti viešam naudotojui atsisiųsti",
|
"allow_public_user_to_download": "Leisti viešam naudotojui atsisiųsti",
|
||||||
"allow_public_user_to_upload": "Leisti viešam naudotojui įkelti",
|
"allow_public_user_to_upload": "Leisti viešam naudotojui įkelti",
|
||||||
|
"alt_text_qr_code": "QR kodo paveiksliukas",
|
||||||
|
"anti_clockwise": "Prieš laikrodžio rodykles",
|
||||||
"api_key": "API raktas",
|
"api_key": "API raktas",
|
||||||
|
"api_key_description": "Ši reikšmė bus parodyta tik vieną kartą. Prašome nusikopijuoti prieš uždarant šį langą.",
|
||||||
"api_key_empty": "Jūsų API rakto pavadinimas netūrėtų būti tuščias",
|
"api_key_empty": "Jūsų API rakto pavadinimas netūrėtų būti tuščias",
|
||||||
"api_keys": "API raktai",
|
"api_keys": "API raktai",
|
||||||
|
"app_bar_signout_dialog_content": "Ar tikrai norite atsijungti?",
|
||||||
|
"app_bar_signout_dialog_ok": "Taip",
|
||||||
|
"app_bar_signout_dialog_title": "Atsijungti",
|
||||||
"app_settings": "Programos nustatymai",
|
"app_settings": "Programos nustatymai",
|
||||||
|
"appears_in": "Susiję",
|
||||||
|
"apply_count": "Taikyti ({count, number})",
|
||||||
"archive": "Archyvas",
|
"archive": "Archyvas",
|
||||||
|
"archive_action_prompt": "{count} pridėta į archyvą",
|
||||||
"archive_or_unarchive_photo": "Archyvuoti arba išarchyvuoti nuotrauką",
|
"archive_or_unarchive_photo": "Archyvuoti arba išarchyvuoti nuotrauką",
|
||||||
"archive_page_no_archived_assets": "Nerasta jokių archyvuotų elementų",
|
"archive_page_no_archived_assets": "Nerasta jokių archyvuotų elementų",
|
||||||
|
"archive_page_title": "Archyve ({count})",
|
||||||
"archive_size": "Archyvo dydis",
|
"archive_size": "Archyvo dydis",
|
||||||
"archive_size_description": "Konfigūruoti archyvo dydį atsisiuntimams (GiB)",
|
"archive_size_description": "Konfigūruoti archyvo dydį atsisiuntimams (GiB)",
|
||||||
"archived": "Archyvuota",
|
"archived": "Archyvuota",
|
||||||
"archived_count": "{count, plural, other {# suarchyvuota}}",
|
"archived_count": "{count, plural, other {# suarchyvuota}}",
|
||||||
"are_these_the_same_person": "Ar tai tas pats asmuo?",
|
"are_these_the_same_person": "Ar tai tas pats asmuo?",
|
||||||
"are_you_sure_to_do_this": "Ar tikrai norite tai daryti?",
|
"are_you_sure_to_do_this": "Ar tikrai norite tai daryti?",
|
||||||
|
"asset_action_delete_err_read_only": "Negalima ištrinti tik skaitom(o, ų) element(o, ų), praleidžiama",
|
||||||
|
"asset_action_share_err_offline": "Negalima užkrauti neprisijungusių elementų, praleidžiama",
|
||||||
"asset_added_to_album": "Pridėta į albumą",
|
"asset_added_to_album": "Pridėta į albumą",
|
||||||
"asset_adding_to_album": "Pridedama į albumą...",
|
"asset_adding_to_album": "Pridedama į albumą…",
|
||||||
"asset_description_updated": "Elemento aprašymas buvo atnaujintas",
|
"asset_description_updated": "Elemento aprašymas buvo atnaujintas",
|
||||||
"asset_filename_is_offline": "Elementas {filename} nepasiekiamas",
|
"asset_filename_is_offline": "Elementas {filename} nepasiekiamas",
|
||||||
|
"asset_has_unassigned_faces": "Elementas turi nepriskirtų veidų",
|
||||||
|
"asset_hashing": "Maišoma…",
|
||||||
|
"asset_list_group_by_sub_title": "Grupuoti pagal",
|
||||||
|
"asset_list_layout_settings_dynamic_layout_title": "Dinaminis išdėstymas",
|
||||||
|
"asset_list_layout_settings_group_automatically": "Automatiškai",
|
||||||
|
"asset_list_layout_settings_group_by": "Grupuoti elementus pagal",
|
||||||
|
"asset_list_layout_settings_group_by_month_day": "Mėnesis + diena",
|
||||||
|
"asset_list_layout_sub_title": "Išdėstymas",
|
||||||
|
"asset_list_settings_subtitle": "Nuotraukų tinklelio išdėstymo nustatymai",
|
||||||
|
"asset_list_settings_title": "Nuotraukų tinklelis",
|
||||||
"asset_offline": "Elementas nepasiekiamas",
|
"asset_offline": "Elementas nepasiekiamas",
|
||||||
"asset_offline_description": "Šis išorinis elementas neberandamas diske. Dėl pagalbos susisiekite su savo Immich administratoriumi.",
|
"asset_offline_description": "Šis išorinis elementas neberandamas diske. Dėl pagalbos susisiekite su savo Immich administratoriumi.",
|
||||||
|
"asset_restored_successfully": "Elementas atkurtas sėkmingai",
|
||||||
|
"asset_skipped": "Praleista",
|
||||||
|
"asset_skipped_in_trash": "Šiukšliadėžėje",
|
||||||
"asset_uploaded": "Įkelta",
|
"asset_uploaded": "Įkelta",
|
||||||
"asset_uploading": "Įkeliama...",
|
"asset_uploading": "Įkeliama…",
|
||||||
|
"asset_viewer_settings_subtitle": "Tvarkykite savo galerijos peržiūros nustatymus",
|
||||||
|
"asset_viewer_settings_title": "Elementų peržiūra",
|
||||||
"assets": "Elementai",
|
"assets": "Elementai",
|
||||||
"assets_added_count": "{count, plural, one {Pridėtas # elementas} few {Pridėti # elementai} other {Pridėta # elementų}}",
|
"assets_added_count": "{count, plural, one {Pridėtas # elementas} few {Pridėti # elementai} other {Pridėta # elementų}}",
|
||||||
"assets_added_to_album_count": "Į albumą {count, plural, one {įtrauktas # elementas} few {įtraukti # elementai} other {įtraukta # elementų}}",
|
"assets_added_to_album_count": "Į albumą {count, plural, one {įtrauktas # elementas} few {įtraukti # elementai} other {įtraukta # elementų}}",
|
||||||
|
"assets_added_to_albums_count": "Pridėta {assetTotal, plural, one {# elementas} few {# elementai} other {# elementų}} į {albumTotal, plural, one {# albumą} few {# albumus} other {# albumų}}",
|
||||||
|
"assets_cannot_be_added_to_album_count": "{count, plural, one {Elementas negali būti pridėtas} few {Elementai negali būti pridėti} other {Elementų negali būti pridėta}} į albumą",
|
||||||
|
"assets_cannot_be_added_to_albums": "{count, plural, one {Elementas negali būti pridėtas} few {Elementai negali būti pridėti} other {Elementų negali būti pridėta}} į nei vieną albumą",
|
||||||
"assets_count": "{count, plural, one {# elementas} few {# elementai} other {# elementų}}",
|
"assets_count": "{count, plural, one {# elementas} few {# elementai} other {# elementų}}",
|
||||||
|
"assets_deleted_permanently": "{count} elementų ištrinta galutinai",
|
||||||
|
"assets_deleted_permanently_from_server": "{count} elementų ištrinta galutinai iš Immich serverio",
|
||||||
|
"assets_downloaded_failed": "{count, plural, one {Atsisiųstas # failas - {error} failas nepavyko} few {Atsisiųsti # failai - {error} failai nepavyko} other {Atsisiųsta # failų - {error} failų nepavyko}}",
|
||||||
|
"assets_downloaded_successfully": "{count, plural, one {Atsisiųstas # failas sėkmingai} few {Atsisiųsti # failai sėkmingai} other {Atsisiųsta # failų sėkmingai}}",
|
||||||
"assets_moved_to_trash_count": "{count, plural, one {# elementas perkeltas} few {# elementai perkelti} other {# elementų perkelta}} į šiukšliadėžę",
|
"assets_moved_to_trash_count": "{count, plural, one {# elementas perkeltas} few {# elementai perkelti} other {# elementų perkelta}} į šiukšliadėžę",
|
||||||
"assets_permanently_deleted_count": "{count, plural, one {# elementas ištrintas} few {# elementai ištrinti} other {# elementų ištrinta}} visam laikui",
|
"assets_permanently_deleted_count": "{count, plural, one {# elementas ištrintas} few {# elementai ištrinti} other {# elementų ištrinta}} visam laikui",
|
||||||
"assets_removed_count": "{count, plural, one {Pašalintas # elementas} few {Pašalinti # elementai} other {Pašalinta # elementų}}",
|
"assets_removed_count": "{count, plural, one {Pašalintas # elementas} few {Pašalinti # elementai} other {Pašalinta # elementų}}",
|
||||||
|
"assets_removed_permanently_from_device": "{count} elementų pašalinta galutinai iš jūsų įrenginio",
|
||||||
"assets_restore_confirmation": "Ar tikrai norite atkurti visus šiukšliadėžėje esančius perkeltus elementus? Šio veiksmo atšaukti negalėsite! Pastaba: nepasiekiami elementai tokiu būdu atkurti nebus.",
|
"assets_restore_confirmation": "Ar tikrai norite atkurti visus šiukšliadėžėje esančius perkeltus elementus? Šio veiksmo atšaukti negalėsite! Pastaba: nepasiekiami elementai tokiu būdu atkurti nebus.",
|
||||||
"assets_restored_count": "{count, plural, one {Atkurtas # elementas} few {Atkurti # elementai} other {Atkurta # elementų}}",
|
"assets_restored_count": "{count, plural, one {Atkurtas # elementas} few {Atkurti # elementai} other {Atkurta # elementų}}",
|
||||||
|
"assets_restored_successfully": "{count} element(as, ai, ų) atkurta sėkmingai",
|
||||||
|
"assets_trashed": "{count} element(ai,ų,as) perkelta į šiukšliadėžę",
|
||||||
|
"assets_trashed_count": "Perkelta į šiukšliadėžę {count, plural, one {# elementas} few {# elementai} other {# elementų}}",
|
||||||
|
"assets_trashed_from_server": "{count} element(as, ai, ų) perkelta į šiukšliadėžę iš Immich serverio",
|
||||||
"assets_were_part_of_album_count": "{count, plural, one {# elementas} few {# elementai} other {# elementų}} jau prieš tai buvo albume",
|
"assets_were_part_of_album_count": "{count, plural, one {# elementas} few {# elementai} other {# elementų}} jau prieš tai buvo albume",
|
||||||
|
"assets_were_part_of_albums_count": "{count, plural, one {Elementas } few {Elementai} other {Elementų}} jau buvo albumuose",
|
||||||
"authorized_devices": "Autorizuoti įrenginiai",
|
"authorized_devices": "Autorizuoti įrenginiai",
|
||||||
|
"automatic_endpoint_switching_subtitle": "Prisijungti vietoje per priskirtą Wi-Fi kai įmanoma ir naudoti alternatyvų prisijungimą visur kitur",
|
||||||
|
"automatic_endpoint_switching_title": "Automatinis URL perjungimas",
|
||||||
|
"autoplay_slideshow": "Automatiškai rodyti skaidrių demonstraciją",
|
||||||
"back": "Atgal",
|
"back": "Atgal",
|
||||||
"back_close_deselect": "Atgal, uždaryti arba atžymėti",
|
"back_close_deselect": "Atgal, uždaryti arba atžymėti",
|
||||||
|
"background_location_permission": "Foninis vietovės leidimas",
|
||||||
|
"background_location_permission_content": "Veikiant fone tinklo perjungimui Immich privalo *visada* turėti prieigą prie tikslios vietovės, kad programa galėtų perskaityti Wi-Fi tinklo pavadinimą",
|
||||||
|
"backup": "Atsarginė kopija",
|
||||||
|
"backup_album_selection_page_albums_device": "Albumų įrenginyje ({count})",
|
||||||
|
"backup_album_selection_page_albums_tap": "Palieskite įtraukti, du kart palieskite neįtraukti",
|
||||||
|
"backup_album_selection_page_assets_scatter": "Elementai gali išsibarstyti per kelis albumus. Todėl albumai gali būti įtraukti arba neįtraukti per atsarginio kopijavimo procesą.",
|
||||||
|
"backup_album_selection_page_select_albums": "Pažymėti albumai",
|
||||||
|
"backup_album_selection_page_selection_info": "Pažymėjimo informacija",
|
||||||
|
"backup_album_selection_page_total_assets": "Viso unikalių elementų",
|
||||||
|
"backup_all": "Visi",
|
||||||
"backup_background_service_backup_failed_message": "Nepavyko sukurti atsarginių kopijų. Bandoma dar kartą…",
|
"backup_background_service_backup_failed_message": "Nepavyko sukurti atsarginių kopijų. Bandoma dar kartą…",
|
||||||
"backup_background_service_connection_failed_message": "Nepavyko prisijungti prie serverio. Bandoma dar kartą…",
|
"backup_background_service_connection_failed_message": "Nepavyko prisijungti prie serverio. Bandoma dar kartą…",
|
||||||
"backup_background_service_current_upload_notification": "Įkeliamas {filename}",
|
"backup_background_service_current_upload_notification": "Įkeliamas {filename}",
|
||||||
|
"backup_background_service_default_notification": "Ieškoma naujų elementų…",
|
||||||
|
"backup_background_service_error_title": "Atsarginio kopijavimo klaida",
|
||||||
|
"backup_background_service_in_progress_notification": "Kuriama elementų atsarginė kopija…",
|
||||||
"backup_background_service_upload_failure_notification": "Nepavyko įkelti {filename}",
|
"backup_background_service_upload_failure_notification": "Nepavyko įkelti {filename}",
|
||||||
"backup_controller_page_background_wifi": "Only on WiFi",
|
"backup_controller_page_albums": "Atsarginės kopijos albumai",
|
||||||
|
"backup_controller_page_background_app_refresh_disabled_title": "Foninis programos atnaujinimas išjungtas",
|
||||||
|
"backup_controller_page_background_app_refresh_enable_button_text": "Eiti į nustatymus",
|
||||||
|
"backup_controller_page_background_battery_info_link": "Parodyk man kaip",
|
||||||
|
"backup_controller_page_background_battery_info_message": "Norint geriausių foninio atsarginio kopijavimo rezultatų, prašome išjungti akumuliatoriaus optimizavimą ribojantį foninį Immich veikimą.\n\nKadangi tai priklauso nuo įrenginio, prašome susirasti reikiamą informaciją pas įrenginio gamintoją.",
|
||||||
|
"backup_controller_page_background_battery_info_ok": "OK",
|
||||||
|
"backup_controller_page_background_battery_info_title": "Akumuliatoriaus optimizavimai",
|
||||||
|
"backup_controller_page_background_charging": "Tik kol kraunasi",
|
||||||
|
"backup_controller_page_background_configure_error": "Nepavyko sukonfigūruoti foninių paslaugų",
|
||||||
|
"backup_controller_page_background_delay": "Atidėti naujų elementų atsarginį kopijavimą: {duration}",
|
||||||
|
"backup_controller_page_background_description": "Įjunkite fonines paslaugas, kad galėtumėte automatiškai kurti atsargines kopijas neatidarant programos",
|
||||||
|
"backup_controller_page_background_is_off": "Automatinis atsarginis kopijavimas yra išjungtas",
|
||||||
|
"backup_controller_page_background_is_on": "Automatinis atsarginis kopijavimas yra įjungtas",
|
||||||
|
"backup_controller_page_background_turn_off": "Išjungti fonines paslaugas",
|
||||||
|
"backup_controller_page_background_turn_on": "Įjungti fonines paslaugas",
|
||||||
|
"backup_controller_page_background_wifi": "Tik su Wi-Fi",
|
||||||
|
"backup_controller_page_backup": "Atsarginis kopijavimas",
|
||||||
|
"backup_controller_page_backup_selected": "Pasirinkta: ",
|
||||||
|
"backup_controller_page_backup_sub": "Perkeltos nuotraukos ir vaizdo įrašai",
|
||||||
"backup_controller_page_created": "Sukurta: {date}",
|
"backup_controller_page_created": "Sukurta: {date}",
|
||||||
|
"backup_controller_page_desc_backup": "Įjunkite foninį atsarginį kopijavimą, kad būtų automatiškai perkeliami nauji elementai į serverį kai atidaroma programa.",
|
||||||
|
"backup_controller_page_excluded": "Neįtraukta: ",
|
||||||
|
"backup_controller_page_failed": "Nepavyko ({count})",
|
||||||
"backup_controller_page_filename": "Failo pavadinimas: {filename}[{size}]",
|
"backup_controller_page_filename": "Failo pavadinimas: {filename}[{size}]",
|
||||||
|
"backup_controller_page_id": "ID: {id}",
|
||||||
|
"backup_controller_page_info": "Atsarginio kopijavimo informacija",
|
||||||
|
"backup_controller_page_none_selected": "Niekas nepasirinkta",
|
||||||
|
"backup_controller_page_remainder": "Dar liko",
|
||||||
|
"backup_controller_page_remainder_sub": "Likusios pasirinktos atsarginio kopijavimo nuotraukos ir vaizdo įrašai",
|
||||||
"backup_controller_page_server_storage": "Serverio saugykla",
|
"backup_controller_page_server_storage": "Serverio saugykla",
|
||||||
|
"backup_controller_page_start_backup": "Pradėti atsarginį kopijavimą",
|
||||||
|
"backup_controller_page_status_off": "Automatinis foninis atsarginis kopijavimas yra išjungtas",
|
||||||
|
"backup_controller_page_status_on": "Automatinis foninis atsarginis kopijavimas yra įjungtas",
|
||||||
"backup_controller_page_storage_format": "{used} iš {total} panaudota",
|
"backup_controller_page_storage_format": "{used} iš {total} panaudota",
|
||||||
|
"backup_controller_page_to_backup": "Albumai kurių atsarginis kopijavimas bus atliktas",
|
||||||
|
"backup_controller_page_total_sub": "Visos unikalios nuotraukos ir video įrašai iš pažymėtų albumų",
|
||||||
|
"backup_controller_page_turn_off": "Išjungti foninį atsarginį kopijavimą",
|
||||||
|
"backup_controller_page_turn_on": "Įjungti foninį atsarginį kopijavimą",
|
||||||
"backup_controller_page_uploading_file_info": "Įkeliama failo info",
|
"backup_controller_page_uploading_file_info": "Įkeliama failo info",
|
||||||
|
"backup_err_only_album": "Negalima pašalinti vienintelio albumo",
|
||||||
|
"backup_info_card_assets": "elementai",
|
||||||
|
"backup_manual_cancelled": "Atšaukta",
|
||||||
"backup_manual_in_progress": "Jau įkeliama, bandykite dar kartą vėliau",
|
"backup_manual_in_progress": "Jau įkeliama, bandykite dar kartą vėliau",
|
||||||
|
"backup_manual_success": "Pavyko",
|
||||||
|
"backup_manual_title": "Įkėlimo būklė",
|
||||||
|
"backup_options": "Atsarginio kopijavimo nustatymai",
|
||||||
|
"backup_options_page_title": "Atsarginio kopijavimo nustatymai",
|
||||||
|
"backup_setting_subtitle": "Tvarkyti foninio ir priekinio plano įkėlimo nustatymus",
|
||||||
|
"backup_settings_subtitle": "Tvarkyti įkėlimo nustatymus",
|
||||||
|
"backward": "Atgalinis",
|
||||||
|
"biometric_auth_enabled": "Biometrinis autentifikavimas įgalintas",
|
||||||
|
"biometric_locked_out": "Jūs esate užblokuotas biometrinio autentifikavimo funkcijai",
|
||||||
|
"biometric_no_options": "Nėra galimų biometrinių nustatymų",
|
||||||
|
"biometric_not_available": "Biometrinis autentifikavimas šiame įrenginyje negalimas",
|
||||||
"birthdate_saved": "Sėkmingai išsaugota gimimo data",
|
"birthdate_saved": "Sėkmingai išsaugota gimimo data",
|
||||||
"birthdate_set_description": "Gimimo data naudojama apskaičiuoti asmens amžių nuotraukos darymo metu.",
|
"birthdate_set_description": "Gimimo data naudojama apskaičiuoti asmens amžių nuotraukos darymo metu.",
|
||||||
"blurred_background": "Neryškus fonas",
|
"blurred_background": "Neryškus fonas",
|
||||||
@@ -416,42 +608,104 @@
|
|||||||
"bulk_keep_duplicates_confirmation": "Ar tikrai norite palikti visus {count, plural, one {# besidubliuojantį elementą} few {# besidubliuojančius elementus} other {# besidubliuojančių elementų}}? Tokiu būdu nieko netrinant bus sutvarkytos visos dublikatų grupės.",
|
"bulk_keep_duplicates_confirmation": "Ar tikrai norite palikti visus {count, plural, one {# besidubliuojantį elementą} few {# besidubliuojančius elementus} other {# besidubliuojančių elementų}}? Tokiu būdu nieko netrinant bus sutvarkytos visos dublikatų grupės.",
|
||||||
"bulk_trash_duplicates_confirmation": "Ar tikrai norite perkelti į šiukšliadėžę visus {count, plural, one {# besidubliuojantį elementą} few {# besidubliuojančius elementus} other {# besidubliuojančių elementų}}? Bus paliktas didžiausias kiekvienos grupės elementas ir į šiukšliadėžę perkelti kiti besidubliuojantys elementai.",
|
"bulk_trash_duplicates_confirmation": "Ar tikrai norite perkelti į šiukšliadėžę visus {count, plural, one {# besidubliuojantį elementą} few {# besidubliuojančius elementus} other {# besidubliuojančių elementų}}? Bus paliktas didžiausias kiekvienos grupės elementas ir į šiukšliadėžę perkelti kiti besidubliuojantys elementai.",
|
||||||
"buy": "Įsigyti Immich",
|
"buy": "Įsigyti Immich",
|
||||||
|
"cache_settings_clear_cache_button": "Išvalyti laikiną talpyklą",
|
||||||
|
"cache_settings_clear_cache_button_title": "Išvalo programos laikiną talpyklą. Tai gali smarkiai paveikti programos greitį, kol bus sukurta nauja laikinoji talpykla.",
|
||||||
|
"cache_settings_duplicated_assets_clear_button": "IŠVALYTI",
|
||||||
|
"cache_settings_duplicated_assets_subtitle": "Nuotraukos ir video įrašai kurie yra programos ignoruojamų sąraše",
|
||||||
|
"cache_settings_duplicated_assets_title": "Sudubliuoti elementai ({count})",
|
||||||
|
"cache_settings_statistics_album": "Bibliotekos miniatiūros",
|
||||||
|
"cache_settings_statistics_full": "Pilno dydžio nuotraukos",
|
||||||
|
"cache_settings_statistics_shared": "Bendrinamų albumų miniatiūros",
|
||||||
|
"cache_settings_statistics_thumbnail": "Miniatiūros",
|
||||||
|
"cache_settings_statistics_title": "Laikinos talpyklos naudojimas",
|
||||||
|
"cache_settings_subtitle": "Valdykite Immich mobiliosios programos laikinosios talpyklos elgesį",
|
||||||
|
"cache_settings_tile_subtitle": "Valdykite vietinės talpyklos elgesį",
|
||||||
|
"cache_settings_tile_title": "Vietinė talpykla",
|
||||||
|
"cache_settings_title": "Laikinosios talpyklos nustatymai",
|
||||||
"camera": "Fotoaparatas",
|
"camera": "Fotoaparatas",
|
||||||
"camera_brand": "Fotoaparato prekės ženklas",
|
"camera_brand": "Fotoaparato prekės ženklas",
|
||||||
"camera_model": "Fotoaparato modelis",
|
"camera_model": "Fotoaparato modelis",
|
||||||
"cancel": "Atšaukti",
|
"cancel": "Atšaukti",
|
||||||
"cancel_search": "Atšaukti paiešką",
|
"cancel_search": "Atšaukti paiešką",
|
||||||
|
"canceled": "Atšaukta",
|
||||||
|
"canceling": "Atšaukiama",
|
||||||
"cannot_merge_people": "Negalima sujungti asmenų",
|
"cannot_merge_people": "Negalima sujungti asmenų",
|
||||||
|
"cannot_undo_this_action": "Jūs negalėsite atkurti po šio veiksmo!",
|
||||||
"cannot_update_the_description": "Negalima atnaujinti aprašymo",
|
"cannot_update_the_description": "Negalima atnaujinti aprašymo",
|
||||||
|
"cast": "Transliuoti",
|
||||||
|
"cast_description": "Valdyti galimas transliavimo kryptis",
|
||||||
"change_date": "Pakeisti datą",
|
"change_date": "Pakeisti datą",
|
||||||
|
"change_description": "Pakeisti aprašymus",
|
||||||
|
"change_display_order": "Pakeisti atvaizdavimo tvarką",
|
||||||
"change_expiration_time": "Pakeisti galiojimo trukmę",
|
"change_expiration_time": "Pakeisti galiojimo trukmę",
|
||||||
"change_location": "Pakeisti vietovę",
|
"change_location": "Pakeisti vietovę",
|
||||||
"change_name": "Pakeisti vardą",
|
"change_name": "Pakeisti vardą",
|
||||||
|
"change_name_successfully": "Vardas pakeistas sėkmingai",
|
||||||
"change_password": "Pakeisti slaptažodį",
|
"change_password": "Pakeisti slaptažodį",
|
||||||
"change_password_description": "Tai arba pirmas kartas, kai jungiatės prie sistemos, arba buvo pateikta užklausa pakeisti jūsų slaptažodį. Prašome įvesti naują slaptažodį žemiau.",
|
"change_password_description": "Tai arba pirmas kartas, kai jungiatės prie sistemos, arba buvo pateikta užklausa pakeisti jūsų slaptažodį. Prašome įvesti naują slaptažodį žemiau.",
|
||||||
|
"change_password_form_confirm_password": "Patvirtinti slaptažodį",
|
||||||
|
"change_password_form_description": "Labas {name},\n\nTai yra pirmas kartas kai tu prisijungei prie sistemos arba buvo prašymas pakeisti slaptažodį. Prašome įvesti naują slaptažodį žemiau.",
|
||||||
|
"change_password_form_new_password": "Naujas slaptažodis",
|
||||||
|
"change_password_form_password_mismatch": "Slaptažodžiai nesutampa",
|
||||||
|
"change_password_form_reenter_new_password": "Pakartotinai įveskite naują slaptažodį",
|
||||||
|
"change_pin_code": "Pakeisti PIN kodą",
|
||||||
"change_your_password": "Pakeisti slaptažodį",
|
"change_your_password": "Pakeisti slaptažodį",
|
||||||
"changed_visibility_successfully": "Matomumas pakeistas sėkmingai",
|
"changed_visibility_successfully": "Matomumas pakeistas sėkmingai",
|
||||||
|
"check_corrupt_asset_backup": "Patikrinti sugadintų elementų atsarginę kopiją",
|
||||||
|
"check_corrupt_asset_backup_button": "Atlikti patikrinimą",
|
||||||
|
"check_corrupt_asset_backup_description": "Paleiskite šį patikrinimą tik per Wi-Fi ir tik kai visi elementai buvo perkopijuoti. Ši procedūra užtruks kelias minutes.",
|
||||||
"check_logs": "Tikrinti žurnalus",
|
"check_logs": "Tikrinti žurnalus",
|
||||||
|
"choose_matching_people_to_merge": "Pasirinkite atitinkančius žmones sujungimui",
|
||||||
"city": "Miestas",
|
"city": "Miestas",
|
||||||
"clear": "Išvalyti",
|
"clear": "Išvalyti",
|
||||||
"clear_all": "Išvalyti viską",
|
"clear_all": "Išvalyti viską",
|
||||||
|
"clear_all_recent_searches": "Išvalyti visas naujausias paieškas",
|
||||||
|
"clear_file_cache": "Išvalyti failų laikiną talpyklą",
|
||||||
"clear_message": "Išvalyti pranešimą",
|
"clear_message": "Išvalyti pranešimą",
|
||||||
"clear_value": "Išvalyti reikšmę",
|
"clear_value": "Išvalyti reikšmę",
|
||||||
|
"client_cert_dialog_msg_confirm": "OK",
|
||||||
|
"client_cert_enter_password": "Įveskite slaptažodį",
|
||||||
|
"client_cert_import": "Importuoti",
|
||||||
|
"client_cert_import_success_msg": "Kliento sertifikatas yra importuotas",
|
||||||
"client_cert_invalid_msg": "Netinkamas sertifikato failas arba neteisingas slaptažodis",
|
"client_cert_invalid_msg": "Netinkamas sertifikato failas arba neteisingas slaptažodis",
|
||||||
|
"client_cert_remove_msg": "Kliento sertifikatas yra pašalintas",
|
||||||
|
"client_cert_subtitle": "Palaikomi tik PKCS12 (.p12, .pfx) formatai. Sertifikato importavimas/pašalinimas galimas tik prieš prisijungimą",
|
||||||
|
"client_cert_title": "SSL kliento sertifikatas",
|
||||||
|
"clockwise": "Pagal laikrodžio rodykles",
|
||||||
"close": "Uždaryti",
|
"close": "Uždaryti",
|
||||||
"collapse": "Suskleisti",
|
"collapse": "Suskleisti",
|
||||||
"collapse_all": "Suskleisti viską",
|
"collapse_all": "Suskleisti viską",
|
||||||
|
"color": "Spalva",
|
||||||
"color_theme": "Temos spalva",
|
"color_theme": "Temos spalva",
|
||||||
"comment_deleted": "Komentaras ištrintas",
|
"comment_deleted": "Komentaras ištrintas",
|
||||||
"comment_options": "Komentarų parinktys",
|
"comment_options": "Komentarų parinktys",
|
||||||
"comments_and_likes": "Komentarai ir patiktukai",
|
"comments_and_likes": "Komentarai ir patiktukai",
|
||||||
"comments_are_disabled": "Komentarai yra išjungti",
|
"comments_are_disabled": "Komentarai yra išjungti",
|
||||||
|
"common_create_new_album": "Sukurti naują albumą",
|
||||||
|
"common_server_error": "Prašome patikrinti tinklo prisijungimą ir įsitikinti, kad serveris pasiekiamas ir programos/serverio versija sutampa.",
|
||||||
|
"completed": "Atlikta",
|
||||||
"confirm": "Patvirtinti",
|
"confirm": "Patvirtinti",
|
||||||
"confirm_admin_password": "Patvirtinti administratoriaus slaptažodį",
|
"confirm_admin_password": "Patvirtinti administratoriaus slaptažodį",
|
||||||
|
"confirm_delete_face": "Ar tikrai norite ištrinti {name} veidą iš elementų?",
|
||||||
"confirm_delete_shared_link": "Ar tikrai norite ištrinti šią bendrinimo nuorodą?",
|
"confirm_delete_shared_link": "Ar tikrai norite ištrinti šią bendrinimo nuorodą?",
|
||||||
|
"confirm_keep_this_delete_others": "Visi kiti elementai iš krūvos bus ištrinti išskyrus šį elementą. Ar tikrai norite tęsti?",
|
||||||
|
"confirm_new_pin_code": "Patvirtinkite naują PIN kodą",
|
||||||
"confirm_password": "Patvirtinti slaptažodį",
|
"confirm_password": "Patvirtinti slaptažodį",
|
||||||
|
"confirm_tag_face": "Ar norite priskirti šį veidą kaip {name}?",
|
||||||
|
"confirm_tag_face_unnamed": "Ar norite priskirti šį veidą?",
|
||||||
|
"connected_device": "Prijungtas įrenginys",
|
||||||
|
"connected_to": "Prisijungta prie",
|
||||||
|
"contain": "Tilpti",
|
||||||
"context": "Kontekstas",
|
"context": "Kontekstas",
|
||||||
"continue": "Tęsti",
|
"continue": "Tęsti",
|
||||||
|
"control_bottom_app_bar_create_new_album": "Sukurti naują albumą",
|
||||||
|
"control_bottom_app_bar_delete_from_immich": "Ištrinti iš Immich",
|
||||||
|
"control_bottom_app_bar_delete_from_local": "Ištrinti iš įrenginio",
|
||||||
|
"control_bottom_app_bar_edit_location": "Redaguoti vietovę",
|
||||||
|
"control_bottom_app_bar_edit_time": "Redaguoti datą ir laiką",
|
||||||
|
"control_bottom_app_bar_share_link": "Dalintis nuoroda",
|
||||||
|
"control_bottom_app_bar_share_to": "Dalintis su",
|
||||||
|
"control_bottom_app_bar_trash_from_immich": "Perkelti į šiukšliadėžę",
|
||||||
"copied_image_to_clipboard": "Nuotrauka nukopijuota į iškarpinę.",
|
"copied_image_to_clipboard": "Nuotrauka nukopijuota į iškarpinę.",
|
||||||
"copied_to_clipboard": "Nukopijuota į iškapinę!",
|
"copied_to_clipboard": "Nukopijuota į iškapinę!",
|
||||||
"copy_error": "Kopijavimo klaida",
|
"copy_error": "Kopijavimo klaida",
|
||||||
@@ -462,6 +716,8 @@
|
|||||||
"copy_password": "Kopijuoti slaptažodį",
|
"copy_password": "Kopijuoti slaptažodį",
|
||||||
"copy_to_clipboard": "Kopijuoti į iškarpinę",
|
"copy_to_clipboard": "Kopijuoti į iškarpinę",
|
||||||
"country": "Šalis",
|
"country": "Šalis",
|
||||||
|
"cover": "Užpildyti",
|
||||||
|
"covers": "Viršeliai",
|
||||||
"create": "Sukurti",
|
"create": "Sukurti",
|
||||||
"create_album": "Sukurti albumą",
|
"create_album": "Sukurti albumą",
|
||||||
"create_album_page_untitled": "Be pavadinimo",
|
"create_album_page_untitled": "Be pavadinimo",
|
||||||
@@ -469,57 +725,115 @@
|
|||||||
"create_link": "Sukurti nuorodą",
|
"create_link": "Sukurti nuorodą",
|
||||||
"create_link_to_share": "Sukurti bendrinimo nuorodą",
|
"create_link_to_share": "Sukurti bendrinimo nuorodą",
|
||||||
"create_link_to_share_description": "Leisti bet kam su nuoroda matyti pažymėtą(-as) nuotrauką(-as)",
|
"create_link_to_share_description": "Leisti bet kam su nuoroda matyti pažymėtą(-as) nuotrauką(-as)",
|
||||||
|
"create_new": "SUKURTI NAUJĄ",
|
||||||
"create_new_person": "Sukurti naują žmogų",
|
"create_new_person": "Sukurti naują žmogų",
|
||||||
"create_new_person_hint": "Priskirti pasirinktus elementus naujam žmogui",
|
"create_new_person_hint": "Priskirti pasirinktus elementus naujam žmogui",
|
||||||
"create_new_user": "Sukurti naują varotoją",
|
"create_new_user": "Sukurti naują varotoją",
|
||||||
|
"create_shared_album_page_share_add_assets": "PRIDĖTI ELEMENTŲ",
|
||||||
|
"create_shared_album_page_share_select_photos": "Pažymėti nuotraukas",
|
||||||
|
"create_shared_link": "Sukurti dalijimosi nuorodą",
|
||||||
"create_tag": "Sukurti žymą",
|
"create_tag": "Sukurti žymą",
|
||||||
"create_tag_description": "Sukurti naują žymą. Įdėtinėms žymoms įveskite pilną kelią, įskaitant pasviruosius brūkšnius.",
|
"create_tag_description": "Sukurti naują žymą. Įdėtinėms žymoms įveskite pilną kelią, įskaitant pasviruosius brūkšnius.",
|
||||||
"create_user": "Sukurti naudotoją",
|
"create_user": "Sukurti naudotoją",
|
||||||
"created": "Sukurta",
|
"created": "Sukurta",
|
||||||
|
"created_at": "Sukurta",
|
||||||
|
"crop": "Apkirpti",
|
||||||
|
"curated_object_page_title": "Daiktai",
|
||||||
"current_device": "Dabartinis įrenginys",
|
"current_device": "Dabartinis įrenginys",
|
||||||
|
"current_pin_code": "Dabartinis PIN kodas",
|
||||||
|
"current_server_address": "Dabartinis serverio adresas",
|
||||||
|
"custom_locale": "Pasirinktinė vietovė",
|
||||||
"custom_locale_description": "Formatuoti datas ir skaičius pagal kalbą ir regioną",
|
"custom_locale_description": "Formatuoti datas ir skaičius pagal kalbą ir regioną",
|
||||||
|
"custom_url": "Pasirinktinis URL",
|
||||||
|
"daily_title_text_date": "E, MMM dd",
|
||||||
|
"daily_title_text_date_year": "E, MMM dd, yyyy",
|
||||||
|
"dark": "Tamsi",
|
||||||
|
"dark_theme": "Perjungti tamsią temą",
|
||||||
"date_after": "Data po",
|
"date_after": "Data po",
|
||||||
"date_and_time": "Data ir laikas",
|
"date_and_time": "Data ir laikas",
|
||||||
"date_before": "Data prieš",
|
"date_before": "Data prieš",
|
||||||
|
"date_format": "E, LLL d, y • h:mm",
|
||||||
"date_of_birth_saved": "Gimimo data sėkmingai išsaugota",
|
"date_of_birth_saved": "Gimimo data sėkmingai išsaugota",
|
||||||
|
"date_range": "Datų intervalas",
|
||||||
"day": "Diena",
|
"day": "Diena",
|
||||||
|
"days": "Dienų",
|
||||||
"deduplicate_all": "Šalinti visus dublikatus",
|
"deduplicate_all": "Šalinti visus dublikatus",
|
||||||
"deduplication_criteria_1": "Failo dydis baitais",
|
"deduplication_criteria_1": "Failo dydis baitais",
|
||||||
"deduplication_criteria_2": "EXIF metaduomenų įrašų skaičius",
|
"deduplication_criteria_2": "EXIF metaduomenų įrašų skaičius",
|
||||||
"deduplication_info": "Dublikatų šalinimo informacija",
|
"deduplication_info": "Dublikatų šalinimo informacija",
|
||||||
"deduplication_info_description": "Automatinis elementų parinkimas ir masinis dublikatų šalinimas atliekamas atsižvelgiant į:",
|
"deduplication_info_description": "Automatinis elementų parinkimas ir masinis dublikatų šalinimas atliekamas atsižvelgiant į:",
|
||||||
|
"default_locale": "Pradinė vietovė",
|
||||||
"default_locale_description": "Formatuoti datas ir skaičius pagal jūsų naršyklės lokalę",
|
"default_locale_description": "Formatuoti datas ir skaičius pagal jūsų naršyklės lokalę",
|
||||||
"delete": "Ištrinti",
|
"delete": "Ištrinti",
|
||||||
|
"delete_action_confirmation_message": "Ar tikrai norite ištrinti šį elementą? Šis veiksmas perkels elementą į serverio šiukšliadėžę ir paklaus ar norite ištrinti vietiniame įrenginyje",
|
||||||
|
"delete_action_prompt": "{count} ištrinta",
|
||||||
"delete_album": "Ištrinti albumą",
|
"delete_album": "Ištrinti albumą",
|
||||||
"delete_api_key_prompt": "Ar tikrai norite ištrinti šį API raktą?",
|
"delete_api_key_prompt": "Ar tikrai norite ištrinti šį API raktą?",
|
||||||
|
"delete_dialog_alert": "Šie elementai bus galutinai ištrinti iš Immich ir iš jūsų įrenginio",
|
||||||
|
"delete_dialog_alert_local": "Šie elementai bus galutinai pašalinti iš jūsų įrenginio, bet bus prieinami Immich serveryje",
|
||||||
|
"delete_dialog_alert_local_non_backed_up": "Kai kurie elementai be Immich atsarginės kopijos ir bus galutinai pašalinti iš jūsų įrenginio",
|
||||||
|
"delete_dialog_alert_remote": "Šie elementai bus galutinai ištrinti iš Immich serverio",
|
||||||
|
"delete_dialog_ok_force": "Vis tiek ištrinti",
|
||||||
|
"delete_dialog_title": "Ištrinti galutinai",
|
||||||
"delete_duplicates_confirmation": "Ar tikrai norite visam laikui ištrinti šiuos dublikatus?",
|
"delete_duplicates_confirmation": "Ar tikrai norite visam laikui ištrinti šiuos dublikatus?",
|
||||||
|
"delete_face": "Ištrinti veidą",
|
||||||
"delete_key": "Ištrinti raktą",
|
"delete_key": "Ištrinti raktą",
|
||||||
"delete_library": "Ištrinti biblioteką",
|
"delete_library": "Ištrinti biblioteką",
|
||||||
"delete_link": "Ištrinti nuorodą",
|
"delete_link": "Ištrinti nuorodą",
|
||||||
|
"delete_local_action_prompt": "{count} ištrinti vietiniame įrenginyje",
|
||||||
|
"delete_local_dialog_ok_backed_up_only": "Ištrinti tik turinčius atsarginę kopiją",
|
||||||
|
"delete_local_dialog_ok_force": "Vis tiek ištrinti",
|
||||||
|
"delete_others": "Ištrinti kitus",
|
||||||
|
"delete_permanently": "Ištrinti galutinai",
|
||||||
|
"delete_permanently_action_prompt": "{count} ištrinta galutinai",
|
||||||
"delete_shared_link": "Ištrinti bendrinimo nuorodą",
|
"delete_shared_link": "Ištrinti bendrinimo nuorodą",
|
||||||
|
"delete_shared_link_dialog_title": "Ištrinti dalijimosi nuorodą",
|
||||||
"delete_tag": "Ištrinti žymą",
|
"delete_tag": "Ištrinti žymą",
|
||||||
"delete_tag_confirmation_prompt": "Ar tikrai norite ištrinti žymą {tagName}?",
|
"delete_tag_confirmation_prompt": "Ar tikrai norite ištrinti žymą {tagName}?",
|
||||||
"delete_user": "Ištrinti naudotoją",
|
"delete_user": "Ištrinti naudotoją",
|
||||||
"deleted_shared_link": "Bendrinimo nuoroda ištrinta",
|
"deleted_shared_link": "Bendrinimo nuoroda ištrinta",
|
||||||
|
"deletes_missing_assets": "Ištrinti diske trūkstamus elementus",
|
||||||
"description": "Aprašymas",
|
"description": "Aprašymas",
|
||||||
|
"description_input_hint_text": "Pridėti aprašymą...",
|
||||||
|
"description_input_submit_error": "Klaida atnaujinant aprašymą, pasitikrinkite žurnalą norint detalesnės informacijos",
|
||||||
|
"deselect_all": "Atžymėti visus",
|
||||||
"details": "Detalės",
|
"details": "Detalės",
|
||||||
"direction": "Kryptis",
|
"direction": "Kryptis",
|
||||||
"disabled": "Išjungta",
|
"disabled": "Išjungta",
|
||||||
"disallow_edits": "Neleisti redaguoti",
|
"disallow_edits": "Neleisti redaguoti",
|
||||||
|
"discord": "Discord",
|
||||||
"discover": "Atrasti",
|
"discover": "Atrasti",
|
||||||
|
"discovered_devices": "Aptikti įrenginiai",
|
||||||
"dismiss_all_errors": "Nepaisyti visų klaidų",
|
"dismiss_all_errors": "Nepaisyti visų klaidų",
|
||||||
"dismiss_error": "Nepaisyti klaidos",
|
"dismiss_error": "Nepaisyti klaidos",
|
||||||
|
"display_options": "Atvaizdavimo parinktys",
|
||||||
"display_order": "Atvaizdavimo tvarka",
|
"display_order": "Atvaizdavimo tvarka",
|
||||||
"display_original_photos": "Rodyti originalias nuotraukas",
|
"display_original_photos": "Rodyti originalias nuotraukas",
|
||||||
|
"display_original_photos_setting_description": "Pirmenybė rodyti originalią nuotrauką vietoje miniatiūros kai originalo elementas yra palaikomas naršyklės. Tai gali lemti lėtesnį nuotraukos rodymo greitį.",
|
||||||
"do_not_show_again": "Daugiau nerodyti šio pranešimo",
|
"do_not_show_again": "Daugiau nerodyti šio pranešimo",
|
||||||
"documentation": "Dokumentacija",
|
"documentation": "Dokumentacija",
|
||||||
|
"done": "Atlikta",
|
||||||
"download": "Atsisiųsti",
|
"download": "Atsisiųsti",
|
||||||
|
"download_action_prompt": "Atsisiunčiami {count} elementai",
|
||||||
|
"download_canceled": "Atsisiuntimas atšauktas",
|
||||||
|
"download_complete": "Atsisiuntimas pabaigtas",
|
||||||
|
"download_enqueue": "Atsisiuntimai įtraukti į eilę",
|
||||||
|
"download_error": "Atsisiuntimo klaida",
|
||||||
"download_failed": "Nepavyko parsisiųsti",
|
"download_failed": "Nepavyko parsisiųsti",
|
||||||
|
"download_finished": "Atsisiuntimas pabaigtas",
|
||||||
|
"download_include_embedded_motion_videos": "Įterpti vaizdo įrašai",
|
||||||
"download_include_embedded_motion_videos_description": "Pridėti prie judesio nuotraukų įterptus video kaip atskirą failą",
|
"download_include_embedded_motion_videos_description": "Pridėti prie judesio nuotraukų įterptus video kaip atskirą failą",
|
||||||
|
"download_notfound": "Atsisiuntimas nerastas",
|
||||||
"download_paused": "Atsisiuntimas pristabdytas",
|
"download_paused": "Atsisiuntimas pristabdytas",
|
||||||
"download_settings": "Atsisiųsti",
|
"download_settings": "Atsisiųsti",
|
||||||
|
"download_settings_description": "Tvarkyti elementų atsisiuntimo nustatymus",
|
||||||
|
"download_started": "Atsisiuntimas pradėtas",
|
||||||
|
"download_sucess": "Atsisiuntimas pavyko",
|
||||||
|
"download_sucess_android": "Medija buvo atsiųsta į DCIM/Immich",
|
||||||
|
"download_waiting_to_retry": "Laukiama bandymo iš naujo",
|
||||||
"downloading": "Siunčiama",
|
"downloading": "Siunčiama",
|
||||||
"downloading_asset_filename": "Parsisiunčiamas resursas {filename}",
|
"downloading_asset_filename": "Parsisiunčiamas resursas {filename}",
|
||||||
|
"downloading_media": "Atsisiunčiama medija",
|
||||||
"drop_files_to_upload": "Užkelkite failus bet kurioje vietoje kad įkeltumėte",
|
"drop_files_to_upload": "Užkelkite failus bet kurioje vietoje kad įkeltumėte",
|
||||||
"duplicates": "Dublikatai",
|
"duplicates": "Dublikatai",
|
||||||
"duplicates_description": "Sutvarkykite kiekvieną elementų grupę nurodydami elementus, kurie yra dublikatai (jei tokių yra)",
|
"duplicates_description": "Sutvarkykite kiekvieną elementų grupę nurodydami elementus, kurie yra dublikatai (jei tokių yra)",
|
||||||
@@ -527,8 +841,14 @@
|
|||||||
"edit": "Redaguoti",
|
"edit": "Redaguoti",
|
||||||
"edit_album": "Redaguoti albumą",
|
"edit_album": "Redaguoti albumą",
|
||||||
"edit_avatar": "Redaguoti avatarą",
|
"edit_avatar": "Redaguoti avatarą",
|
||||||
|
"edit_birthday": "Redaguoti gimtadienį",
|
||||||
"edit_date": "Redaguoti datą",
|
"edit_date": "Redaguoti datą",
|
||||||
"edit_date_and_time": "Redaguoti datą ir laiką",
|
"edit_date_and_time": "Redaguoti datą ir laiką",
|
||||||
|
"edit_date_and_time_action_prompt": "{count} data ir laikas redaguotas",
|
||||||
|
"edit_date_and_time_by_offset": "Keisti datą pagal poslinkį",
|
||||||
|
"edit_date_and_time_by_offset_interval": "Naujas datos intervalas: {from} - {to}",
|
||||||
|
"edit_description": "Redaguoti aprašymą",
|
||||||
|
"edit_description_prompt": "Prašome pasirinkti naują aprašymą:",
|
||||||
"edit_exclusion_pattern": "Redaguoti išimčių šabloną",
|
"edit_exclusion_pattern": "Redaguoti išimčių šabloną",
|
||||||
"edit_faces": "Redaguoti veidus",
|
"edit_faces": "Redaguoti veidus",
|
||||||
"edit_import_path": "Redaguoti importavimo kelią",
|
"edit_import_path": "Redaguoti importavimo kelią",
|
||||||
@@ -536,41 +856,79 @@
|
|||||||
"edit_key": "Redaguoti raktą",
|
"edit_key": "Redaguoti raktą",
|
||||||
"edit_link": "Redaguoti nuorodą",
|
"edit_link": "Redaguoti nuorodą",
|
||||||
"edit_location": "Redaguoti vietovę",
|
"edit_location": "Redaguoti vietovę",
|
||||||
|
"edit_location_action_prompt": "{count} vietovės pakeistos",
|
||||||
|
"edit_location_dialog_title": "Vietovė",
|
||||||
"edit_name": "Redaguoti vardą",
|
"edit_name": "Redaguoti vardą",
|
||||||
"edit_people": "Redaguoti žmones",
|
"edit_people": "Redaguoti žmones",
|
||||||
"edit_tag": "Redaguoti žymą",
|
"edit_tag": "Redaguoti žymą",
|
||||||
"edit_title": "Redaguoti antraštę",
|
"edit_title": "Redaguoti antraštę",
|
||||||
"edit_user": "Redaguoti naudotoją",
|
"edit_user": "Redaguoti naudotoją",
|
||||||
"edited": "Redaguota",
|
"edited": "Redaguota",
|
||||||
|
"editor": "Redaktorius",
|
||||||
|
"editor_close_without_save_prompt": "Pakeitimai nebus išsaugoti",
|
||||||
|
"editor_close_without_save_title": "Uždaryti redaktorių?",
|
||||||
|
"editor_crop_tool_h2_aspect_ratios": "Vaizdo santykis",
|
||||||
|
"editor_crop_tool_h2_rotation": "Pasukimas",
|
||||||
"email": "El. paštas",
|
"email": "El. paštas",
|
||||||
|
"email_notifications": "El. pašto pranešimai",
|
||||||
|
"empty_folder": "Šis katalogas yra tuščias",
|
||||||
"empty_trash": "Ištuštinti šiukšliadėžę",
|
"empty_trash": "Ištuštinti šiukšliadėžę",
|
||||||
|
"empty_trash_confirmation": "Ar tikrai norite ištuštinti šiukšliadėžę? Tai galutinai pašalins elementus iš Immich.\nJūs negalėsite atkurti šio veiksmo!",
|
||||||
"enable": "Įgalinti",
|
"enable": "Įgalinti",
|
||||||
|
"enable_backup": "Įgalinti atsargines kopijas",
|
||||||
|
"enable_biometric_auth_description": "Įveskite savo PIN kodą biometrinės autentifikacijos įjungimui",
|
||||||
"enabled": "Įgalintas",
|
"enabled": "Įgalintas",
|
||||||
"end_date": "Pabaigos data",
|
"end_date": "Pabaigos data",
|
||||||
"enter_wifi_name": "Enter WiFi name",
|
"enqueued": "Įtraukta į eilę",
|
||||||
|
"enter_wifi_name": "Įveskite Wi-Fi pavadinimą",
|
||||||
|
"enter_your_pin_code": "Įveskite savo PIN kodą",
|
||||||
"enter_your_pin_code_subtitle": "Įveskite savo PIN kodą, kad pasiektumėte užrakintą aplanką",
|
"enter_your_pin_code_subtitle": "Įveskite savo PIN kodą, kad pasiektumėte užrakintą aplanką",
|
||||||
"error": "Klaida",
|
"error": "Klaida",
|
||||||
|
"error_change_sort_album": "Nepavyko pakeisti albumo rūšiavimo tvarkos",
|
||||||
|
"error_delete_face": "Klaida trinant veidą iš elementų",
|
||||||
"error_loading_image": "Klaida įkeliant vaizdą",
|
"error_loading_image": "Klaida įkeliant vaizdą",
|
||||||
|
"error_saving_image": "Klaida: {error}",
|
||||||
|
"error_tag_face_bounding_box": "Klaida aprašant veidą - nepavyko gauti veido vietos koordinačių",
|
||||||
"error_title": "Klaida - Kažkas nutiko ne taip",
|
"error_title": "Klaida - Kažkas nutiko ne taip",
|
||||||
"errors": {
|
"errors": {
|
||||||
|
"cannot_navigate_next_asset": "Negalima pereiti prie sekančio elemento",
|
||||||
|
"cannot_navigate_previous_asset": "Negalima pereiti prie buvusio elemento",
|
||||||
"cant_apply_changes": "Negalima taikyti pakeitimų",
|
"cant_apply_changes": "Negalima taikyti pakeitimų",
|
||||||
|
"cant_change_activity": "Negalima {enabled, select, true {išjungti} other {įjungti}} veiklos",
|
||||||
|
"cant_change_asset_favorite": "Elementui negalima pakeisti mėgstamiausio",
|
||||||
|
"cant_change_metadata_assets_count": "Negalima pakeisti {count, plural, one {# elemento} other {# elementų}} metadata",
|
||||||
|
"cant_get_faces": "Nepavyko gauti veidus",
|
||||||
|
"cant_get_number_of_comments": "Nepavyko gauti komentarų skaičiaus",
|
||||||
|
"cant_search_people": "Negalima ieškoti žmonių",
|
||||||
|
"cant_search_places": "Negalima ieškoti vietovių",
|
||||||
"error_adding_assets_to_album": "Klaida pridedant elementus į albumą",
|
"error_adding_assets_to_album": "Klaida pridedant elementus į albumą",
|
||||||
"error_adding_users_to_album": "Klaida pridedant naudotojus prie albumo",
|
"error_adding_users_to_album": "Klaida pridedant naudotojus prie albumo",
|
||||||
|
"error_deleting_shared_user": "Klaida trinant pasidalintą naudotoją",
|
||||||
"error_downloading": "Klaida atsisiunčiant {filename}",
|
"error_downloading": "Klaida atsisiunčiant {filename}",
|
||||||
"error_hiding_buy_button": "Klaida slepiant pirkimo mygtuką",
|
"error_hiding_buy_button": "Klaida slepiant pirkimo mygtuką",
|
||||||
"error_removing_assets_from_album": "Klaida šalinant elementus iš albumo, patikrinkite konsolę dėl išsamesnės informacijos",
|
"error_removing_assets_from_album": "Klaida šalinant elementus iš albumo, patikrinkite konsolę dėl išsamesnės informacijos",
|
||||||
|
"error_selecting_all_assets": "Klaida pasirenkant visus elementus",
|
||||||
"exclusion_pattern_already_exists": "Šis išimčių šablonas jau egzistuoja.",
|
"exclusion_pattern_already_exists": "Šis išimčių šablonas jau egzistuoja.",
|
||||||
"failed_to_create_album": "Nepavyko sukurti albumo",
|
"failed_to_create_album": "Nepavyko sukurti albumo",
|
||||||
"failed_to_create_shared_link": "Nepavyko sukurti bendrinimo nuorodos",
|
"failed_to_create_shared_link": "Nepavyko sukurti bendrinimo nuorodos",
|
||||||
"failed_to_edit_shared_link": "Nepavyko redaguoti bendrinimo nuorodos",
|
"failed_to_edit_shared_link": "Nepavyko redaguoti bendrinimo nuorodos",
|
||||||
|
"failed_to_get_people": "Nepavyko gauti žmonių",
|
||||||
|
"failed_to_keep_this_delete_others": "Nepavyko palikti šį elementą ir ištrinti kitus elementus",
|
||||||
|
"failed_to_load_asset": "Nepavyko užkrauti elemento",
|
||||||
|
"failed_to_load_assets": "Nepavyko užrauti elementų",
|
||||||
|
"failed_to_load_notifications": "Nepavyko užkrauti pranešimų",
|
||||||
"failed_to_load_people": "Nepavyko užkrauti žmonių",
|
"failed_to_load_people": "Nepavyko užkrauti žmonių",
|
||||||
"failed_to_remove_product_key": "Nepavyko pašalinti produkto rakto",
|
"failed_to_remove_product_key": "Nepavyko pašalinti produkto rakto",
|
||||||
|
"failed_to_reset_pin_code": "Nepavyko atkurti PIN kodo",
|
||||||
"failed_to_stack_assets": "Nepavyko sugrupuoti elementų",
|
"failed_to_stack_assets": "Nepavyko sugrupuoti elementų",
|
||||||
"failed_to_unstack_assets": "Nepavyko išgrupuoti elementų",
|
"failed_to_unstack_assets": "Nepavyko išgrupuoti elementų",
|
||||||
|
"failed_to_update_notification_status": "Nepavyko atnaujinti pranešimo statuso",
|
||||||
"import_path_already_exists": "Šis importavimo kelias jau egzistuoja.",
|
"import_path_already_exists": "Šis importavimo kelias jau egzistuoja.",
|
||||||
"incorrect_email_or_password": "Neteisingas el. pašto adresas arba slaptažodis",
|
"incorrect_email_or_password": "Neteisingas el. pašto adresas arba slaptažodis",
|
||||||
|
"paths_validation_failed": "Nepavyko {paths, plural, one {# kelio} other {# kelių}} patvirtinimas",
|
||||||
"profile_picture_transparent_pixels": "Profilio nuotrauka negali turėti permatomų pikselių. Prašome priartinti ir/arba perkelkite nuotrauką.",
|
"profile_picture_transparent_pixels": "Profilio nuotrauka negali turėti permatomų pikselių. Prašome priartinti ir/arba perkelkite nuotrauką.",
|
||||||
"quota_higher_than_disk_size": "Nustatyta kvota, viršija disko dydį",
|
"quota_higher_than_disk_size": "Nustatyta kvota, viršija disko dydį",
|
||||||
|
"something_went_wrong": "Kažkas nepavyko",
|
||||||
"unable_to_add_album_users": "Nepavyksta pridėti naudotojų prie albumo",
|
"unable_to_add_album_users": "Nepavyksta pridėti naudotojų prie albumo",
|
||||||
"unable_to_add_assets_to_shared_link": "Nepavyko į bendrinimo nuorodą pridėti elementų",
|
"unable_to_add_assets_to_shared_link": "Nepavyko į bendrinimo nuorodą pridėti elementų",
|
||||||
"unable_to_add_comment": "Nepavyksta pridėti komentaro",
|
"unable_to_add_comment": "Nepavyksta pridėti komentaro",
|
||||||
@@ -578,11 +936,15 @@
|
|||||||
"unable_to_add_import_path": "Nepavyksta pridėti importavimo kelio",
|
"unable_to_add_import_path": "Nepavyksta pridėti importavimo kelio",
|
||||||
"unable_to_add_partners": "Nepavyksta pridėti partnerių",
|
"unable_to_add_partners": "Nepavyksta pridėti partnerių",
|
||||||
"unable_to_add_remove_archive": "Nepavyko {archived, select, true {ištraukti iš} other {pridėti prie}} arcyhvo",
|
"unable_to_add_remove_archive": "Nepavyko {archived, select, true {ištraukti iš} other {pridėti prie}} arcyhvo",
|
||||||
|
"unable_to_add_remove_favorites": "Nepavyko {favorite, select, true {įtraukti elemento į mėgstamiausius} other {pašalinti elemento iš mėgstamiausių}}",
|
||||||
"unable_to_archive_unarchive": "Nepavyko {archived, select, true {archyvuoti} other {išarchyvuoti}}",
|
"unable_to_archive_unarchive": "Nepavyko {archived, select, true {archyvuoti} other {išarchyvuoti}}",
|
||||||
"unable_to_change_album_user_role": "Nepavyksta pakeisti albumo naudotojo rolės",
|
"unable_to_change_album_user_role": "Nepavyksta pakeisti albumo naudotojo rolės",
|
||||||
"unable_to_change_date": "Negalima pakeisti datos",
|
"unable_to_change_date": "Negalima pakeisti datos",
|
||||||
|
"unable_to_change_description": "Nepavyko pakeisti aprašymo",
|
||||||
|
"unable_to_change_favorite": "Nepavyko pakeisti elementui mėgstamiausio",
|
||||||
"unable_to_change_location": "Negalima pakeisti vietos",
|
"unable_to_change_location": "Negalima pakeisti vietos",
|
||||||
"unable_to_change_password": "Negalima pakeisti slaptažodžio",
|
"unable_to_change_password": "Negalima pakeisti slaptažodžio",
|
||||||
|
"unable_to_change_visibility": "Nepavyko pakeisti matomumo {count, plural, one {# asmeniui} few {#asmenims} other {# asmenų}}",
|
||||||
"unable_to_complete_oauth_login": "Nepavyko prisijungti su OAuth",
|
"unable_to_complete_oauth_login": "Nepavyko prisijungti su OAuth",
|
||||||
"unable_to_connect": "Nepavyko prisijungti",
|
"unable_to_connect": "Nepavyko prisijungti",
|
||||||
"unable_to_copy_to_clipboard": "Negalima kopijuoti į iškarpinę, įsitikinkite, kad prie puslapio prieinate per https",
|
"unable_to_copy_to_clipboard": "Negalima kopijuoti į iškarpinę, įsitikinkite, kad prie puslapio prieinate per https",
|
||||||
@@ -591,6 +953,8 @@
|
|||||||
"unable_to_create_library": "Nepavyko sukurti bibliotekos",
|
"unable_to_create_library": "Nepavyko sukurti bibliotekos",
|
||||||
"unable_to_create_user": "Nepavyko sukurti naudotojo",
|
"unable_to_create_user": "Nepavyko sukurti naudotojo",
|
||||||
"unable_to_delete_album": "Nepavyksta ištrinti albumo",
|
"unable_to_delete_album": "Nepavyksta ištrinti albumo",
|
||||||
|
"unable_to_delete_asset": "Nepavyko ištrinti elemento",
|
||||||
|
"unable_to_delete_assets": "Klaida trinant elementus",
|
||||||
"unable_to_delete_exclusion_pattern": "Nepavyksta ištrinti išimčių šablono",
|
"unable_to_delete_exclusion_pattern": "Nepavyksta ištrinti išimčių šablono",
|
||||||
"unable_to_delete_import_path": "Nepavyksta ištrinti importavimo kelio",
|
"unable_to_delete_import_path": "Nepavyksta ištrinti importavimo kelio",
|
||||||
"unable_to_delete_shared_link": "Nepavyko ištrinti bendrinimo nuorodos",
|
"unable_to_delete_shared_link": "Nepavyko ištrinti bendrinimo nuorodos",
|
||||||
@@ -598,22 +962,37 @@
|
|||||||
"unable_to_download_files": "Nepavyksta atsisiųsti failų",
|
"unable_to_download_files": "Nepavyksta atsisiųsti failų",
|
||||||
"unable_to_edit_exclusion_pattern": "Nepavyksta redaguoti išimčių šablono",
|
"unable_to_edit_exclusion_pattern": "Nepavyksta redaguoti išimčių šablono",
|
||||||
"unable_to_edit_import_path": "Nepavyksta redaguoti išimčių kelio",
|
"unable_to_edit_import_path": "Nepavyksta redaguoti išimčių kelio",
|
||||||
|
"unable_to_empty_trash": "Nepavyko ištrinti šiukšliadėžės",
|
||||||
"unable_to_enter_fullscreen": "Nepavyksta pereiti į viso ekrano režimą",
|
"unable_to_enter_fullscreen": "Nepavyksta pereiti į viso ekrano režimą",
|
||||||
"unable_to_exit_fullscreen": "Nepavyksta išeiti iš viso ekrano režimo",
|
"unable_to_exit_fullscreen": "Nepavyksta išeiti iš viso ekrano režimo",
|
||||||
|
"unable_to_get_comments_number": "Nepavyko gauti komentarų skaičiaus",
|
||||||
"unable_to_get_shared_link": "Nepavyko gauti bendrinimo nuorodos",
|
"unable_to_get_shared_link": "Nepavyko gauti bendrinimo nuorodos",
|
||||||
"unable_to_hide_person": "Nepavyksta paslėpti žmogaus",
|
"unable_to_hide_person": "Nepavyksta paslėpti žmogaus",
|
||||||
|
"unable_to_link_motion_video": "Nepavyko susieti judesio video",
|
||||||
"unable_to_link_oauth_account": "Nepavyko susieti su OAuth paskyra",
|
"unable_to_link_oauth_account": "Nepavyko susieti su OAuth paskyra",
|
||||||
"unable_to_log_out_all_devices": "Nepavyksta atjungti visų įrenginių",
|
"unable_to_log_out_all_devices": "Nepavyksta atjungti visų įrenginių",
|
||||||
"unable_to_log_out_device": "Nepavyksta atjungti įrenginio",
|
"unable_to_log_out_device": "Nepavyksta atjungti įrenginio",
|
||||||
"unable_to_login_with_oauth": "Nepavyko prisijungti su OAuth",
|
"unable_to_login_with_oauth": "Nepavyko prisijungti su OAuth",
|
||||||
"unable_to_play_video": "Nepavyksta paleisti vaizdo įrašo",
|
"unable_to_play_video": "Nepavyksta paleisti vaizdo įrašo",
|
||||||
|
"unable_to_reassign_assets_existing_person": "Nepavyko priskirti elementų {name, select, null {egzistuojančiam asmeniui} other {{name}}}",
|
||||||
|
"unable_to_reassign_assets_new_person": "Nepavyko priskirti elementų naujam asmeniui",
|
||||||
"unable_to_refresh_user": "Nepavyksta atnaujinti naudotojo",
|
"unable_to_refresh_user": "Nepavyksta atnaujinti naudotojo",
|
||||||
|
"unable_to_remove_album_users": "Nepavyko pašalinti naudotojų iš albumo",
|
||||||
"unable_to_remove_api_key": "Nepavyko pašalinti API rakto",
|
"unable_to_remove_api_key": "Nepavyko pašalinti API rakto",
|
||||||
"unable_to_remove_assets_from_shared_link": "Nepavyko iš bendrinimo nuorodos pašalinti elementų",
|
"unable_to_remove_assets_from_shared_link": "Nepavyko iš bendrinimo nuorodos pašalinti elementų",
|
||||||
"unable_to_remove_library": "Nepavyksta pašalinti bibliotekos",
|
"unable_to_remove_library": "Nepavyksta pašalinti bibliotekos",
|
||||||
"unable_to_remove_partner": "Nepavyksta pašalinti partnerio",
|
"unable_to_remove_partner": "Nepavyksta pašalinti partnerio",
|
||||||
"unable_to_remove_reaction": "Nepavyksta pašalinti reakcijos",
|
"unable_to_remove_reaction": "Nepavyksta pašalinti reakcijos",
|
||||||
|
"unable_to_reset_password": "Nepavyko atnaujinti slaptažodžio",
|
||||||
|
"unable_to_reset_pin_code": "Nepavyko atnaujinti PIN kodo",
|
||||||
"unable_to_resolve_duplicate": "Nepavyko sutvarkyti dublikatų",
|
"unable_to_resolve_duplicate": "Nepavyko sutvarkyti dublikatų",
|
||||||
|
"unable_to_restore_assets": "Nepavyko atstatyti elementų",
|
||||||
|
"unable_to_restore_trash": "Nepavyko atstatyti iš šiukšliadėžės",
|
||||||
|
"unable_to_restore_user": "Nepavyko atstatyti naudotojo",
|
||||||
|
"unable_to_save_album": "Nepavyko išsaugoti albumo",
|
||||||
|
"unable_to_save_api_key": "Nepavyko išsaugoti API rakto",
|
||||||
|
"unable_to_save_date_of_birth": "Nepavyko išsaugoti gimimo datos",
|
||||||
|
"unable_to_save_name": "Nepavyko išsaugoti vardo",
|
||||||
"unable_to_save_profile": "Nepavyko išsaugoti profilio",
|
"unable_to_save_profile": "Nepavyko išsaugoti profilio",
|
||||||
"unable_to_save_settings": "Nepavyksta išsaugoti nustatymų",
|
"unable_to_save_settings": "Nepavyksta išsaugoti nustatymų",
|
||||||
"unable_to_scan_libraries": "Nepavyksta nuskaityti bibliotekų",
|
"unable_to_scan_libraries": "Nepavyksta nuskaityti bibliotekų",
|
||||||
@@ -622,39 +1001,104 @@
|
|||||||
"unable_to_set_profile_picture": "Nepavyksta nustatyti profilio nuotraukos",
|
"unable_to_set_profile_picture": "Nepavyksta nustatyti profilio nuotraukos",
|
||||||
"unable_to_submit_job": "Napvyko sukurti užduoties",
|
"unable_to_submit_job": "Napvyko sukurti užduoties",
|
||||||
"unable_to_trash_asset": "Nepavyko perkelti į šiukšliadėžę",
|
"unable_to_trash_asset": "Nepavyko perkelti į šiukšliadėžę",
|
||||||
|
"unable_to_unlink_account": "Nepavyko atsieti paskyrų",
|
||||||
|
"unable_to_unlink_motion_video": "Nepavyko atsieti judesio video",
|
||||||
|
"unable_to_update_album_cover": "Nepavyko atnaujinti albumo viršelio",
|
||||||
|
"unable_to_update_album_info": "Nepavyko atnaujinti albumo informacijos",
|
||||||
|
"unable_to_update_library": "Nepavyko atnaujinti bibliotekos",
|
||||||
|
"unable_to_update_location": "Nepavyko atnaujinti vietovės",
|
||||||
|
"unable_to_update_settings": "Nepavyko atnaujinti nustatymų",
|
||||||
|
"unable_to_update_timeline_display_status": "Nepavyko atnaujinti laiko juostos rodymo statuso",
|
||||||
|
"unable_to_update_user": "Nepavyko atnaujinti naudotoją",
|
||||||
"unable_to_upload_file": "Nepavyksta įkelti failo"
|
"unable_to_upload_file": "Nepavyksta įkelti failo"
|
||||||
},
|
},
|
||||||
|
"exif": "Exif",
|
||||||
|
"exif_bottom_sheet_description": "Pridėti aprašymą...",
|
||||||
|
"exif_bottom_sheet_description_error": "Klaida atnaujinant aprašymą",
|
||||||
|
"exif_bottom_sheet_details": "DETALĖS",
|
||||||
|
"exif_bottom_sheet_location": "VIETOVĖ",
|
||||||
|
"exif_bottom_sheet_people": "ŽMONĖS",
|
||||||
|
"exif_bottom_sheet_person_add_person": "Pridėti vardą",
|
||||||
"exit_slideshow": "Išeiti iš skaidrių peržiūros",
|
"exit_slideshow": "Išeiti iš skaidrių peržiūros",
|
||||||
"expand_all": "Išskleisti viską",
|
"expand_all": "Išskleisti viską",
|
||||||
|
"experimental_settings_new_asset_list_subtitle": "Dirbama",
|
||||||
|
"experimental_settings_new_asset_list_title": "Įgalinti eksperimentinį nuotraukų tinklelį",
|
||||||
|
"experimental_settings_subtitle": "Naudokite savo pačių rizika!",
|
||||||
|
"experimental_settings_title": "Eksperimentinis",
|
||||||
|
"expire_after": "Galiojimas baigiasi",
|
||||||
"expired": "Nebegalioja",
|
"expired": "Nebegalioja",
|
||||||
"expires_date": "Nebegalios už {date}",
|
"expires_date": "Nebegalios už {date}",
|
||||||
"explore": "Naršyti",
|
"explore": "Naršyti",
|
||||||
|
"explorer": "Naršyklė",
|
||||||
"export": "Eksportuoti",
|
"export": "Eksportuoti",
|
||||||
"export_as_json": "Eksportuoti kaip JSON",
|
"export_as_json": "Eksportuoti kaip JSON",
|
||||||
|
"export_database": "Eksportuoti duomenų bazę",
|
||||||
|
"export_database_description": "Eksportuoti SQLite duomenų bazę",
|
||||||
"extension": "Plėtinys",
|
"extension": "Plėtinys",
|
||||||
"external": "Išorinis",
|
"external": "Išorinis",
|
||||||
"external_libraries": "Išorinės bibliotekos",
|
"external_libraries": "Išorinės bibliotekos",
|
||||||
"external_network_sheet_info": "When not on the preferred WiFi network, the app will connect to the server through the first of the below URLs it can reach, starting from top to bottom",
|
"external_network": "Išorinis tinklas",
|
||||||
|
"external_network_sheet_info": "Kai neprisijungta prie pageidaujamo Wi-Fi tinklo, programa jungsis prie serverio per pirmą URL nuorodą, kurią galės pasiekti, pradedant nuo viršaus į apačią",
|
||||||
"face_unassigned": "Nepriskirta",
|
"face_unassigned": "Nepriskirta",
|
||||||
"failed": "Įvyko klaida",
|
"failed": "Įvyko klaida",
|
||||||
|
"failed_to_authenticate": "Nepavyko autentifikuoti",
|
||||||
|
"failed_to_load_assets": "Nepavyko įkelti elementų",
|
||||||
|
"failed_to_load_folder": "Nepavyko įkelti katalogą",
|
||||||
"favorite": "Mėgstamiausias",
|
"favorite": "Mėgstamiausias",
|
||||||
|
"favorite_action_prompt": "{count} pridėta prie mėgstamiausių",
|
||||||
"favorite_or_unfavorite_photo": "Įtraukti prie arba pašalinti iš mėgstamiausių",
|
"favorite_or_unfavorite_photo": "Įtraukti prie arba pašalinti iš mėgstamiausių",
|
||||||
"favorites": "Mėgstamiausi",
|
"favorites": "Mėgstamiausi",
|
||||||
|
"favorites_page_no_favorites": "Nerasta mėgstamiausių elementų",
|
||||||
|
"feature_photo_updated": "Pageidaujama nuotrauka atnaujinta",
|
||||||
"features": "Funkcijos",
|
"features": "Funkcijos",
|
||||||
"features_setting_description": "Valdyti aplikacijos funkcijas",
|
"features_setting_description": "Valdyti aplikacijos funkcijas",
|
||||||
"file_name": "Failo pavadinimas",
|
"file_name": "Failo pavadinimas",
|
||||||
"file_name_or_extension": "Failo pavadinimas arba plėtinys",
|
"file_name_or_extension": "Failo pavadinimas arba plėtinys",
|
||||||
"filename": "Failopavadinimas",
|
"filename": "Failopavadinimas",
|
||||||
"filetype": "Failo tipas",
|
"filetype": "Failo tipas",
|
||||||
|
"filter": "Filtras",
|
||||||
"filter_people": "Filtruoti žmones",
|
"filter_people": "Filtruoti žmones",
|
||||||
|
"filter_places": "Filtruoti vietoves",
|
||||||
|
"find_them_fast": "Raskite greitai paieškoje pagal vardą",
|
||||||
|
"first": "Pirmas",
|
||||||
|
"fix_incorrect_match": "Pataisyti neteisingą porą",
|
||||||
|
"folder": "Katalogas",
|
||||||
|
"folder_not_found": "Katalogas nerastas",
|
||||||
"folders": "Aplankai",
|
"folders": "Aplankai",
|
||||||
"folders_feature_description": "Peržiūrėkite failų sistemoje esančias nuotraukas ir vaizdo įrašus aplankų rodinyje",
|
"folders_feature_description": "Peržiūrėkite failų sistemoje esančias nuotraukas ir vaizdo įrašus aplankų rodinyje",
|
||||||
|
"forgot_pin_code_question": "Pamiršote savo PIN?",
|
||||||
|
"forward": "Pirmyn",
|
||||||
|
"gcast_enabled": "Google Cast",
|
||||||
|
"gcast_enabled_description": "Kad veiktų, ši funkcija įkelia išorinius „Google“ išteklius.",
|
||||||
|
"general": "Bendri",
|
||||||
|
"geolocation_instruction_location": "Paspauskite ant elemento su GPS koordinatėmis norint naudoti tą vietovę arba pasirinkite vietovę tiesiogiai žemėlapyje",
|
||||||
"get_help": "Gauti pagalbos",
|
"get_help": "Gauti pagalbos",
|
||||||
|
"get_wifiname_error": "Nepavyko gauti Wi-Fi pavadinimo. Įsitikinkite, kad suteikti būtini leidimai ir esate prisijungę prie Wi-Fi tinklo",
|
||||||
|
"getting_started": "Pradedama",
|
||||||
|
"go_back": "Eiti atgal",
|
||||||
|
"go_to_folder": "Eiti į katalogą",
|
||||||
|
"go_to_search": "Eiti į paiešką",
|
||||||
|
"gps": "GPS",
|
||||||
|
"gps_missing": "Be GPS",
|
||||||
|
"grant_permission": "Suteikti leidimą",
|
||||||
"group_albums_by": "Grupuoti albumus pagal...",
|
"group_albums_by": "Grupuoti albumus pagal...",
|
||||||
|
"group_country": "Grupuoti pagal šalis",
|
||||||
"group_no": "Negrupuoti",
|
"group_no": "Negrupuoti",
|
||||||
"group_owner": "Grupuoti pagal savininką",
|
"group_owner": "Grupuoti pagal savininką",
|
||||||
|
"group_places_by": "Grupuoti vietoves pagal...",
|
||||||
"group_year": "Grupuoti pagal metus",
|
"group_year": "Grupuoti pagal metus",
|
||||||
|
"haptic_feedback_switch": "Įjungti haptinį grįžtamąjį ryšį",
|
||||||
|
"haptic_feedback_title": "Haptinis grįžtamasis ryšys",
|
||||||
"has_quota": "Turi kvotą",
|
"has_quota": "Turi kvotą",
|
||||||
|
"hash_asset": "Maišymo elementas",
|
||||||
|
"hashed_assets": "Sumaišyti elementai",
|
||||||
|
"hashing": "Maišoma",
|
||||||
|
"header_settings_add_header_tip": "Pridėti antraštę",
|
||||||
|
"header_settings_field_validator_msg": "Reikšmė negali būti tuščia",
|
||||||
|
"header_settings_header_name_input": "Antraštės pavadinimas",
|
||||||
|
"header_settings_header_value_input": "Antraštės reikšmė",
|
||||||
|
"headers_settings_tile_subtitle": "Apibrėžkite tarpinio serverio antraštes, kurias programa turėtų siųsti su kiekviena tinklo užklausa",
|
||||||
|
"headers_settings_tile_title": "Pasirinktinės tarpinio serverio antraštės",
|
||||||
"hi_user": "Labas {name} ({email})",
|
"hi_user": "Labas {name} ({email})",
|
||||||
"hide_all_people": "Slėpti visus asmenis",
|
"hide_all_people": "Slėpti visus asmenis",
|
||||||
"hide_gallery": "Slėpti galeriją",
|
"hide_gallery": "Slėpti galeriją",
|
||||||
@@ -662,7 +1106,17 @@
|
|||||||
"hide_password": "Slėpti slaptažodį",
|
"hide_password": "Slėpti slaptažodį",
|
||||||
"hide_person": "Slėpti asmenį",
|
"hide_person": "Slėpti asmenį",
|
||||||
"hide_unnamed_people": "Slėpti neįvardintus asmenis",
|
"hide_unnamed_people": "Slėpti neįvardintus asmenis",
|
||||||
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
"home_page_add_to_album_conflicts": "Pridėta {added} elementų į albumą {album}. {failed} elementai jau yra albume.",
|
||||||
|
"home_page_add_to_album_err_local": "Kol kas negalima pridėti vietinių elementų į albumus, praleidžiama",
|
||||||
|
"home_page_add_to_album_success": "Pridėta {added} elementų į albumą {album}.",
|
||||||
|
"home_page_album_err_partner": "Kol kas negalima pridėti partnerio elementų į albumą, praleidžiama",
|
||||||
|
"home_page_archive_err_local": "Kol kas negalima archyvuoti vietinių elementų, praleidžiama",
|
||||||
|
"home_page_archive_err_partner": "Negalima archyvuoti partnerio elementų, praleidžiama",
|
||||||
|
"home_page_building_timeline": "Kuriama laiko juosta",
|
||||||
|
"home_page_delete_err_partner": "Negalima ištrinti partnerio elementų, praleidžiama",
|
||||||
|
"home_page_delete_remote_err_local": "Vietiniai elementai ištrinant nuotolinį pasirinkimą, praleidžiami",
|
||||||
|
"home_page_favorite_err_local": "Kol kad negalima priskirti mėgstamiausių vietinių elementų, praleidžiama",
|
||||||
|
"home_page_first_time_notice": "Jei jūs naudojate programą pirmą kartą, tai prašome pasirinkti atsarginės kopijos albumą, kad laiko juosta galėtų tvarkyti albumo nuotraukas ir vaizdo įrašus",
|
||||||
"home_page_locked_error_local": "Nepavyko perkelti lokalių failų į užrakintą aplanką, praleidžiama",
|
"home_page_locked_error_local": "Nepavyko perkelti lokalių failų į užrakintą aplanką, praleidžiama",
|
||||||
"home_page_locked_error_partner": "Nepavyko perkelti partnerio failų į užrakintą aplanką, praleidžiama",
|
"home_page_locked_error_partner": "Nepavyko perkelti partnerio failų į užrakintą aplanką, praleidžiama",
|
||||||
"hour": "Valanda",
|
"hour": "Valanda",
|
||||||
@@ -707,7 +1161,7 @@
|
|||||||
"list": "Sąrašas",
|
"list": "Sąrašas",
|
||||||
"loading": "Kraunama",
|
"loading": "Kraunama",
|
||||||
"loading_search_results_failed": "Nepavyko užkrauti paieškos rezultatų",
|
"loading_search_results_failed": "Nepavyko užkrauti paieškos rezultatų",
|
||||||
"location_permission_content": "In order to use the auto-switching feature, Immich needs precise location permission so it can read the current WiFi network's name",
|
"location_permission_content": "Norint naudoti automatinio persijungimo opciją, Immich reikia tikslios vietovės leidimo, kad galėtų nuskaityti Wi-Fi tinklo pavadinimą",
|
||||||
"locked_folder": "Užrakintas aplankas",
|
"locked_folder": "Užrakintas aplankas",
|
||||||
"log_out": "Atsijungti",
|
"log_out": "Atsijungti",
|
||||||
"log_out_all_devices": "Atsijungti iš visų įrenginių",
|
"log_out_all_devices": "Atsijungti iš visų įrenginių",
|
||||||
@@ -727,7 +1181,10 @@
|
|||||||
"manage_your_devices": "Valdyti prijungtus įrenginius",
|
"manage_your_devices": "Valdyti prijungtus įrenginius",
|
||||||
"manage_your_oauth_connection": "Tvarkyti OAuth prisijungimą",
|
"manage_your_oauth_connection": "Tvarkyti OAuth prisijungimą",
|
||||||
"map": "Žemėlapis",
|
"map": "Žemėlapis",
|
||||||
|
"map_assets_in_bounds": "{count, plural, =0 {Nuotraukų nėra} one {# nuotrauka} other {# nuotraukos}}",
|
||||||
"map_settings": "Žemėlapio nustatymai",
|
"map_settings": "Žemėlapio nustatymai",
|
||||||
|
"map_settings_date_range_option_days": "Pastarąsias {days} dienas",
|
||||||
|
"map_settings_date_range_option_years": "Pastaruosius {years} metus",
|
||||||
"map_settings_include_show_archived": "Įtraukti archyvuotus",
|
"map_settings_include_show_archived": "Įtraukti archyvuotus",
|
||||||
"matches": "Atitikmenys",
|
"matches": "Atitikmenys",
|
||||||
"media_type": "Laikmenos tipas",
|
"media_type": "Laikmenos tipas",
|
||||||
@@ -785,6 +1242,7 @@
|
|||||||
"notification_toggle_setting_description": "Įjungti el. pašto pranešimus",
|
"notification_toggle_setting_description": "Įjungti el. pašto pranešimus",
|
||||||
"notifications": "Pranešimai",
|
"notifications": "Pranešimai",
|
||||||
"notifications_setting_description": "Tvarkyti pranešimus",
|
"notifications_setting_description": "Tvarkyti pranešimus",
|
||||||
|
"oauth": "OAuth",
|
||||||
"official_immich_resources": "Oficialūs Immich ištekliai",
|
"official_immich_resources": "Oficialūs Immich ištekliai",
|
||||||
"offline": "Neprisijungęs",
|
"offline": "Neprisijungęs",
|
||||||
"oldest_first": "Seniausias pirmas",
|
"oldest_first": "Seniausias pirmas",
|
||||||
@@ -805,6 +1263,7 @@
|
|||||||
"partner_can_access": "{partner} gali naudotis",
|
"partner_can_access": "{partner} gali naudotis",
|
||||||
"partner_can_access_assets": "Visos jūsų nuotraukos ir vaizdo įrašai, išskyrus archyvuotus ir ištrintus",
|
"partner_can_access_assets": "Visos jūsų nuotraukos ir vaizdo įrašai, išskyrus archyvuotus ir ištrintus",
|
||||||
"partner_can_access_location": "Vieta, kurioje darytos nuotraukos",
|
"partner_can_access_location": "Vieta, kurioje darytos nuotraukos",
|
||||||
|
"partner_page_stop_sharing_content": "{partner} daugiau nebegalės pasiekti jūsų nuotraukų.",
|
||||||
"partners": "Partneriai",
|
"partners": "Partneriai",
|
||||||
"password": "Slaptažodis",
|
"password": "Slaptažodis",
|
||||||
"password_does_not_match": "Slaptažodis nesutampa",
|
"password_does_not_match": "Slaptažodis nesutampa",
|
||||||
@@ -859,7 +1318,7 @@
|
|||||||
"purchase_lifetime_description": "Pirkimas visam gyvenimui",
|
"purchase_lifetime_description": "Pirkimas visam gyvenimui",
|
||||||
"purchase_option_title": "PIRKIMO PASIRINKIMAS",
|
"purchase_option_title": "PIRKIMO PASIRINKIMAS",
|
||||||
"purchase_panel_info_1": "„Immich“ kūrimas užima daug laiko ir pastangų, o visą darbo dieną dirba inžinieriai, kad jis būtų kuo geresnis. Mūsų misija yra, kad atvirojo kodo programinė įranga ir etiška verslo praktika taptų tvariu kūrėjų pajamų šaltiniu ir sukurtų privatumą gerbiančią ekosistemą su realiomis alternatyvomis išnaudojamoms debesijos paslaugoms.",
|
"purchase_panel_info_1": "„Immich“ kūrimas užima daug laiko ir pastangų, o visą darbo dieną dirba inžinieriai, kad jis būtų kuo geresnis. Mūsų misija yra, kad atvirojo kodo programinė įranga ir etiška verslo praktika taptų tvariu kūrėjų pajamų šaltiniu ir sukurtų privatumą gerbiančią ekosistemą su realiomis alternatyvomis išnaudojamoms debesijos paslaugoms.",
|
||||||
"purchase_panel_info_2": "Kadangi esame įsipareigoję nepridėti mokamų sienų, šis pirkinys nesuteiks jums jokių papildomų „Immich“ funkcijų. Mes tikime, kad tokie naudotojai kaip jūs palaikys nuolatinį „Immich“ vystymąsi.",
|
"purchase_panel_info_2": "Kadangi esame įsipareigoję nepridėti mokamų sienų, šis pirkinys nesuteiks jums jokių papildomų Immich funkcijų. Mes tikime, kad tokie naudotojai kaip jūs palaikys nuolatinį Immich vystymąsi.",
|
||||||
"purchase_panel_title": "Palaikykite projektą",
|
"purchase_panel_title": "Palaikykite projektą",
|
||||||
"purchase_per_server": "Vienam serveriui",
|
"purchase_per_server": "Vienam serveriui",
|
||||||
"purchase_per_user": "Vienam naudotojui",
|
"purchase_per_user": "Vienam naudotojui",
|
||||||
@@ -998,7 +1457,11 @@
|
|||||||
"setting_image_viewer_preview_title": "Užkrauti peržiūros nuotrauką",
|
"setting_image_viewer_preview_title": "Užkrauti peržiūros nuotrauką",
|
||||||
"setting_image_viewer_title": "Nuotraukos",
|
"setting_image_viewer_title": "Nuotraukos",
|
||||||
"setting_languages_apply": "Pritaikyti",
|
"setting_languages_apply": "Pritaikyti",
|
||||||
|
"setting_notifications_notify_failures_grace_period": "Informuoti apie foninio atsarginio kopijavimo nesėkmes: {duration}",
|
||||||
|
"setting_notifications_notify_hours": "{count} valandų",
|
||||||
|
"setting_notifications_notify_minutes": "{count} minučių",
|
||||||
"setting_notifications_notify_never": "niekada",
|
"setting_notifications_notify_never": "niekada",
|
||||||
|
"setting_notifications_notify_seconds": "{count} sekundžių",
|
||||||
"setting_notifications_single_progress_subtitle": "Detali įkėlimo progreso informacija kiekvienam elementui",
|
"setting_notifications_single_progress_subtitle": "Detali įkėlimo progreso informacija kiekvienam elementui",
|
||||||
"settings": "Nustatymai",
|
"settings": "Nustatymai",
|
||||||
"settings_require_restart": "Prašome perkrauti Immich, siekiant pritaikyti šį nustatymą",
|
"settings_require_restart": "Prašome perkrauti Immich, siekiant pritaikyti šį nustatymą",
|
||||||
@@ -1006,13 +1469,29 @@
|
|||||||
"setup_pin_code": "Nustatyti PIN kodą",
|
"setup_pin_code": "Nustatyti PIN kodą",
|
||||||
"share": "Dalintis",
|
"share": "Dalintis",
|
||||||
"share_add_photos": "Įtraukti nuotraukų",
|
"share_add_photos": "Įtraukti nuotraukų",
|
||||||
|
"share_assets_selected": "{count} pažymėta",
|
||||||
"share_dialog_preparing": "Ruošiama...",
|
"share_dialog_preparing": "Ruošiama...",
|
||||||
"share_link": "Bendrinti nuorodą",
|
"share_link": "Bendrinti nuorodą",
|
||||||
"shared": "Bendrinami",
|
"shared": "Bendrinami",
|
||||||
"shared_by_user": "Bendrina {user}",
|
"shared_by_user": "Bendrina {user}",
|
||||||
"shared_by_you": "Bendrinama jūsų",
|
"shared_by_you": "Bendrinama jūsų",
|
||||||
"shared_from_partner": "Nuotraukos iš {partner}",
|
"shared_from_partner": "Nuotraukos iš {partner}",
|
||||||
|
"shared_intent_upload_button_progress_text": "{current} / {total} Įkelta",
|
||||||
"shared_link_clipboard_copied_massage": "Nukopijuota į iškarpinę",
|
"shared_link_clipboard_copied_massage": "Nukopijuota į iškarpinę",
|
||||||
|
"shared_link_clipboard_text": "Nuoroda: {link}\nSlaptažodis: {password}",
|
||||||
|
"shared_link_edit_expire_after_option_days": "{count} dienų",
|
||||||
|
"shared_link_edit_expire_after_option_hours": "{count} valandų",
|
||||||
|
"shared_link_edit_expire_after_option_minutes": "{count} minučių",
|
||||||
|
"shared_link_edit_expire_after_option_months": "{count} mėnesių",
|
||||||
|
"shared_link_edit_expire_after_option_year": "{count} metų",
|
||||||
|
"shared_link_expires_day": "Galiojimas baigsis už {count} dienos",
|
||||||
|
"shared_link_expires_days": "Galiojimas baigsis už {count} dienų",
|
||||||
|
"shared_link_expires_hour": "Galiojimas baigsis už {count} valandos",
|
||||||
|
"shared_link_expires_hours": "Galiojimas baigsis už {count} valandų",
|
||||||
|
"shared_link_expires_minute": "Galiojimas baigsis už {count} minutės",
|
||||||
|
"shared_link_expires_minutes": "Galiojimas baigsis už {count} minučių",
|
||||||
|
"shared_link_expires_second": "Galiojimas baigsis už {count} sekundės",
|
||||||
|
"shared_link_expires_seconds": "Galiojimas baigsis už {count} sekundžių",
|
||||||
"shared_link_options": "Bendrinimo nuorodos parametrai",
|
"shared_link_options": "Bendrinimo nuorodos parametrai",
|
||||||
"shared_links": "Bendrinimo nuorodos",
|
"shared_links": "Bendrinimo nuorodos",
|
||||||
"shared_photos_and_videos_count": "{assetCount, plural, one {# bendrinama nuotrauka ir vaizdo įrašas} few {# bendrinamos nuotraukos ir vaizdo įrašai} other {# bendrinamų nuotraukų ir vaizdo įrašų}}",
|
"shared_photos_and_videos_count": "{assetCount, plural, one {# bendrinama nuotrauka ir vaizdo įrašas} few {# bendrinamos nuotraukos ir vaizdo įrašai} other {# bendrinamų nuotraukų ir vaizdo įrašų}}",
|
||||||
@@ -1092,6 +1571,7 @@
|
|||||||
"template": "Šablonas",
|
"template": "Šablonas",
|
||||||
"theme": "Tema",
|
"theme": "Tema",
|
||||||
"theme_selection": "Temos pasirinkimas",
|
"theme_selection": "Temos pasirinkimas",
|
||||||
|
"theme_setting_asset_list_tiles_per_row_title": "Elementų per eilutę ({count})",
|
||||||
"theme_setting_primary_color_title": "Pagrindinė spalva",
|
"theme_setting_primary_color_title": "Pagrindinė spalva",
|
||||||
"theme_setting_system_primary_color_title": "Naudoti sistemos spalvą",
|
"theme_setting_system_primary_color_title": "Naudoti sistemos spalvą",
|
||||||
"theme_setting_system_theme_switch": "Automatinė (Naudoti sistemos nustatymus)",
|
"theme_setting_system_theme_switch": "Automatinė (Naudoti sistemos nustatymus)",
|
||||||
@@ -1110,8 +1590,10 @@
|
|||||||
"trash_no_results_message": "Į šiukšliadėžę perkeltos nuotraukos ir vaizdo įrašai bus rodomi čia.",
|
"trash_no_results_message": "Į šiukšliadėžę perkeltos nuotraukos ir vaizdo įrašai bus rodomi čia.",
|
||||||
"trash_page_delete_all": "Ištrinti Visus",
|
"trash_page_delete_all": "Ištrinti Visus",
|
||||||
"trash_page_empty_trash_dialog_content": "Ar norite ištrinti išmestus elementus? Šie elementai bus visam laikui pašalinti iš Immich",
|
"trash_page_empty_trash_dialog_content": "Ar norite ištrinti išmestus elementus? Šie elementai bus visam laikui pašalinti iš Immich",
|
||||||
|
"trash_page_info": "Šiukšliadėžės elementai bus galutinai ištrinti už {days} dienų",
|
||||||
"trash_page_no_assets": "Nėra išmestų elementų",
|
"trash_page_no_assets": "Nėra išmestų elementų",
|
||||||
"trash_page_restore_all": "Atkurti Visus",
|
"trash_page_restore_all": "Atkurti Visus",
|
||||||
|
"trash_page_title": "Šiukšlių ({count})",
|
||||||
"trashed_items_will_be_permanently_deleted_after": "Į šiukšliadėžę perkelti elementai bus visam laikui ištrinti po {days, plural, one {# dienos} other {# dienų}}.",
|
"trashed_items_will_be_permanently_deleted_after": "Į šiukšliadėžę perkelti elementai bus visam laikui ištrinti po {days, plural, one {# dienos} other {# dienų}}.",
|
||||||
"type": "Tipas",
|
"type": "Tipas",
|
||||||
"unarchive": "Išarchyvuoti",
|
"unarchive": "Išarchyvuoti",
|
||||||
@@ -1146,7 +1628,8 @@
|
|||||||
"upload_success": "Įkėlimas pavyko, norėdami pamatyti naujai įkeltus elementus perkraukite puslapį.",
|
"upload_success": "Įkėlimas pavyko, norėdami pamatyti naujai įkeltus elementus perkraukite puslapį.",
|
||||||
"upload_to_immich": "Įkelti į Immich ({count})",
|
"upload_to_immich": "Įkelti į Immich ({count})",
|
||||||
"uploading": "Įkeliama",
|
"uploading": "Įkeliama",
|
||||||
"usage": "Naudojymas",
|
"url": "URL",
|
||||||
|
"usage": "Naudojimas",
|
||||||
"use_biometric": "Naudoti biometriją",
|
"use_biometric": "Naudoti biometriją",
|
||||||
"use_current_connection": "naudoti dabartinį ryšį",
|
"use_current_connection": "naudoti dabartinį ryšį",
|
||||||
"user": "Naudotojas",
|
"user": "Naudotojas",
|
||||||
|
|||||||
23
i18n/lv.json
23
i18n/lv.json
@@ -23,7 +23,7 @@
|
|||||||
"add_partner": "Pievienot partneri",
|
"add_partner": "Pievienot partneri",
|
||||||
"add_path": "Pievienot ceļu",
|
"add_path": "Pievienot ceļu",
|
||||||
"add_photos": "Pievienot fotoattēlus",
|
"add_photos": "Pievienot fotoattēlus",
|
||||||
"add_tag": "Pievienot Atzīmi",
|
"add_tag": "Pievienot atzīmi",
|
||||||
"add_to": "Pievienot…",
|
"add_to": "Pievienot…",
|
||||||
"add_to_album": "Pievienot albumam",
|
"add_to_album": "Pievienot albumam",
|
||||||
"add_to_album_bottom_sheet_added": "Pievienots {album}",
|
"add_to_album_bottom_sheet_added": "Pievienots {album}",
|
||||||
@@ -45,13 +45,14 @@
|
|||||||
"authentication_settings_disable_all": "Vai tiešām vēlaties atspējot visas pieteikšanās metodes? Pieteikšanās tiks pilnībā atspējota.",
|
"authentication_settings_disable_all": "Vai tiešām vēlaties atspējot visas pieteikšanās metodes? Pieteikšanās tiks pilnībā atspējota.",
|
||||||
"authentication_settings_reenable": "Lai atkārtoti iespējotu, izmantojiet <link>Servera Komandu</link>.",
|
"authentication_settings_reenable": "Lai atkārtoti iespējotu, izmantojiet <link>Servera Komandu</link>.",
|
||||||
"background_task_job": "Fona Uzdevumi",
|
"background_task_job": "Fona Uzdevumi",
|
||||||
"backup_database": "Izveidot datu bāzes izgāztuvi",
|
"backup_database": "Izveidot datu bāzes izrakstu",
|
||||||
"backup_database_enable_description": "Iespējot datu bāzes izgāztuvi",
|
"backup_database_enable_description": "Iespējot datu bāzes izrakstus",
|
||||||
"backup_keep_last_amount": "Iepriekšējo izgāztuvju daudzums, kas jāsaglabā",
|
"backup_keep_last_amount": "Iepriekšējo izrakstu daudzums, kas jāsaglabā",
|
||||||
"backup_onboarding_1_description": "ārpussaites kopēšana mākonī vai citā fiziskā vietā.",
|
"backup_onboarding_1_description": "ārēja kopija mākonī vai citā fiziskā atrašanās vietā.",
|
||||||
"backup_onboarding_2_description": "lokālas kopijas citās ierīcēs. Šis iekļauj galvenos failus kā arī dublētu kōpiju ar tiem failiem lokāli.",
|
"backup_onboarding_2_description": "vietējās kopijas citās ierīcēs. Tas ietver galvenos failus un šo failu vietējo rezerves kopiju.",
|
||||||
"backup_onboarding_title": "Rezerves kopijas",
|
"backup_onboarding_title": "Rezerves kopijas",
|
||||||
"backup_settings_description": "Datubāzes dublēšanas iestatījumu pārvaldība",
|
"backup_settings": "Datubāzes izrakstu iestatījumi",
|
||||||
|
"backup_settings_description": "Datubāzes izrakstu iestatījumu pārvaldība",
|
||||||
"cleared_jobs": "Notīrīti uzdevumi priekš: {job}",
|
"cleared_jobs": "Notīrīti uzdevumi priekš: {job}",
|
||||||
"config_set_by_file": "Konfigurāciju pašlaik iestata konfigurācijas fails",
|
"config_set_by_file": "Konfigurāciju pašlaik iestata konfigurācijas fails",
|
||||||
"confirm_delete_library": "Vai tiešām vēlaties dzēst {library} bibliotēku?",
|
"confirm_delete_library": "Vai tiešām vēlaties dzēst {library} bibliotēku?",
|
||||||
@@ -777,6 +778,7 @@
|
|||||||
"let_others_respond": "Ļaut citiem atbildēt",
|
"let_others_respond": "Ļaut citiem atbildēt",
|
||||||
"level": "Līmenis",
|
"level": "Līmenis",
|
||||||
"library": "Bibliotēka",
|
"library": "Bibliotēka",
|
||||||
|
"library_options": "Bibliotēkas opcijas",
|
||||||
"library_page_device_albums": "Albumi ierīcē",
|
"library_page_device_albums": "Albumi ierīcē",
|
||||||
"library_page_new_album": "Jauns albums",
|
"library_page_new_album": "Jauns albums",
|
||||||
"library_page_sort_asset_count": "Failu skaits",
|
"library_page_sort_asset_count": "Failu skaits",
|
||||||
@@ -784,6 +786,8 @@
|
|||||||
"library_page_sort_last_modified": "Pēdējās izmaiņas",
|
"library_page_sort_last_modified": "Pēdējās izmaiņas",
|
||||||
"library_page_sort_title": "Albuma virsraksts",
|
"library_page_sort_title": "Albuma virsraksts",
|
||||||
"licenses": "Licences",
|
"licenses": "Licences",
|
||||||
|
"link_to_oauth": "Piesaistīt OAuth",
|
||||||
|
"linked_oauth_account": "Piesaistītais OAuth konts",
|
||||||
"list": "Saraksts",
|
"list": "Saraksts",
|
||||||
"loading": "Ielādē",
|
"loading": "Ielādē",
|
||||||
"local_network": "Lokālais tīkls",
|
"local_network": "Lokālais tīkls",
|
||||||
@@ -943,6 +947,8 @@
|
|||||||
"open_the_search_filters": "Atvērt meklēšanas filtrus",
|
"open_the_search_filters": "Atvērt meklēšanas filtrus",
|
||||||
"options": "Iestatījumi",
|
"options": "Iestatījumi",
|
||||||
"or": "vai",
|
"or": "vai",
|
||||||
|
"organize_into_albums": "Sakārtot albumos",
|
||||||
|
"organize_into_albums_description": "Ievietot esošās fotogrāfijas albumos, izmantojot pašreizējos sinhronizācijas iestatījumus",
|
||||||
"organize_your_library": "Bibliotēkas organizēšana",
|
"organize_your_library": "Bibliotēkas organizēšana",
|
||||||
"original": "oriģināls",
|
"original": "oriģināls",
|
||||||
"other": "Citi",
|
"other": "Citi",
|
||||||
@@ -1297,6 +1303,8 @@
|
|||||||
"support": "Atbalsts",
|
"support": "Atbalsts",
|
||||||
"support_and_feedback": "Atbalsts un atsauksmes",
|
"support_and_feedback": "Atbalsts un atsauksmes",
|
||||||
"sync": "Sinhronizēt",
|
"sync": "Sinhronizēt",
|
||||||
|
"sync_status": "Sinhronizācijas statuss",
|
||||||
|
"sync_status_subtitle": "Skatīt un pārvaldīt sinhronizācijas sistēmu",
|
||||||
"theme": "Dizains",
|
"theme": "Dizains",
|
||||||
"theme_setting_asset_list_storage_indicator_title": "Rādīt krātuves indikatoru uz aktīvu elementiem",
|
"theme_setting_asset_list_storage_indicator_title": "Rādīt krātuves indikatoru uz aktīvu elementiem",
|
||||||
"theme_setting_asset_list_tiles_per_row_title": "Failu skaits rindā ({count})",
|
"theme_setting_asset_list_tiles_per_row_title": "Failu skaits rindā ({count})",
|
||||||
@@ -1337,6 +1345,7 @@
|
|||||||
"trash_page_select_assets_btn": "Atlasīt aktīvus",
|
"trash_page_select_assets_btn": "Atlasīt aktīvus",
|
||||||
"trash_page_title": "Atkritne ({count})",
|
"trash_page_title": "Atkritne ({count})",
|
||||||
"trashed_items_will_be_permanently_deleted_after": "Faili no atkritnes tiks neatgriezeniski dzēsti pēc {days, plural, one {# dienas} other {# dienām}}.",
|
"trashed_items_will_be_permanently_deleted_after": "Faili no atkritnes tiks neatgriezeniski dzēsti pēc {days, plural, one {# dienas} other {# dienām}}.",
|
||||||
|
"troubleshoot": "Problēmu novēršana",
|
||||||
"type": "Veids",
|
"type": "Veids",
|
||||||
"unable_to_change_pin_code": "Neizdevās nomainīt PIN kodu",
|
"unable_to_change_pin_code": "Neizdevās nomainīt PIN kodu",
|
||||||
"unable_to_setup_pin_code": "Neizdevās uzstādīt PIN kodu",
|
"unable_to_setup_pin_code": "Neizdevās uzstādīt PIN kodu",
|
||||||
|
|||||||
700
i18n/mr.json
700
i18n/mr.json
@@ -1056,6 +1056,706 @@
|
|||||||
"group_no": "गटबद्ध नाही",
|
"group_no": "गटबद्ध नाही",
|
||||||
"group_owner": "मालकानुसार गट करा",
|
"group_owner": "मालकानुसार गट करा",
|
||||||
"group_places_by": "स्थळे गटबद्ध करा: …",
|
"group_places_by": "स्थळे गटबद्ध करा: …",
|
||||||
|
"notification_permission_dialog_content": "सूचना सक्षम करण्यासाठी सेटिंग्जमध्ये जा आणि अनुमती द्या.",
|
||||||
|
"notification_permission_list_tile_content": "सूचना सक्षम करण्यासाठी परवानगी द्या.",
|
||||||
|
"notification_permission_list_tile_enable_button": "सूचना सक्षम करा",
|
||||||
|
"notification_permission_list_tile_title": "सूचना परवानगी",
|
||||||
|
"notification_toggle_setting_description": "ईमेल सूचना सक्षम करा",
|
||||||
|
"notifications": "सूचना",
|
||||||
|
"notifications_setting_description": "सूचना व्यवस्थापित करा",
|
||||||
|
"oauth": "OAuth",
|
||||||
|
"official_immich_resources": "अधिकृत Immich संसाधने",
|
||||||
|
"offline": "ऑफलाइन",
|
||||||
|
"offset": "ऑफसेट",
|
||||||
|
"ok": "ठीक",
|
||||||
|
"oldest_first": "सर्वात जुने आधी",
|
||||||
|
"on_this_device": "या डिव्हाइसवर",
|
||||||
|
"onboarding": "ऑनबोर्डिंग",
|
||||||
|
"onboarding_locale_description": "तुमची पसंतीची भाषा निवडा. हे नंतर सेटिंग्जमध्ये बदलू शकता.",
|
||||||
|
"onboarding_privacy_description": "खालील (पर्यायी) वैशिष्ट्ये बाह्य सेवांवर अवलंबून आहेत आणि सेटिंग्जमध्ये कधीही अक्षम करता येतात.",
|
||||||
|
"onboarding_server_welcome_description": "काही सामान्य सेटिंग्जसह तुमची इन्स्टन्स सेटअप करूया.",
|
||||||
|
"onboarding_theme_description": "तुमच्या इन्स्टन्ससाठी रंग थीम निवडा. हे नंतर सेटिंग्जमध्ये बदलू शकता.",
|
||||||
|
"onboarding_user_welcome_description": "चला, सुरुवात करूया!",
|
||||||
|
"onboarding_welcome_user": "स्वागत आहे, {user}",
|
||||||
|
"online": "ऑनलाइन",
|
||||||
|
"only_favorites": "फक्त आवडते",
|
||||||
|
"open": "उघडा",
|
||||||
|
"open_in_map_view": "नकाशा दृश्यात उघडा",
|
||||||
|
"open_in_openstreetmap": "OpenStreetMap मध्ये उघडा",
|
||||||
|
"open_the_search_filters": "शोध फिल्टर उघडा",
|
||||||
|
"options": "पर्याय",
|
||||||
|
"or": "किंवा",
|
||||||
|
"organize_into_albums": "अल्बममध्ये आयोजित करा",
|
||||||
|
"organize_into_albums_description": "सध्याच्या समक्रमण सेटिंग्ज वापरून विद्यमान फोटो अल्बममध्ये ठेवा",
|
||||||
|
"organize_your_library": "तुमची लायब्ररी व्यवस्थित करा",
|
||||||
|
"original": "मूळ",
|
||||||
|
"other": "इतर",
|
||||||
|
"other_devices": "इतर उपकरणे",
|
||||||
|
"other_entities": "इतर घटक",
|
||||||
|
"other_variables": "इतर चल",
|
||||||
|
"owned": "मालकीचे",
|
||||||
|
"owner": "मालक",
|
||||||
|
"partner": "भागीदार",
|
||||||
|
"partner_can_access": "{partner} ला प्रवेश आहे",
|
||||||
|
"partner_can_access_assets": "संग्रहित व हटविलेले वगळता तुमचे सर्व फोटो आणि व्हिडिओ",
|
||||||
|
"partner_can_access_location": "ज्या ठिकाणी तुमचे फोटो काढले गेले ते स्थान",
|
||||||
|
"partner_list_user_photos": "{user} चे फोटो",
|
||||||
|
"partner_list_view_all": "सर्व पहा",
|
||||||
|
"partner_page_empty_message": "तुमचे फोटो अजून कोणत्याही भागीदारासोबत शेअर केलेले नाहीत.",
|
||||||
|
"partner_page_no_more_users": "जोडण्यासाठी आणखी वापरकर्ते नाहीत",
|
||||||
|
"partner_page_partner_add_failed": "भागीदार जोडण्यात अयशस्वी",
|
||||||
|
"partner_page_select_partner": "भागीदार निवडा",
|
||||||
|
"partner_page_shared_to_title": "यांना शेअर केले",
|
||||||
|
"partner_page_stop_sharing_content": "{partner} आता तुमचे फोटो पाहू शकणार नाही.",
|
||||||
|
"partner_sharing": "भागीदार शेअरिंग",
|
||||||
|
"partners": "भागीदार",
|
||||||
|
"password": "पासवर्ड",
|
||||||
|
"password_does_not_match": "पासवर्ड जुळत नाही",
|
||||||
|
"password_required": "पासवर्ड आवश्यक",
|
||||||
|
"password_reset_success": "पासवर्ड रीसेट यशस्वी",
|
||||||
|
"past_durations": {
|
||||||
|
"days": "मागील {days, plural, one {# दिवस} other {# दिवस}}",
|
||||||
|
"hours": "मागील {hours, plural, one {# तास} other {# तास}}",
|
||||||
|
"years": "मागील {years, plural, one {# वर्ष} other {# वर्षे}}"
|
||||||
|
},
|
||||||
|
"path": "मार्ग",
|
||||||
|
"pattern": "नमुना",
|
||||||
|
"pause": "थांबवा",
|
||||||
|
"pause_memories": "आठवणी थांबवा",
|
||||||
|
"paused": "थांबवले",
|
||||||
|
"pending": "प्रलंबित",
|
||||||
|
"people": "लोक",
|
||||||
|
"people_edits_count": "संपादित {count, plural, one {# व्यक्ती} other {# लोक}}",
|
||||||
|
"people_feature_description": "लोकांनुसार गटबद्ध फोटो आणि व्हिडिओ ब्राउझ करा",
|
||||||
|
"people_sidebar_description": "साइडबारमध्ये “लोक” साठी दुवा दाखवा",
|
||||||
|
"permanent_deletion_warning": "कायमस्वरूपी विलोपन सूचना",
|
||||||
|
"permanent_deletion_warning_setting_description": "अॅसेट्स कायमचे हटवताना सूचना दाखवा",
|
||||||
|
"permanently_delete": "कायमचे हटवा",
|
||||||
|
"permanently_delete_assets_count": "{count, plural, one {अॅसेट} other {अॅसेट्स}} कायमचे हटवा",
|
||||||
|
"permanently_delete_assets_prompt": "आपण {count, plural, one {हा अॅसेट कायमचा हटवू इच्छिता?} other {हे <b></b> अॅसेट्स कायमचे हटवू इच्छिता?}} यामुळे {count, plural, one {तो त्याच्या} other {ते त्यांच्या}} अल्बम(मधून) देखील काढले जातील.",
|
||||||
|
"permanently_deleted_asset": "कायमचा हटवलेला अॅसेट",
|
||||||
|
"permanently_deleted_assets_count": "कायमचे हटवले {count, plural, one {# अॅसेट} other {# अॅसेट्स}}",
|
||||||
|
"permission": "परवानगी",
|
||||||
|
"permission_empty": "तुमची परवानगी रिक्त असू नये",
|
||||||
|
"permission_onboarding_back": "मागे",
|
||||||
|
"permission_onboarding_continue_anyway": "तरीही पुढे जा",
|
||||||
|
"permission_onboarding_get_started": "सुरू करा",
|
||||||
|
"permission_onboarding_go_to_settings": "सेटिंग्जमध्ये जा",
|
||||||
|
"permission_onboarding_permission_denied": "परवानगी नाकारली. Immich वापरण्यासाठी, सेटिंग्जमध्ये फोटो आणि व्हिडिओ परवानग्या द्या.",
|
||||||
|
"permission_onboarding_permission_granted": "परवानगी मंजूर! सर्व तयार.",
|
||||||
|
"permission_onboarding_permission_limited": "परवानगी मर्यादित. Immich ला संपूर्ण गॅलरी संग्रहाचा बॅकअप व व्यवस्थापन करण्यासाठी, सेटिंग्जमध्ये फोटो आणि व्हिडिओ परवानग्या द्या.",
|
||||||
|
"permission_onboarding_request": "तुमचे फोटो आणि व्हिडिओ पाहण्यासाठी Immich ला परवानगी आवश्यक आहे.",
|
||||||
|
"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_hidden": "{name}{hidden, select, true { {hidden}} other {}}",
|
||||||
|
"photo_shared_all_users": "तुम्ही सर्व वापरकर्त्यांसोबत फोटो शेअर केले आहेत असे दिसते किंवा शेअर करण्यासाठी कोणताही वापरकर्ता नाही.",
|
||||||
|
"photos": "फोटो",
|
||||||
|
"photos_and_videos": "फोटो आणि व्हिडिओ",
|
||||||
|
"photos_count": "{count, plural, one {{count, number} फोटो} other {{count, number} फोटो}}",
|
||||||
|
"photos_from_previous_years": "मागील वर्षांतील फोटो",
|
||||||
|
"pick_a_location": "स्थान निवडा",
|
||||||
|
"pin_code_changed_successfully": "PIN कोड यशस्वीरित्या बदलला",
|
||||||
|
"pin_code_reset_successfully": "PIN कोड यशस्वीरित्या रीसेट केला",
|
||||||
|
"pin_code_setup_successfully": "PIN कोड यशस्वीरित्या सेट केला",
|
||||||
|
"pin_verification": "PIN कोड पडताळणी",
|
||||||
|
"place": "स्थान",
|
||||||
|
"places": "स्थाने",
|
||||||
|
"places_count": "{count, plural, one {{count, number} स्थान} other {{count, number} स्थाने}}",
|
||||||
|
"play": "प्ले करा",
|
||||||
|
"play_memories": "आठवणी प्ले करा",
|
||||||
|
"play_motion_photo": "मोशन फोटो प्ले करा",
|
||||||
|
"play_or_pause_video": "व्हिडिओ प्ले किंवा पॉज करा",
|
||||||
|
"please_auth_to_access": "प्रवेशासाठी कृपया प्रमाणीकरण करा",
|
||||||
|
"port": "पोर्ट",
|
||||||
|
"preferences_settings_subtitle": "अॅपची प्राधान्ये व्यवस्थापित करा",
|
||||||
|
"preferences_settings_title": "प्राधान्ये",
|
||||||
|
"preset": "प्रिसेट",
|
||||||
|
"preview": "पूर्वावलोकन",
|
||||||
|
"previous": "मागील",
|
||||||
|
"previous_memory": "मागील आठवण",
|
||||||
|
"previous_or_next_day": "दिवस पुढे/मागे",
|
||||||
|
"previous_or_next_month": "महिना पुढे/मागे",
|
||||||
|
"previous_or_next_photo": "फोटो पुढे/मागे",
|
||||||
|
"previous_or_next_year": "वर्ष पुढे/मागे",
|
||||||
|
"primary": "प्राथमिक",
|
||||||
|
"privacy": "गोपनीयता",
|
||||||
|
"profile": "प्रोफाइल",
|
||||||
|
"profile_drawer_app_logs": "लॉग्स",
|
||||||
|
"profile_drawer_client_out_of_date_major": "मोबाइल अॅप कालबाह्य आहे. कृपया नवीनतम मेजर आवृत्तीवर अद्यतन करा.",
|
||||||
|
"profile_drawer_client_out_of_date_minor": "मोबाइल अॅप कालबाह्य आहे. कृपया नवीनतम माइनर आवृत्तीवर अद्यतन करा.",
|
||||||
|
"profile_drawer_client_server_up_to_date": "क्लायंट आणि सर्व्हर अद्ययावत आहेत",
|
||||||
|
"profile_drawer_github": "गिटहब",
|
||||||
|
"profile_drawer_readonly_mode": "फक्त-वाचन मोड सक्षम. बाहेर पडण्यासाठी वापरकर्त्याच्या अवतार आयकॉनवर लांब-प्रेस करा.",
|
||||||
|
"profile_drawer_server_out_of_date_major": "सर्व्हर कालबाह्य आहे. कृपया नवीनतम मेजर आवृत्तीवर अद्यतन करा.",
|
||||||
|
"profile_drawer_server_out_of_date_minor": "सर्व्हर कालबाह्य आहे. कृपया नवीनतम माइनर आवृत्तीवर अद्यतन करा.",
|
||||||
|
"profile_image_of_user": "{user} ची प्रोफाइल प्रतिमा",
|
||||||
|
"profile_picture_set": "प्रोफाइल चित्र सेट केले.",
|
||||||
|
"public_album": "सार्वजनिक अल्बम",
|
||||||
|
"public_share": "सार्वजनिक शेअर",
|
||||||
|
"purchase_account_info": "समर्थक",
|
||||||
|
"purchase_activated_subtitle": "Immich आणि मुक्त-स्रोत सॉफ्टवेअरला पाठिंबा दिल्याबद्दल धन्यवाद",
|
||||||
|
"purchase_activated_time": "{date} रोजी सक्रिय केले",
|
||||||
|
"purchase_activated_title": "तुमची की यशस्वीपणे सक्रिय करण्यात आली आहे",
|
||||||
|
"purchase_button_activate": "सक्रिय करा",
|
||||||
|
"purchase_button_buy": "खरेदी करा",
|
||||||
|
"purchase_button_buy_immich": "Immich खरेदी करा",
|
||||||
|
"purchase_button_never_show_again": "पुन्हा दाखवू नका",
|
||||||
|
"purchase_button_reminder": "३० दिवसांनी मला आठवण करून द्या",
|
||||||
|
"purchase_button_remove_key": "की हटवा",
|
||||||
|
"purchase_button_select": "निवडा",
|
||||||
|
"purchase_failed_activation": "सक्रिय करण्यात अयशस्वी! योग्य प्रोडक्ट कीसाठी कृपया तुमचे ईमेल तपासा!",
|
||||||
|
"purchase_individual_description_1": "वैयक्तिक वापरासाठी",
|
||||||
|
"purchase_individual_description_2": "समर्थक स्थिती",
|
||||||
|
"purchase_individual_title": "वैयक्तिक",
|
||||||
|
"purchase_input_suggestion": "प्रॉडक्ट की आहे? खाली की टाका",
|
||||||
|
"purchase_license_subtitle": "सेवेच्या पुढील विकासासाठी Immich खरेदी करून साथ द्या",
|
||||||
|
"purchase_lifetime_description": "आयुष्यभराची खरेदी",
|
||||||
|
"purchase_option_title": "खरेदी पर्याय",
|
||||||
|
"purchase_panel_info_1": "Immich तयार करणे वेळखाऊ आणि कष्टाचे आहे. आमचे ध्येय मुक्त-स्रोत सॉफ्टवेअर व नैतिक व्यावसायिक पद्धतींमधून टिकाऊ उत्पन्न मिळवणे, विकसकांना आधार देणे आणि शोषणकारी क्लाउड सेवांना पर्याय देणारे गोपनीयतेचा मान राखणारे इकोसिस्टम तयार करणे हे आहे.",
|
||||||
|
"purchase_panel_info_2": "आम्ही पेवॉल न वाढवण्यास कटिबद्ध आहोत; त्यामुळे या खरेदीमुळे Immich मध्ये कोणतीही अतिरिक्त वैशिष्ट्ये उघडणार नाहीत. चालू विकासासाठी आम्ही तुमच्यासारख्या वापरकर्त्यांच्या पाठबळावर अवलंबून आहोत.",
|
||||||
|
"purchase_panel_title": "प्रकल्पाला साथ द्या",
|
||||||
|
"purchase_per_server": "प्रति सर्व्हर",
|
||||||
|
"purchase_per_user": "प्रति वापरकर्ता",
|
||||||
|
"purchase_remove_product_key": "प्रॉडक्ट की काढा",
|
||||||
|
"purchase_remove_product_key_prompt": "तुम्हाला नक्की प्रॉडक्ट की काढायची आहे का?",
|
||||||
|
"purchase_remove_server_product_key": "सर्व्हरची प्रॉडक्ट की काढा",
|
||||||
|
"purchase_remove_server_product_key_prompt": "तुम्हाला नक्की सर्व्हरची प्रॉडक्ट की काढायची आहे का?",
|
||||||
|
"purchase_server_description_1": "संपूर्ण सर्व्हरसाठी",
|
||||||
|
"purchase_server_description_2": "समर्थक स्थिती",
|
||||||
|
"purchase_server_title": "सर्व्हर",
|
||||||
|
"purchase_settings_server_activated": "सर्व्हरची प्रॉडक्ट की प्रशासकाद्वारे व्यवस्थापित केली जाते",
|
||||||
|
"query_asset_id": "अॅसेट ID चौकशी",
|
||||||
|
"queue_status": "रांगेत {count}/{total}",
|
||||||
|
"rating": "स्टार रेटिंग",
|
||||||
|
"rating_clear": "रेटिंग साफ करा",
|
||||||
|
"rating_count": "{count, plural, one {# तारा} other {# तारे}}",
|
||||||
|
"rating_description": "माहिती पॅनेलमध्ये EXIF रेटिंग दर्शवा",
|
||||||
|
"reaction_options": "रिऍक्शन पर्याय",
|
||||||
|
"read_changelog": "चेंजलॉग वाचा",
|
||||||
|
"readonly_mode_disabled": "फक्त-वाचन मोड निष्क्रिय केला",
|
||||||
|
"readonly_mode_enabled": "फक्त-वाचन मोड सक्षम केला",
|
||||||
|
"reassign": "पुन्हा नियुक्त करा",
|
||||||
|
"reassigned_assets_to_existing_person": "{count, plural, one {# आयटम} other {# आयटम}} {name, select, null {विद्यमान व्यक्तीकडे} other {{name} कडे}} पुन्हा नियुक्त केले",
|
||||||
|
"reassigned_assets_to_new_person": "{count, plural, one {# आयटम} other {# आयटम}} नव्या व्यक्तीकडे पुन्हा नियुक्त केले",
|
||||||
|
"reassing_hint": "निवडलेले आयटम विद्यमान व्यक्तीकडे नियुक्त करा",
|
||||||
|
"recent": "अलीकडील",
|
||||||
|
"recent-albums": "अलीकडील अल्बम",
|
||||||
|
"recent_searches": "अलीकडील शोध",
|
||||||
|
"recently_added": "नुकतेच जोडलेले",
|
||||||
|
"recently_added_page_title": "नुकतेच जोडलेले",
|
||||||
|
"recently_taken": "अलीकडे घेतलेले",
|
||||||
|
"recently_taken_page_title": "अलीकडे घेतलेले",
|
||||||
|
"refresh": "रीफ्रेश करा",
|
||||||
|
"refresh_encoded_videos": "एन्कोड केलेले व्हिडिओ रीफ्रेश करा",
|
||||||
|
"refresh_faces": "चेहरे रीफ्रेश करा",
|
||||||
|
"refresh_metadata": "मेटाडेटा रीफ्रेश करा",
|
||||||
|
"refresh_thumbnails": "थंबनेल रीफ्रेश करा",
|
||||||
|
"refreshed": "रीफ्रेश झाले",
|
||||||
|
"refreshes_every_file": "विद्यमान व नवीन सर्व फाइल्स पुन्हा वाचा",
|
||||||
|
"refreshing_encoded_video": "एन्कोड केलेला व्हिडिओ रीफ्रेश करत आहे",
|
||||||
|
"refreshing_faces": "चेहरे रीफ्रेश करत आहे",
|
||||||
|
"refreshing_metadata": "मेटाडेटा रीफ्रेश करत आहे",
|
||||||
|
"regenerating_thumbnails": "थंबनेल्स पुन्हा तयार करत आहे",
|
||||||
|
"remote": "दूरस्थ",
|
||||||
|
"remote_assets": "दूरस्थ आयटम",
|
||||||
|
"remove": "काढा",
|
||||||
|
"remove_assets_album_confirmation": "अल्बममधून {count, plural, one {# आयटम} other {# आयटम}} काढायचे आहेत का?",
|
||||||
|
"remove_assets_shared_link_confirmation": "या शेअर्ड दुव्यातून {count, plural, one {# आयटम} other {# आयटम}} काढायचे आहेत का?",
|
||||||
|
"remove_assets_title": "आयटम काढायचे?",
|
||||||
|
"remove_custom_date_range": "सानुकूल दिनांक श्रेणी काढा",
|
||||||
|
"remove_deleted_assets": "हटवलेले आयटम काढा",
|
||||||
|
"remove_from_album": "अल्बममधून काढा",
|
||||||
|
"remove_from_album_action_prompt": "अल्बममधून {count} काढले",
|
||||||
|
"remove_from_favorites": "आवडीतून काढा",
|
||||||
|
"remove_from_lock_folder_action_prompt": "लॉक केलेल्या फोल्डरमधून {count} काढले",
|
||||||
|
"remove_from_locked_folder": "लॉक फोल्डरमधून काढा",
|
||||||
|
"remove_from_locked_folder_confirmation": "हे फोटो आणि व्हिडिओ लॉक फोल्डरमधून बाहेर हलवायचे आहेत का? ते तुमच्या लायब्ररीमध्ये दिसतील.",
|
||||||
|
"remove_from_shared_link": "शेअर्ड दुव्यातून काढा",
|
||||||
|
"remove_memory": "मेमरी काढा",
|
||||||
|
"remove_photo_from_memory": "या मेमरीतून फोटो काढा",
|
||||||
|
"remove_tag": "टॅग काढा",
|
||||||
|
"remove_url": "URL काढा",
|
||||||
|
"remove_user": "वापरकर्ता काढा",
|
||||||
|
"removed_api_key": "काढलेली API की: {name}",
|
||||||
|
"removed_from_archive": "आर्काइव्हमधून काढले",
|
||||||
|
"removed_from_favorites": "आवडीतून काढले",
|
||||||
|
"removed_from_favorites_count": "{count, plural, other {आवडीतून # काढले}}",
|
||||||
|
"removed_memory": "मेमरी काढली",
|
||||||
|
"removed_photo_from_memory": "मेमरीतून फोटो काढला",
|
||||||
|
"removed_tagged_assets": "{count, plural, one {# आयटमवरून टॅग काढला} other {# आयटमवरून टॅग काढले}}",
|
||||||
|
"rename": "नाव बदला",
|
||||||
|
"repair": "दुरुस्ती",
|
||||||
|
"repair_no_results_message": "अनट्रॅक्ड व हरवलेल्या फाइल्स येथे दिसतील",
|
||||||
|
"replace_with_upload": "अपलोडने बदला",
|
||||||
|
"repository": "रिपॉझिटरी",
|
||||||
|
"require_password": "पासवर्ड आवश्यक",
|
||||||
|
"require_user_to_change_password_on_first_login": "पहिल्या लॉगिनवेळी वापरकर्त्याने पासवर्ड बदलणे आवश्यक",
|
||||||
|
"rescan": "पुन्हा स्कॅन करा",
|
||||||
|
"reset": "रीसेट करा",
|
||||||
|
"reset_password": "पासवर्ड रीसेट करा",
|
||||||
|
"reset_people_visibility": "लोकांची दृश्यता रीसेट करा",
|
||||||
|
"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": "डीफॉल्टवर रीसेट करा",
|
||||||
|
"resolve_duplicates": "डुप्लिकेट्स सोडवा",
|
||||||
|
"resolved_all_duplicates": "सर्व डुप्लिकेट्स सोडवले",
|
||||||
|
"restore": "पुनर्संचयित करा",
|
||||||
|
"restore_all": "सर्व पुनर्संचयित करा",
|
||||||
|
"restore_trash_action_prompt": "कचरापेटीतून {count} पुनर्संचयित केले",
|
||||||
|
"restore_user": "वापरकर्ता पुनर्संचयित करा",
|
||||||
|
"restored_asset": "पुनर्संचयित आयटम",
|
||||||
|
"resume": "पुन्हा सुरू करा",
|
||||||
|
"resume_paused_jobs": "{count, plural, one {# थांबवलेले काम} other {# थांबवलेली कामे}} पुन्हा सुरू करा",
|
||||||
|
"retry_upload": "अपलोड पुन्हा करा",
|
||||||
|
"review_duplicates": "डुप्लिकेट्सचे पुनरावलोकन करा",
|
||||||
|
"review_large_files": "मोठ्या फाइल्सचे पुनरावलोकन करा",
|
||||||
|
"role": "भूमिका",
|
||||||
|
"role_editor": "संपादक",
|
||||||
|
"role_viewer": "दर्शक",
|
||||||
|
"running": "चालू",
|
||||||
|
"save": "जतन करा",
|
||||||
|
"save_to_gallery": "गॅलरीमध्ये जतन करा",
|
||||||
|
"saved_api_key": "जतन केलेली API की",
|
||||||
|
"saved_profile": "जतन केलेले प्रोफाइल",
|
||||||
|
"saved_settings": "जतन केलेल्या सेटिंग्ज",
|
||||||
|
"say_something": "काहीतरी बोला",
|
||||||
|
"scaffold_body_error_occurred": "त्रुटी आली",
|
||||||
|
"scan_all_libraries": "सर्व लायब्ररी स्कॅन करा",
|
||||||
|
"scan_library": "स्कॅन करा",
|
||||||
|
"scan_settings": "स्कॅन सेटिंग्ज",
|
||||||
|
"scanning_for_album": "अल्बमसाठी स्कॅन करत आहे...",
|
||||||
|
"search": "शोधा",
|
||||||
|
"search_albums": "अल्बम शोधा",
|
||||||
|
"search_by_context": "परिस्थितीनुसार शोधा",
|
||||||
|
"search_by_description": "वर्णनानुसार शोधा",
|
||||||
|
"search_by_description_example": "सापा मधील हायकिंगचा दिवस",
|
||||||
|
"search_by_filename": "फाइल नाव/एक्स्टेंशननुसार शोधा",
|
||||||
|
"search_by_filename_example": "उदा. IMG_1234.JPG किंवा PNG",
|
||||||
|
"search_camera_make": "कॅमेरा निर्माता शोधा...",
|
||||||
|
"search_camera_model": "कॅमेरा मॉडेल शोधा...",
|
||||||
|
"search_city": "शहर शोधा...",
|
||||||
|
"search_country": "देश शोधा...",
|
||||||
|
"search_filter_apply": "फिल्टर लागू करा",
|
||||||
|
"search_filter_camera_title": "कॅमेरा प्रकार निवडा",
|
||||||
|
"search_filter_date": "तारीख",
|
||||||
|
"search_filter_date_interval": "{start} ते {end}",
|
||||||
|
"search_filter_date_title": "दिनांक श्रेणी निवडा",
|
||||||
|
"search_filter_display_option_not_in_album": "अल्बममध्ये नाही",
|
||||||
|
"search_filter_display_options": "प्रदर्शन पर्याय",
|
||||||
|
"search_filter_filename": "फाइल नावाने शोधा",
|
||||||
|
"search_filter_location": "स्थान",
|
||||||
|
"search_filter_location_title": "स्थान निवडा",
|
||||||
|
"search_filter_media_type": "माध्यम प्रकार",
|
||||||
|
"search_filter_media_type_title": "माध्यम प्रकार निवडा",
|
||||||
|
"search_filter_people_title": "लोक निवडा",
|
||||||
|
"search_for": "यासाठी शोधा",
|
||||||
|
"search_for_existing_person": "विद्यमान व्यक्ती शोधा",
|
||||||
|
"search_no_more_result": "आणखी परिणाम नाहीत",
|
||||||
|
"search_no_people": "कोणतीही व्यक्ती नाही",
|
||||||
|
"search_no_people_named": "“{name}” नावाची व्यक्ती सापडली नाही",
|
||||||
|
"search_no_result": "काहीही सापडले नाही; वेगळा शोध शब्द किंवा संयोजन वापरा",
|
||||||
|
"search_options": "शोध पर्याय",
|
||||||
|
"search_page_categories": "श्रेण्या",
|
||||||
|
"search_page_motion_photos": "मोशन फोटो",
|
||||||
|
"search_page_no_objects": "वस्तूंची माहिती उपलब्ध नाही",
|
||||||
|
"search_page_no_places": "ठिकाणांची माहिती उपलब्ध नाही",
|
||||||
|
"search_page_screenshots": "स्क्रीनशॉट्स",
|
||||||
|
"search_page_search_photos_videos": "तुमचे फोटो व व्हिडिओ शोधा",
|
||||||
|
"search_page_selfies": "सेल्फीज",
|
||||||
|
"search_page_things": "वस्तू",
|
||||||
|
"search_page_view_all_button": "सर्व पहा",
|
||||||
|
"search_page_your_activity": "तुमचे क्रियाकलाप",
|
||||||
|
"search_page_your_map": "तुमचा नकाशा",
|
||||||
|
"search_people": "लोक शोधा",
|
||||||
|
"search_places": "ठिकाणे शोधा",
|
||||||
|
"search_rating": "रेटिंगनुसार शोधा...",
|
||||||
|
"search_result_page_new_search_hint": "नवीन शोध",
|
||||||
|
"search_settings": "शोध सेटिंग्ज",
|
||||||
|
"search_state": "राज्य/स्टेट शोधा...",
|
||||||
|
"search_suggestion_list_smart_search_hint_1": "डीफॉल्टने स्मार्ट सर्च सुरू आहे; मेटाडेटा शोधण्यासाठी ही रचना वापरा. ",
|
||||||
|
"search_suggestion_list_smart_search_hint_2": "m:तुमचा-शोध-शब्द",
|
||||||
|
"search_tags": "टॅग्स शोधा...",
|
||||||
|
"search_timezone": "वेळक्षेत्र शोधा...",
|
||||||
|
"search_type": "शोध प्रकार",
|
||||||
|
"search_your_photos": "तुमचे फोटो शोधा",
|
||||||
|
"searching_locales": "लोकल्स शोधत आहे...",
|
||||||
|
"second": "सेकंद",
|
||||||
|
"see_all_people": "सर्व लोक पाहा",
|
||||||
|
"select": "निवडा",
|
||||||
|
"select_album_cover": "अल्बम कव्हर निवडा",
|
||||||
|
"select_all": "सर्व निवडा",
|
||||||
|
"select_all_duplicates": "सर्व डुप्लिकेट्स निवडा",
|
||||||
|
"select_all_in": "{group} मधील सर्व निवडा",
|
||||||
|
"select_avatar_color": "अवतारचा रंग निवडा",
|
||||||
|
"select_face": "चेहरा निवडा",
|
||||||
|
"select_featured_photo": "फिचर्ड फोटो निवडा",
|
||||||
|
"select_from_computer": "कॉम्प्युटरमधून निवडा",
|
||||||
|
"select_keep_all": "सर्व ठेवणे निवडा",
|
||||||
|
"select_library_owner": "लायब्ररी मालक निवडा",
|
||||||
|
"select_new_face": "नवा चेहरा निवडा",
|
||||||
|
"select_person_to_tag": "टॅग करण्यासाठी व्यक्ती निवडा",
|
||||||
|
"select_photos": "फोटो निवडा",
|
||||||
|
"select_trash_all": "कचरापेटीतील सर्व निवडा",
|
||||||
|
"select_user_for_sharing_page_err_album": "अल्बम तयार करण्यात अयशस्वी",
|
||||||
|
"selected": "निवडलेले",
|
||||||
|
"selected_count": "{count, plural, other {# निवडले}}",
|
||||||
|
"selected_gps_coordinates": "निवडलेल्या GPS स्थाननिर्देशांक",
|
||||||
|
"send_message": "संदेश पाठवा",
|
||||||
|
"send_welcome_email": "स्वागत ईमेल पाठवा",
|
||||||
|
"server_endpoint": "सर्व्हर एंडपॉइंट",
|
||||||
|
"server_info_box_app_version": "अॅप आवृत्ती",
|
||||||
|
"server_info_box_server_url": "सर्व्हर URL",
|
||||||
|
"server_offline": "सर्व्हर ऑफलाइन",
|
||||||
|
"server_online": "सर्व्हर ऑनलाइन",
|
||||||
|
"server_privacy": "सर्व्हर गोपनीयता",
|
||||||
|
"server_stats": "सर्व्हर आकडेवारी",
|
||||||
|
"server_version": "सर्व्हर आवृत्ती",
|
||||||
|
"set": "सेट करा",
|
||||||
|
"set_as_album_cover": "अल्बम कव्हर म्हणून सेट करा",
|
||||||
|
"set_as_featured_photo": "फिचर्ड फोटो म्हणून सेट करा",
|
||||||
|
"set_as_profile_picture": "प्रोफाइल फोटो म्हणून सेट करा",
|
||||||
|
"set_date_of_birth": "जन्मतारीख सेट करा",
|
||||||
|
"set_profile_picture": "प्रोफाइल फोटो सेट करा",
|
||||||
|
"set_slideshow_to_fullscreen": "स्लाइडशो फुलस्क्रीन करा",
|
||||||
|
"set_stack_primary_asset": "मुख्य आयटम म्हणून सेट करा",
|
||||||
|
"setting_image_viewer_help": "डीटेल व्ह्यूअर आधी लहान थंबनेल लोड करतो, नंतर (सक्षम असल्यास) मध्यम आकाराचे प्रिव्ह्यू लोड करतो, आणि शेवटी (सक्षम असल्यास) मूळ प्रतिमा लोड करतो.",
|
||||||
|
"setting_image_viewer_original_subtitle": "पूर्ण-रिझोल्यूशनची मूळ प्रतिमा लोड करण्यासाठी सक्षम करा (मोठी). डेटा वापर कमी करण्यासाठी (नेटवर्क व डिव्हाइस कॅश दोन्ही) अक्षम करा.",
|
||||||
|
"setting_image_viewer_original_title": "मूळ प्रतिमा लोड करा",
|
||||||
|
"setting_image_viewer_preview_subtitle": "मध्यम-रिझोल्यूशन प्रतिमा लोड करण्यासाठी सक्षम करा. अक्षम केल्यास थेट मूळ प्रतिमा लोड होईल किंवा फक्त थंबनेल वापरला जाईल.",
|
||||||
|
"setting_image_viewer_preview_title": "प्रिव्ह्यू प्रतिमा लोड करा",
|
||||||
|
"setting_image_viewer_title": "प्रतिमा",
|
||||||
|
"setting_languages_apply": "लागू करा",
|
||||||
|
"setting_languages_subtitle": "अॅपची भाषा बदला",
|
||||||
|
"setting_notifications_notify_failures_grace_period": "पार्श्वभूमी बॅकअप अपयशांची सूचना: {duration}",
|
||||||
|
"setting_notifications_notify_hours": "{count} तास",
|
||||||
|
"setting_notifications_notify_immediately": "तत्काळ",
|
||||||
|
"setting_notifications_notify_minutes": "{count} मिनिटे",
|
||||||
|
"setting_notifications_notify_never": "कधीच नाही",
|
||||||
|
"setting_notifications_notify_seconds": "{count} सेकंद",
|
||||||
|
"setting_notifications_single_progress_subtitle": "प्रत्येक आयटमसाठी तपशीलवार अपलोड प्रगती माहिती",
|
||||||
|
"setting_notifications_single_progress_title": "पार्श्वभूमी बॅकअपची तपशीलवार प्रगती दाखवा",
|
||||||
|
"setting_notifications_subtitle": "तुमची सूचना प्राधान्ये समायोजित करा",
|
||||||
|
"setting_notifications_total_progress_subtitle": "एकूण अपलोड प्रगती (पूर्ण/एकूण आयटम)",
|
||||||
|
"setting_notifications_total_progress_title": "पार्श्वभूमी बॅकअपची एकूण प्रगती दाखवा",
|
||||||
|
"setting_video_viewer_looping_title": "लूपिंग",
|
||||||
|
"setting_video_viewer_original_video_subtitle": "सर्व्हरवरून व्हिडिओ स्ट्रिम करताना ट्रान्सकोड उपलब्ध असला तरी मूळ व्हिडिओ प्ले करा. बफरिंग होऊ शकते. स्थानिकरीत्या उपलब्ध व्हिडिओ या सेटिंगपासून स्वतंत्रपणे मूळ गुणवत्तेत प्ले होतात.",
|
||||||
|
"setting_video_viewer_original_video_title": "मूळ व्हिडिओ सक्तीने प्ले करा",
|
||||||
|
"settings": "सेटिंग्ज",
|
||||||
|
"settings_require_restart": "ही सेटिंग लागू करण्यासाठी कृपया Immich रीस्टार्ट करा",
|
||||||
|
"settings_saved": "सेटिंग्ज जतन केल्या",
|
||||||
|
"setup_pin_code": "PIN कोड सेट करा",
|
||||||
|
"share": "शेअर करा",
|
||||||
|
"share_action_prompt": "{count} आयटम शेअर केले",
|
||||||
|
"share_add_photos": "फोटो जोडा",
|
||||||
|
"share_assets_selected": "{count} निवडले",
|
||||||
|
"share_dialog_preparing": "तयार करत आहे...",
|
||||||
|
"share_link": "शेअर दुवा",
|
||||||
|
"shared": "शेअर केले",
|
||||||
|
"shared_album_activities_input_disable": "टिप्पणी निष्क्रिय आहे",
|
||||||
|
"shared_album_activity_remove_content": "ही कृती हटवायची आहे का?",
|
||||||
|
"shared_album_activity_remove_title": "कृती हटवा",
|
||||||
|
"shared_album_section_people_action_error": "अल्बममधून बाहेर पडताना/काढताना त्रुटी",
|
||||||
|
"shared_album_section_people_action_leave": "अल्बममधून वापरकर्ता काढा",
|
||||||
|
"shared_album_section_people_action_remove_user": "अल्बममधून वापरकर्ता काढा",
|
||||||
|
"shared_album_section_people_title": "लोक",
|
||||||
|
"shared_by": "यांनी शेअर केले",
|
||||||
|
"shared_by_user": "{user} यांनी शेअर केले",
|
||||||
|
"shared_by_you": "तुमच्याकडून शेअर केले",
|
||||||
|
"shared_from_partner": "{partner} कडील फोटो",
|
||||||
|
"shared_intent_upload_button_progress_text": "{current}/{total} अपलोड झाले",
|
||||||
|
"shared_link_app_bar_title": "शेअर्ड दुवे",
|
||||||
|
"shared_link_clipboard_copied_massage": "क्लिपबोर्डवर कॉपी केले",
|
||||||
|
"shared_link_clipboard_text": "दुवा: {link}\nपासवर्ड: {password}",
|
||||||
|
"shared_link_create_error": "शेअर्ड दुवा तयार करताना त्रुटी",
|
||||||
|
"shared_link_custom_url_description": "सानुकूल URL द्वारे हा शेअर्ड दुवा उघडा",
|
||||||
|
"shared_link_edit_description_hint": "शेअरचे वर्णन प्रविष्ट करा",
|
||||||
|
"shared_link_edit_expire_after_option_day": "1 दिवस",
|
||||||
|
"shared_link_edit_expire_after_option_days": "{count} दिवस",
|
||||||
|
"shared_link_edit_expire_after_option_hour": "1 तास",
|
||||||
|
"shared_link_edit_expire_after_option_hours": "{count} तास",
|
||||||
|
"shared_link_edit_expire_after_option_minute": "1 मिनिट",
|
||||||
|
"shared_link_edit_expire_after_option_minutes": "{count} मिनिटे",
|
||||||
|
"shared_link_edit_expire_after_option_months": "{count} महिने",
|
||||||
|
"shared_link_edit_expire_after_option_year": "{count} वर्ष",
|
||||||
|
"shared_link_edit_password_hint": "शेअरचा पासवर्ड प्रविष्ट करा",
|
||||||
|
"shared_link_edit_submit_button": "दुवा अद्ययावत करा",
|
||||||
|
"shared_link_error_server_url_fetch": "सर्व्हर URL मिळू शकला नाही",
|
||||||
|
"shared_link_expires_day": "{count} दिवसात संपेल",
|
||||||
|
"shared_link_expires_days": "{count} दिवसात संपेल",
|
||||||
|
"shared_link_expires_hour": "{count} तासात संपेल",
|
||||||
|
"shared_link_expires_hours": "{count} तासांत संपेल",
|
||||||
|
"shared_link_expires_minute": "{count} मिनिटात संपेल",
|
||||||
|
"shared_link_expires_minutes": "{count} मिनिटांत संपेल",
|
||||||
|
"shared_link_expires_never": "कधीच संपत नाही ∞",
|
||||||
|
"shared_link_expires_second": "{count} सेकंदात संपेल",
|
||||||
|
"shared_link_expires_seconds": "{count} सेकंदात संपेल",
|
||||||
|
"shared_link_individual_shared": "वैयक्तिक शेअर",
|
||||||
|
"shared_link_info_chip_metadata": "EXIF (एक्सिफ)",
|
||||||
|
"shared_link_manage_links": "शेअर्ड दुवे व्यवस्थापित करा",
|
||||||
|
"shared_link_options": "शेअर्ड दुवा पर्याय",
|
||||||
|
"shared_link_password_description": "हा शेअर्ड दुवा पाहण्यासाठी पासवर्ड आवश्यक आहे",
|
||||||
|
"shared_links": "शेअर्ड दुवे",
|
||||||
|
"shared_links_description": "दुव्याद्वारे फोटो आणि व्हिडिओ शेअर करा",
|
||||||
|
"shared_photos_and_videos_count": "{assetCount, plural, other {# शेअर्ड फोटो आणि व्हिडिओ}}",
|
||||||
|
"shared_with_me": "माझ्यासोबत शेअर केलेले",
|
||||||
|
"shared_with_partner": "{partner} सोबत शेअर केले",
|
||||||
|
"sharing": "शेअरिंग",
|
||||||
|
"sharing_enter_password": "हे पृष्ठ पाहण्यासाठी कृपया पासवर्ड प्रविष्ट करा.",
|
||||||
|
"sharing_page_album": "शेअर्ड अल्बम",
|
||||||
|
"sharing_page_description": "तुमच्या नेटवर्कमधील लोकांसोबत फोटो-व्हिडिओ शेअर करण्यासाठी शेअर्ड अल्बम तयार करा.",
|
||||||
|
"sharing_page_empty_list": "रिकामी यादी",
|
||||||
|
"sharing_sidebar_description": "साइडबारमध्ये शेअरिंगचा दुवा दाखवा",
|
||||||
|
"sharing_silver_appbar_create_shared_album": "नवीन शेअर्ड अल्बम",
|
||||||
|
"sharing_silver_appbar_share_partner": "भागीदारासोबत शेअर करा",
|
||||||
|
"shift_to_permanent_delete": "अॅसेट कायमचे हटवण्यासाठी ⇧ दाबा",
|
||||||
|
"show_album_options": "अल्बम पर्याय दाखवा",
|
||||||
|
"show_albums": "अल्बम दाखवा",
|
||||||
|
"show_all_people": "सर्व लोक दाखवा",
|
||||||
|
"show_and_hide_people": "लोक दाखवा आणि लपवा",
|
||||||
|
"show_file_location": "फाइलचे स्थान दाखवा",
|
||||||
|
"show_gallery": "गॅलरी दाखवा",
|
||||||
|
"show_hidden_people": "लपवलेले लोक दाखवा",
|
||||||
|
"show_in_timeline": "टाइमलाइनमध्ये दाखवा",
|
||||||
|
"show_in_timeline_setting_description": "या वापरकर्त्याचे फोटो-व्हिडिओ तुमच्या टाइमलाइनमध्ये दाखवा",
|
||||||
|
"show_keyboard_shortcuts": "कीबोर्ड शॉर्टकट दाखवा",
|
||||||
|
"show_metadata": "मेटाडेटा दाखवा",
|
||||||
|
"show_or_hide_info": "माहिती दाखवा किंवा लपवा",
|
||||||
|
"show_password": "पासवर्ड दाखवा",
|
||||||
|
"show_person_options": "व्यक्तीचे पर्याय दाखवा",
|
||||||
|
"show_progress_bar": "प्रगती पट्टी दाखवा",
|
||||||
|
"show_search_options": "शोध पर्याय दाखवा",
|
||||||
|
"show_shared_links": "शेअर केलेले दुवे दाखवा",
|
||||||
|
"show_slideshow_transition": "स्लाइडशो ट्रांझिशन दाखवा",
|
||||||
|
"show_supporter_badge": "समर्थक बॅज",
|
||||||
|
"show_supporter_badge_description": "समर्थक बॅज दाखवा",
|
||||||
|
"shuffle": "शफल",
|
||||||
|
"sidebar": "साइडबार",
|
||||||
|
"sidebar_display_description": "साइडबारमध्ये दृश्याचा दुवा दाखवा",
|
||||||
|
"sign_out": "साइन आउट",
|
||||||
|
"sign_up": "साइन अप",
|
||||||
|
"size": "आकार",
|
||||||
|
"skip_to_content": "सामग्रीकडे जा",
|
||||||
|
"skip_to_folders": "फोल्डर्सकडे जा",
|
||||||
|
"skip_to_tags": "टॅग्सकडे जा",
|
||||||
|
"slideshow": "स्लाइडशो",
|
||||||
|
"slideshow_settings": "स्लाइडशो सेटिंग्ज",
|
||||||
|
"sort_albums_by": "अल्बम यानुसार क्रम लावा…",
|
||||||
|
"sort_created": "तयार केलेली तारीख",
|
||||||
|
"sort_items": "आयटमांची संख्या",
|
||||||
|
"sort_modified": "बदल केलेली तारीख",
|
||||||
|
"sort_newest": "अलीकडचा फोटो",
|
||||||
|
"sort_oldest": "सर्वात जुना फोटो",
|
||||||
|
"sort_people_by_similarity": "साम्यतेनुसार व्यक्तींचा क्रम लावा",
|
||||||
|
"sort_recent": "नुकताच घेतलेला फोटो",
|
||||||
|
"sort_title": "शीर्षक",
|
||||||
|
"source": "स्त्रोत",
|
||||||
|
"stack": "स्टॅक",
|
||||||
|
"stack_action_prompt": "{count} स्टॅक केले",
|
||||||
|
"stack_duplicates": "डुप्लिकेट्स स्टॅक करा",
|
||||||
|
"stack_select_one_photo": "स्टॅकसाठी एक मुख्य फोटो निवडा",
|
||||||
|
"stack_selected_photos": "निवडलेले फोटो स्टॅक करा",
|
||||||
|
"stacked_assets_count": "स्टॅक केलेले {count, plural, one {# आयटम} other {# आयटम}}",
|
||||||
|
"stacktrace": "स्टॅकट्रेस",
|
||||||
|
"start": "सुरू करा",
|
||||||
|
"start_date": "सुरुवातीची तारीख",
|
||||||
|
"state": "स्थिती",
|
||||||
|
"status": "स्टेटस",
|
||||||
|
"stop_casting": "कास्टिंग थांबवा",
|
||||||
|
"stop_motion_photo": "मोशन फोटो थांबवा",
|
||||||
|
"stop_photo_sharing": "तुमचे फोटो शेअर करणे थांबवायचे?",
|
||||||
|
"stop_photo_sharing_description": "{partner} यांना आता तुमचे फोटो पाहता येणार नाहीत.",
|
||||||
|
"stop_sharing_photos_with_user": "या वापरकर्त्यासोबत तुमचे फोटो शेअर करणे थांबवा",
|
||||||
|
"storage": "संचयन जागा",
|
||||||
|
"storage_label": "संचयन लेबल",
|
||||||
|
"storage_quota": "संचयन कोटा",
|
||||||
|
"storage_usage": "{available} पैकी {used} वापरले",
|
||||||
|
"submit": "सादर करा",
|
||||||
|
"success": "यशस्वी",
|
||||||
|
"suggestions": "सूचना",
|
||||||
|
"sunrise_on_the_beach": "समुद्रकिनाऱ्यावर सूर्योदय",
|
||||||
|
"support": "सहाय्य",
|
||||||
|
"support_and_feedback": "सहाय्य आणि अभिप्राय",
|
||||||
|
"support_third_party_description": "तुमची Immich स्थापना तृतीय-पक्ष पॅकेजद्वारे दिली आहे. तुम्हाला येणाऱ्या समस्या त्या पॅकेजमुळे असू शकतात; त्यामुळे खालील दुव्यांचा वापर करून सर्वप्रथम त्यांच्याकडे समस्या नोंदवा.",
|
||||||
|
"swap_merge_direction": "मर्ज दिशेची अदलाबदल करा",
|
||||||
|
"sync": "समक्रमण",
|
||||||
|
"sync_albums": "अल्बम समक्रमित करा",
|
||||||
|
"sync_albums_manual_subtitle": "अपलोड केलेले सर्व फोटो-व्हिडिओ निवडलेल्या बॅकअप अल्बममध्ये समक्रमित करा",
|
||||||
|
"sync_local": "स्थानिक समक्रमण",
|
||||||
|
"sync_remote": "दूरस्थ समक्रमण",
|
||||||
|
"sync_status": "समक्रमण स्थिती",
|
||||||
|
"sync_status_subtitle": "समक्रमण प्रणाली पाहा आणि व्यवस्थापित करा",
|
||||||
|
"sync_upload_album_setting_subtitle": "Immich वरील निवडलेल्या अल्बममध्ये तुमचे फोटो व व्हिडिओ तयार करा आणि अपलोड करा",
|
||||||
|
"tag": "टॅग",
|
||||||
|
"tag_assets": "आयटमना टॅग लावा",
|
||||||
|
"tag_created": "तयार केलेला टॅग: {tag}",
|
||||||
|
"tag_feature_description": "तार्किक टॅग विषयांनुसार गटबद्ध फोटो व व्हिडिओ ब्राउझ करा",
|
||||||
|
"tag_not_found_question": "टॅग सापडत नाही? <link>नवा टॅग तयार करा</link>",
|
||||||
|
"tag_people": "व्यक्तींना टॅग करा",
|
||||||
|
"tag_updated": "अद्ययावत टॅग: {tag}",
|
||||||
|
"tagged_assets": "टॅग केलेले {count, plural, one {# आयटम} other {# आयटम}}",
|
||||||
|
"tags": "टॅग्स",
|
||||||
|
"tap_to_run_job": "जॉब चालवण्यासाठी टॅप करा",
|
||||||
|
"template": "टेम्पलेट",
|
||||||
|
"theme": "थीम",
|
||||||
|
"theme_selection": "थीम निवड",
|
||||||
|
"theme_selection_description": "ब्राउझरच्या सिस्टम पसंतीनुसार थीम आपोआप लाइट/डार्क करा",
|
||||||
|
"theme_setting_asset_list_storage_indicator_title": "अॅसेट टाइल्सवर स्टोरेज निर्देशक दाखवा",
|
||||||
|
"theme_setting_asset_list_tiles_per_row_title": "प्रत्येक रांगेतील अॅसेट्सची संख्या ({count})",
|
||||||
|
"theme_setting_colorful_interface_subtitle": "बॅकग्राऊंड पृष्ठभागांवर प्राथमिक रंग लागू करा.",
|
||||||
|
"theme_setting_colorful_interface_title": "रंगीबेरंगी इंटरफेस",
|
||||||
|
"theme_setting_image_viewer_quality_subtitle": "डीटेल इमेज व्ह्यूअरची गुणवत्ता समायोजित करा",
|
||||||
|
"theme_setting_image_viewer_quality_title": "इमेज व्ह्यूअर गुणवत्ता",
|
||||||
|
"theme_setting_primary_color_subtitle": "प्राथमिक कृती व अॅक्सेंटसाठी रंग निवडा.",
|
||||||
|
"theme_setting_primary_color_title": "प्राथमिक रंग",
|
||||||
|
"theme_setting_system_primary_color_title": "सिस्टम रंग वापरा",
|
||||||
|
"theme_setting_system_theme_switch": "स्वयंचलित (सिस्टम सेटिंग्जनुसार)",
|
||||||
|
"theme_setting_theme_subtitle": "अॅपची थीम सेटिंग निवडा",
|
||||||
|
"theme_setting_three_stage_loading_subtitle": "थ्री-स्टेज लोडिंगमुळे गती वाढू शकते; परंतु नेटवर्क लोड लक्षणीय वाढतो",
|
||||||
|
"theme_setting_three_stage_loading_title": "थ्री-स्टेज लोडिंग सुरू करा",
|
||||||
|
"they_will_be_merged_together": "ते एकत्र विलीन केले जातील",
|
||||||
|
"third_party_resources": "तृतीय-पक्ष संसाधने",
|
||||||
|
"time_based_memories": "वेळ-आधारित मेमरीज",
|
||||||
|
"timeline": "टाइमलाइन",
|
||||||
|
"timezone": "वेळक्षेत्र",
|
||||||
|
"to_archive": "आर्काइव्ह करा",
|
||||||
|
"to_change_password": "परवलीचा शब्द बदला",
|
||||||
|
"to_favorite": "आवडीमध्ये जोडा",
|
||||||
|
"to_login": "लॉग इन करा",
|
||||||
|
"to_multi_select": "बहु-निवड करा",
|
||||||
|
"to_parent": "पालकाकडे जा",
|
||||||
|
"to_select": "निवडा",
|
||||||
|
"to_trash": "कचरापेटीत टाका",
|
||||||
|
"toggle_settings": "सेटिंग्ज टॉगल करा",
|
||||||
|
"total": "एकूण",
|
||||||
|
"total_usage": "एकूण वापर",
|
||||||
|
"trash": "कचरापेटी",
|
||||||
|
"trash_action_prompt": "{count} कचरापेटीत हलवले",
|
||||||
|
"trash_all": "सर्व कचरापेटीत टाका",
|
||||||
|
"trash_count": "कचरापेटी {count, number}",
|
||||||
|
"trash_delete_asset": "कचरापेटीत टाका/अॅसेट हटवा",
|
||||||
|
"trash_emptied": "कचरापेटी रिकामी केली",
|
||||||
|
"trash_no_results_message": "कचरापेटीत टाकलेले फोटो व व्हिडिओ येथे दिसतील.",
|
||||||
|
"trash_page_delete_all": "सर्व हटवा",
|
||||||
|
"trash_page_empty_trash_dialog_content": "कचरापेटी रिकामी करायची का? हे आयटम Immich मधून कायमचे हटवले जातील",
|
||||||
|
"trash_page_info": "कचरापेटीतील आयटम {days} दिवसांनंतर कायमचे हटवले जातील",
|
||||||
|
"trash_page_no_assets": "कचरापेटीत कोणतेही आयटम नाहीत",
|
||||||
|
"trash_page_restore_all": "सर्व परत आणा",
|
||||||
|
"trash_page_select_assets_btn": "आयटम निवडा",
|
||||||
|
"trash_page_title": "कचरापेटी ({count})",
|
||||||
|
"trashed_items_will_be_permanently_deleted_after": "कचरापेटीतील आयटम {days, plural, one {# दिवसांनंतर} other {# दिवसांनंतर}} कायमचे हटवले जातील.",
|
||||||
|
"troubleshoot": "समस्या निवारण",
|
||||||
|
"type": "प्रकार",
|
||||||
|
"unable_to_change_pin_code": "PIN कोड बदलता येत नाही",
|
||||||
|
"unable_to_setup_pin_code": "PIN कोड सेट करू शकत नाही",
|
||||||
|
"unarchive": "अनआर्काइव्ह करा",
|
||||||
|
"unarchive_action_prompt": "{count} आर्काइव्हमधून काढले",
|
||||||
|
"unarchived_count": "{count, plural, other {अनआर्काइव्ह #}}",
|
||||||
|
"undo": "पूर्ववत करा",
|
||||||
|
"unfavorite": "आवडीतून काढा",
|
||||||
|
"unfavorite_action_prompt": "{count} आवडीतून काढले",
|
||||||
|
"unhide_person": "व्यक्ती दर्शवा",
|
||||||
|
"unknown": "अज्ञात",
|
||||||
|
"unknown_country": "अज्ञात देश",
|
||||||
|
"unknown_year": "अज्ञात वर्ष",
|
||||||
|
"unlimited": "अमर्यादित",
|
||||||
|
"unlink_motion_video": "मोशन व्हिडिओ अनलिंक करा",
|
||||||
|
"unlink_oauth": "OAuth अनलिंक करा",
|
||||||
|
"unlinked_oauth_account": "OAuth खाते अनलिंक केले",
|
||||||
|
"unmute_memories": "मेमरीज अनम्यूट करा",
|
||||||
|
"unnamed_album": "नाव नसलेला अल्बम",
|
||||||
|
"unnamed_album_delete_confirmation": "तुम्हाला हा अल्बम खरंच हटवायचा आहे का?",
|
||||||
|
"unnamed_share": "नाव नसलेले शेअर",
|
||||||
|
"unsaved_change": "न साठवलेला बदल",
|
||||||
|
"unselect_all": "सर्व निवडी रद्द करा",
|
||||||
|
"unselect_all_duplicates": "सर्व डुप्लिकेट्सची निवड रद्द करा",
|
||||||
|
"unselect_all_in": "{group} मधील सर्व निवडी रद्द करा",
|
||||||
|
"unstack": "स्टॅक वेगळा करा",
|
||||||
|
"unstack_action_prompt": "{count} अनस्टॅक केले",
|
||||||
|
"unstacked_assets_count": "अनस्टॅक केलेले {count, plural, one {# आयटम} other {# आयटम}}",
|
||||||
|
"untagged": "टॅग नसलेले",
|
||||||
|
"up_next": "पुढे",
|
||||||
|
"update_location_action_prompt": "निवडलेल्या {count} आयटमचे स्थान याने अद्ययावत करा:",
|
||||||
|
"updated_at": "अद्ययावत केले",
|
||||||
|
"updated_password": "परवलीचा शब्द अद्ययावत केला",
|
||||||
|
"upload": "अपलोड",
|
||||||
|
"upload_action_prompt": "अपलोडसाठी {count} रांगेत",
|
||||||
|
"upload_concurrency": "अपलोड समांतरता",
|
||||||
|
"upload_details": "अपलोड तपशील",
|
||||||
|
"upload_dialog_info": "निवडलेले आयटम सर्व्हरवर बॅकअप करायचे का?",
|
||||||
|
"upload_dialog_title": "अॅसेट अपलोड करा",
|
||||||
|
"upload_errors": "अपलोड पूर्ण झाले; {count, plural, one {# त्रुटी} other {# त्रुटी}} आढळल्या. नवीन अपलोड आयटम पाहण्यासाठी पृष्ठ रीफ्रेश करा.",
|
||||||
|
"upload_finished": "अपलोड पूर्ण",
|
||||||
|
"upload_progress": "उर्वरित {remaining, number} — प्रक्रिया झालेले {processed, number}/{total, number}",
|
||||||
|
"upload_skipped_duplicates": "वगळले {count, plural, one {# डुप्लिकेट आयटम} other {# डुप्लिकेट आयटम}}",
|
||||||
|
"upload_status_duplicates": "डुप्लिकेट",
|
||||||
|
"upload_status_errors": "त्रुटी",
|
||||||
|
"upload_status_uploaded": "अपलोड झाले",
|
||||||
|
"upload_success": "अपलोड यशस्वी. नवीन अपलोड आयटम दिसण्यासाठी पृष्ठ रीफ्रेश करा.",
|
||||||
|
"upload_to_immich": "Immich वर अपलोड करा ({count})",
|
||||||
|
"uploading": "अपलोड होत आहे",
|
||||||
|
"uploading_media": "माध्यमे अपलोड होत आहेत",
|
||||||
|
"url": "URL",
|
||||||
|
"usage": "वापर",
|
||||||
|
"use_biometric": "बायोमेट्रिक वापरा",
|
||||||
|
"use_current_connection": "सध्याचे कनेक्शन वापरा",
|
||||||
|
"use_custom_date_range": "याऐवजी सानुकूल दिनांक श्रेणी वापरा",
|
||||||
|
"user": "वापरकर्ता",
|
||||||
|
"user_has_been_deleted": "हा वापरकर्ता हटविला गेला आहे.",
|
||||||
|
"user_id": "वापरकर्ता आयडी",
|
||||||
|
"user_liked": "{user} यांना {type, select, photo {हा फोटो} video {हा व्हिडिओ} asset {हा आयटम} other {हे}} आवडले",
|
||||||
|
"user_pin_code_settings": "PIN कोड",
|
||||||
|
"user_pin_code_settings_description": "तुमचा PIN कोड व्यवस्थापित करा",
|
||||||
|
"user_privacy": "वापरकर्ता गोपनीयता",
|
||||||
|
"user_purchase_settings": "खरेदी",
|
||||||
|
"user_purchase_settings_description": "तुमची खरेदी व्यवस्थापित करा",
|
||||||
|
"user_role_set": "{user} यांना {role} म्हणून सेट करा",
|
||||||
|
"user_usage_detail": "वापरकर्त्याच्या वापराचा तपशील",
|
||||||
|
"user_usage_stats": "खात्याच्या वापराच्या सांख्यिकी",
|
||||||
|
"user_usage_stats_description": "खात्याच्या वापराच्या सांख्यिकी पहा",
|
||||||
|
"username": "वापरकर्तानाव",
|
||||||
|
"users": "वापरकर्ते",
|
||||||
|
"users_added_to_album_count": "अल्बममध्ये {count, plural, one {# वापरकर्ता जोडला} other {# वापरकर्ते जोडले}}",
|
||||||
|
"utilities": "उपयुक्तता",
|
||||||
|
"validate": "तपासा",
|
||||||
|
"validate_endpoint_error": "कृपया वैध URL प्रविष्ट करा",
|
||||||
|
"variables": "चल",
|
||||||
|
"version": "आवृत्ती",
|
||||||
|
"version_announcement_closing": "तुमचा मित्र, अॅलेक्स",
|
||||||
|
"version_announcement_message": "नमस्कार! Immich ची नवी आवृत्ती उपलब्ध आहे. तुमची संरचना अद्ययावत आणि बिनचूक राहावी यासाठी कृपया काही वेळ काढून <link>रिलीज नोट्स</link> वाचा, विशेषतः तुम्ही WatchTower किंवा अद्ययावत प्रक्रिया स्वयंचलितपणे हाताळणारी कोणतीही व्यवस्था वापरत असाल तर.",
|
||||||
|
"version_history": "आवृत्ती इतिहास",
|
||||||
|
"version_history_item": "{date} रोजी {version} स्थापित केली",
|
||||||
|
"video": "व्हिडिओ",
|
||||||
|
"video_hover_setting": "हावर केल्यावर व्हिडिओ थंबनेल प्ले करा",
|
||||||
|
"video_hover_setting_description": "आयटमवर माऊस नेल्यावर व्हिडिओ थंबनेल प्ले होईल. पर्याय बंद असला तरी प्ले चिन्हावर हावर केल्यास प्लेबॅक सुरू करता येईल.",
|
||||||
|
"videos": "व्हिडिओ",
|
||||||
|
"videos_count": "{count, plural, one {# व्हिडिओ} other {# व्हिडिओ}}",
|
||||||
|
"view": "पहा",
|
||||||
|
"view_album": "अल्बम पहा",
|
||||||
|
"view_all": "सर्व पहा",
|
||||||
|
"view_all_users": "सर्व वापरकर्ते पहा",
|
||||||
|
"view_details": "तपशील पहा",
|
||||||
|
"view_in_timeline": "टाइमलाइनमध्ये पहा",
|
||||||
|
"view_link": "दुवा पहा",
|
||||||
|
"view_links": "दुवे पहा",
|
||||||
|
"view_name": "पहा",
|
||||||
|
"view_next_asset": "पुढील आयटम पहा",
|
||||||
|
"view_previous_asset": "मागील आयटम पहा",
|
||||||
|
"view_qr_code": "QR कोड पहा",
|
||||||
|
"view_similar_photos": "समान फोटो पहा",
|
||||||
|
"view_stack": "स्टॅक पहा",
|
||||||
|
"view_user": "वापरकर्ता पहा",
|
||||||
|
"viewer_remove_from_stack": "स्टॅकमधून काढा",
|
||||||
|
"viewer_stack_use_as_main_asset": "मुख्य आयटम म्हणून वापरा",
|
||||||
|
"viewer_unstack": "स्टॅक वेगळा करा",
|
||||||
|
"visibility_changed": "दृश्यता {count, plural, one {# व्यक्तीसाठी बदलली} other {# व्यक्तींसाठी बदलली}}",
|
||||||
"waiting": "प्रतीक्षेत",
|
"waiting": "प्रतीक्षेत",
|
||||||
"warning": "चेतावणी",
|
"warning": "चेतावणी",
|
||||||
"week": "आठवडा",
|
"week": "आठवडा",
|
||||||
|
|||||||
@@ -1515,7 +1515,7 @@
|
|||||||
"profile_drawer_client_out_of_date_minor": "Mobilapp er utdatert. Vennligst oppdater til nyeste versjon.",
|
"profile_drawer_client_out_of_date_minor": "Mobilapp er utdatert. Vennligst oppdater til nyeste versjon.",
|
||||||
"profile_drawer_client_server_up_to_date": "Klient og server er oppdatert",
|
"profile_drawer_client_server_up_to_date": "Klient og server er oppdatert",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
"profile_drawer_readonly_mode": "Skrivebeskyttet modus er aktivert. Dobbelttrykk på brukerens avatarikon for å avslutte.",
|
"profile_drawer_readonly_mode": "Skrivebeskyttet modus er aktivert. Langttrykk på brukerens avatarikon for å avslutte.",
|
||||||
"profile_drawer_server_out_of_date_major": "Server er utdatert. Vennligst oppdater til nyeste versjon.",
|
"profile_drawer_server_out_of_date_major": "Server er utdatert. Vennligst oppdater til nyeste versjon.",
|
||||||
"profile_drawer_server_out_of_date_minor": "Server er utdatert. Vennligst oppdater til nyeste versjon.",
|
"profile_drawer_server_out_of_date_minor": "Server er utdatert. Vennligst oppdater til nyeste versjon.",
|
||||||
"profile_image_of_user": "Profil bilde av {user}",
|
"profile_image_of_user": "Profil bilde av {user}",
|
||||||
@@ -1917,6 +1917,8 @@
|
|||||||
"sync_albums_manual_subtitle": "Synkroniser alle opplastede videoer og bilder til det valgte backupalbumet",
|
"sync_albums_manual_subtitle": "Synkroniser alle opplastede videoer og bilder til det valgte backupalbumet",
|
||||||
"sync_local": "Synkroniser lokalt",
|
"sync_local": "Synkroniser lokalt",
|
||||||
"sync_remote": "Synkroniser eksternt",
|
"sync_remote": "Synkroniser eksternt",
|
||||||
|
"sync_status": "Synkroniseringsstatus",
|
||||||
|
"sync_status_subtitle": "Vis og håndter synkronisering",
|
||||||
"sync_upload_album_setting_subtitle": "Opprett og last opp dine bilder og videoer til det valgte albumet på Immich",
|
"sync_upload_album_setting_subtitle": "Opprett og last opp dine bilder og videoer til det valgte albumet på Immich",
|
||||||
"tag": "Tagg",
|
"tag": "Tagg",
|
||||||
"tag_assets": "Merk ressurser",
|
"tag_assets": "Merk ressurser",
|
||||||
@@ -1976,6 +1978,7 @@
|
|||||||
"trash_page_select_assets_btn": "Velg objekter",
|
"trash_page_select_assets_btn": "Velg objekter",
|
||||||
"trash_page_title": "Søppelbøtte ({count})",
|
"trash_page_title": "Søppelbøtte ({count})",
|
||||||
"trashed_items_will_be_permanently_deleted_after": "Elementer i papirkurven vil bli permanent slettet etter {days, plural, one {# dag} other {# dager}}.",
|
"trashed_items_will_be_permanently_deleted_after": "Elementer i papirkurven vil bli permanent slettet etter {days, plural, one {# dag} other {# dager}}.",
|
||||||
|
"troubleshoot": "Feilsøk",
|
||||||
"type": "Type",
|
"type": "Type",
|
||||||
"unable_to_change_pin_code": "Klarte ikke å endre PIN-kode",
|
"unable_to_change_pin_code": "Klarte ikke å endre PIN-kode",
|
||||||
"unable_to_setup_pin_code": "Klarte ikke å sette opp PINkode",
|
"unable_to_setup_pin_code": "Klarte ikke å sette opp PINkode",
|
||||||
|
|||||||
@@ -708,7 +708,7 @@
|
|||||||
"control_bottom_app_bar_edit_time": "Datum & tijd bewerken",
|
"control_bottom_app_bar_edit_time": "Datum & tijd bewerken",
|
||||||
"control_bottom_app_bar_share_link": "Link delen",
|
"control_bottom_app_bar_share_link": "Link delen",
|
||||||
"control_bottom_app_bar_share_to": "Delen met",
|
"control_bottom_app_bar_share_to": "Delen met",
|
||||||
"control_bottom_app_bar_trash_from_immich": "Verwijderen uit Immich",
|
"control_bottom_app_bar_trash_from_immich": "Verwijderen van Immich",
|
||||||
"copied_image_to_clipboard": "Afbeelding gekopieerd naar klembord.",
|
"copied_image_to_clipboard": "Afbeelding gekopieerd naar klembord.",
|
||||||
"copied_to_clipboard": "Gekopieerd naar klembord!",
|
"copied_to_clipboard": "Gekopieerd naar klembord!",
|
||||||
"copy_error": "Fout bij kopiëren",
|
"copy_error": "Fout bij kopiëren",
|
||||||
@@ -1515,7 +1515,7 @@
|
|||||||
"profile_drawer_client_out_of_date_minor": "Mobiele app is verouderd. Werk bij naar de nieuwste subversie.",
|
"profile_drawer_client_out_of_date_minor": "Mobiele app is verouderd. Werk bij naar de nieuwste subversie.",
|
||||||
"profile_drawer_client_server_up_to_date": "App en server zijn up-to-date",
|
"profile_drawer_client_server_up_to_date": "App en server zijn up-to-date",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
"profile_drawer_readonly_mode": "Alleen-lezen-modus ingeschakeld. Dubbeltik op het avatarpictogram van de gebruiker om te verlaten.",
|
"profile_drawer_readonly_mode": "Alleen-lezen-modus ingeschakeld. Druk lang op je profielfoto om te verlaten.",
|
||||||
"profile_drawer_server_out_of_date_major": "Server is verouderd. Werk bij naar de nieuwste hoofdversie.",
|
"profile_drawer_server_out_of_date_major": "Server is verouderd. Werk bij naar de nieuwste hoofdversie.",
|
||||||
"profile_drawer_server_out_of_date_minor": "Server is verouderd. Werk bij naar de nieuwste subversie.",
|
"profile_drawer_server_out_of_date_minor": "Server is verouderd. Werk bij naar de nieuwste subversie.",
|
||||||
"profile_image_of_user": "Profielfoto van {user}",
|
"profile_image_of_user": "Profielfoto van {user}",
|
||||||
@@ -1640,6 +1640,7 @@
|
|||||||
"restore_user": "Gebruiker herstellen",
|
"restore_user": "Gebruiker herstellen",
|
||||||
"restored_asset": "Item hersteld",
|
"restored_asset": "Item hersteld",
|
||||||
"resume": "Hervatten",
|
"resume": "Hervatten",
|
||||||
|
"resume_paused_jobs": "Hervat {count, plural, one {# gepauseerde taak} other {# gepauseerde taken}}",
|
||||||
"retry_upload": "Opnieuw uploaden",
|
"retry_upload": "Opnieuw uploaden",
|
||||||
"review_duplicates": "Controleer duplicaten",
|
"review_duplicates": "Controleer duplicaten",
|
||||||
"review_large_files": "Grote bestanden beoordelen",
|
"review_large_files": "Grote bestanden beoordelen",
|
||||||
@@ -1916,6 +1917,8 @@
|
|||||||
"sync_albums_manual_subtitle": "Synchroniseer alle geüploade video’s en foto’s naar de geselecteerde back-up albums",
|
"sync_albums_manual_subtitle": "Synchroniseer alle geüploade video’s en foto’s naar de geselecteerde back-up albums",
|
||||||
"sync_local": "Lokaal synchroniseren",
|
"sync_local": "Lokaal synchroniseren",
|
||||||
"sync_remote": "Op afstand synchroniseren",
|
"sync_remote": "Op afstand synchroniseren",
|
||||||
|
"sync_status": "Sync Status",
|
||||||
|
"sync_status_subtitle": "Bekijk en beheer het synchronisatie systeem",
|
||||||
"sync_upload_album_setting_subtitle": "Maak en upload je foto's en video's naar de geselecteerde albums op Immich",
|
"sync_upload_album_setting_subtitle": "Maak en upload je foto's en video's naar de geselecteerde albums op Immich",
|
||||||
"tag": "Tag",
|
"tag": "Tag",
|
||||||
"tag_assets": "Items taggen",
|
"tag_assets": "Items taggen",
|
||||||
@@ -1975,6 +1978,7 @@
|
|||||||
"trash_page_select_assets_btn": "Selecteer items",
|
"trash_page_select_assets_btn": "Selecteer items",
|
||||||
"trash_page_title": "Prullenbak ({count})",
|
"trash_page_title": "Prullenbak ({count})",
|
||||||
"trashed_items_will_be_permanently_deleted_after": "Items in de prullenbak worden na {days, plural, one {# dag} other {# dagen}} permanent verwijderd.",
|
"trashed_items_will_be_permanently_deleted_after": "Items in de prullenbak worden na {days, plural, one {# dag} other {# dagen}} permanent verwijderd.",
|
||||||
|
"troubleshoot": "Problemen oplossen",
|
||||||
"type": "Type",
|
"type": "Type",
|
||||||
"unable_to_change_pin_code": "PIN code kan niet gewijzigd worden",
|
"unable_to_change_pin_code": "PIN code kan niet gewijzigd worden",
|
||||||
"unable_to_setup_pin_code": "PIN code kan niet ingesteld worden",
|
"unable_to_setup_pin_code": "PIN code kan niet ingesteld worden",
|
||||||
|
|||||||
60
i18n/pl.json
60
i18n/pl.json
@@ -443,7 +443,7 @@
|
|||||||
"albums_default_sort_order": "Domyślna kolejność sortowania w albumach",
|
"albums_default_sort_order": "Domyślna kolejność sortowania w albumach",
|
||||||
"albums_default_sort_order_description": "Początkowa kolejność sortowania zasobów przy tworzeniu nowych albumów.",
|
"albums_default_sort_order_description": "Początkowa kolejność sortowania zasobów przy tworzeniu nowych albumów.",
|
||||||
"albums_feature_description": "Kolekcje zasobów, które można udostępniać innym użytkownikom.",
|
"albums_feature_description": "Kolekcje zasobów, które można udostępniać innym użytkownikom.",
|
||||||
"albums_on_device_count": "Albumów na urzadzeniu ({count})",
|
"albums_on_device_count": "Albumy na urządzeniu ({count})",
|
||||||
"all": "Wszystkie",
|
"all": "Wszystkie",
|
||||||
"all_albums": "Wszystkie albumy",
|
"all_albums": "Wszystkie albumy",
|
||||||
"all_people": "Wszystkie osoby",
|
"all_people": "Wszystkie osoby",
|
||||||
@@ -504,7 +504,7 @@
|
|||||||
"assets_added_count": "Dodano {count, plural, one {# zasób} few {# zasoby} other {# zasobów}}",
|
"assets_added_count": "Dodano {count, plural, one {# zasób} few {# zasoby} other {# zasobów}}",
|
||||||
"assets_added_to_album_count": "Dodano {count, plural, one {# zasób} few {# zasoby} other {# zasobów}} do albumu",
|
"assets_added_to_album_count": "Dodano {count, plural, one {# zasób} few {# zasoby} other {# zasobów}} do albumu",
|
||||||
"assets_added_to_albums_count": "Dodano {assetTotal, plural, one {# zasób} few {# zasoby} other {# zasobów}} do {albumTotal, plural, one {# albumu} other {# albumów}}",
|
"assets_added_to_albums_count": "Dodano {assetTotal, plural, one {# zasób} few {# zasoby} other {# zasobów}} do {albumTotal, plural, one {# albumu} other {# albumów}}",
|
||||||
"assets_cannot_be_added_to_album_count": "{count, plural, one {sztuka Elementu} other {szt. Elementów}} nie może być dodana do albumu",
|
"assets_cannot_be_added_to_album_count": "{count, plural, one {Zasób nie może zostać dodany} other {Zasoby nie mogą zostać dodane}} do albumu",
|
||||||
"assets_cannot_be_added_to_albums": "{count, plural, one {Zasób nie może być dodany} other {Zasoby nie mogą być dodane}} do żadnego z albumów",
|
"assets_cannot_be_added_to_albums": "{count, plural, one {Zasób nie może być dodany} other {Zasoby nie mogą być dodane}} do żadnego z albumów",
|
||||||
"assets_count": "{count, plural, one {# zasób} few {# zasoby} other {# zasobów}}",
|
"assets_count": "{count, plural, one {# zasób} few {# zasoby} other {# zasobów}}",
|
||||||
"assets_deleted_permanently": "{count} zostało trwale usuniętych",
|
"assets_deleted_permanently": "{count} zostało trwale usuniętych",
|
||||||
@@ -521,7 +521,7 @@
|
|||||||
"assets_trashed": "{count} szt. zostało wrzucone do kosza",
|
"assets_trashed": "{count} szt. zostało wrzucone do kosza",
|
||||||
"assets_trashed_count": "Wrzucono do kosza {count, plural, one {# zasób} few {# zasoby} other {# zasobów}}",
|
"assets_trashed_count": "Wrzucono do kosza {count, plural, one {# zasób} few {# zasoby} other {# zasobów}}",
|
||||||
"assets_trashed_from_server": "{count} szt. usuniętych z serwera Immich",
|
"assets_trashed_from_server": "{count} szt. usuniętych z serwera Immich",
|
||||||
"assets_were_part_of_album_count": "{count, plural, one {Zasób był} few {Zasoby były} many {Zasobów było} other {Zasobów było}} już częścią albumu",
|
"assets_were_part_of_album_count": "{count, plural, one {Zasób był} other {Zasoby były}} już częścią albumu",
|
||||||
"assets_were_part_of_albums_count": "{count, plural, one {Zasób był} other {Zasoby były}} już częścią albumów",
|
"assets_were_part_of_albums_count": "{count, plural, one {Zasób był} other {Zasoby były}} już częścią albumów",
|
||||||
"authorized_devices": "Autoryzowane urządzenia",
|
"authorized_devices": "Autoryzowane urządzenia",
|
||||||
"automatic_endpoint_switching_subtitle": "Połącz się lokalnie przez wyznaczoną sieć Wi-Fi, jeśli jest dostępna, i korzystaj z alternatywnych połączeń gdzie indziej",
|
"automatic_endpoint_switching_subtitle": "Połącz się lokalnie przez wyznaczoną sieć Wi-Fi, jeśli jest dostępna, i korzystaj z alternatywnych połączeń gdzie indziej",
|
||||||
@@ -535,7 +535,7 @@
|
|||||||
"backup_album_selection_page_albums_device": "Albumy na urządzeniu ({count})",
|
"backup_album_selection_page_albums_device": "Albumy na urządzeniu ({count})",
|
||||||
"backup_album_selection_page_albums_tap": "Stuknij, aby włączyć, stuknij dwukrotnie, aby wykluczyć",
|
"backup_album_selection_page_albums_tap": "Stuknij, aby włączyć, stuknij dwukrotnie, aby wykluczyć",
|
||||||
"backup_album_selection_page_assets_scatter": "Pliki mogą być rozproszone w wielu albumach. Dzięki temu albumy mogą być włączane lub wyłączane podczas procesu tworzenia kopii zapasowej.",
|
"backup_album_selection_page_assets_scatter": "Pliki mogą być rozproszone w wielu albumach. Dzięki temu albumy mogą być włączane lub wyłączane podczas procesu tworzenia kopii zapasowej.",
|
||||||
"backup_album_selection_page_select_albums": "Zaznacz albumy",
|
"backup_album_selection_page_select_albums": "Wybierz albumy",
|
||||||
"backup_album_selection_page_selection_info": "Info o wyborze",
|
"backup_album_selection_page_selection_info": "Info o wyborze",
|
||||||
"backup_album_selection_page_total_assets": "Łącznie unikalnych plików",
|
"backup_album_selection_page_total_assets": "Łącznie unikalnych plików",
|
||||||
"backup_all": "Wszystkie",
|
"backup_all": "Wszystkie",
|
||||||
@@ -564,7 +564,7 @@
|
|||||||
"backup_controller_page_background_turn_on": "Włącz usługę w tle",
|
"backup_controller_page_background_turn_on": "Włącz usługę w tle",
|
||||||
"backup_controller_page_background_wifi": "Tylko Wi-Fi",
|
"backup_controller_page_background_wifi": "Tylko Wi-Fi",
|
||||||
"backup_controller_page_backup": "Kopia zapasowa",
|
"backup_controller_page_backup": "Kopia zapasowa",
|
||||||
"backup_controller_page_backup_selected": "Zaznaczone: ",
|
"backup_controller_page_backup_selected": "Wybrane: ",
|
||||||
"backup_controller_page_backup_sub": "Zdjęcia i filmy z utworzoną kopią zapasową",
|
"backup_controller_page_backup_sub": "Zdjęcia i filmy z utworzoną kopią zapasową",
|
||||||
"backup_controller_page_created": "Utworzono dnia: {date}",
|
"backup_controller_page_created": "Utworzono dnia: {date}",
|
||||||
"backup_controller_page_desc_backup": "Włącz kopię zapasową na pierwszym planie, aby automatycznie przesyłać nowe zasoby na serwer po otworzeniu aplikacji.",
|
"backup_controller_page_desc_backup": "Włącz kopię zapasową na pierwszym planie, aby automatycznie przesyłać nowe zasoby na serwer po otworzeniu aplikacji.",
|
||||||
@@ -573,7 +573,7 @@
|
|||||||
"backup_controller_page_filename": "Nazwa pliku: {filename} [{size}]",
|
"backup_controller_page_filename": "Nazwa pliku: {filename} [{size}]",
|
||||||
"backup_controller_page_id": "ID: {id}",
|
"backup_controller_page_id": "ID: {id}",
|
||||||
"backup_controller_page_info": "Informacje o kopii zapasowej",
|
"backup_controller_page_info": "Informacje o kopii zapasowej",
|
||||||
"backup_controller_page_none_selected": "Brak wybranych",
|
"backup_controller_page_none_selected": "Nic nie wybrano",
|
||||||
"backup_controller_page_remainder": "Pozostałe",
|
"backup_controller_page_remainder": "Pozostałe",
|
||||||
"backup_controller_page_remainder_sub": "Pozostałe zdjęcia i filmy wybrane do wykonania kopii zapasowej",
|
"backup_controller_page_remainder_sub": "Pozostałe zdjęcia i filmy wybrane do wykonania kopii zapasowej",
|
||||||
"backup_controller_page_server_storage": "Pamięć Serwera",
|
"backup_controller_page_server_storage": "Pamięć Serwera",
|
||||||
@@ -638,7 +638,7 @@
|
|||||||
"cast": "Odtwórz na telewizorze",
|
"cast": "Odtwórz na telewizorze",
|
||||||
"cast_description": "Skonfiguruj dostępne cele do przesyłania",
|
"cast_description": "Skonfiguruj dostępne cele do przesyłania",
|
||||||
"change_date": "Zmień datę",
|
"change_date": "Zmień datę",
|
||||||
"change_description": "Zmiana opisu",
|
"change_description": "Zmień opis",
|
||||||
"change_display_order": "Zmień kolejność wyświetlania",
|
"change_display_order": "Zmień kolejność wyświetlania",
|
||||||
"change_expiration_time": "Zmień czas ważności",
|
"change_expiration_time": "Zmień czas ważności",
|
||||||
"change_location": "Zmień lokalizację",
|
"change_location": "Zmień lokalizację",
|
||||||
@@ -691,7 +691,7 @@
|
|||||||
"confirm_admin_password": "Potwierdź Hasło Administratora",
|
"confirm_admin_password": "Potwierdź Hasło Administratora",
|
||||||
"confirm_delete_face": "Czy na pewno chcesz usunąć twarz {name} z zasobów?",
|
"confirm_delete_face": "Czy na pewno chcesz usunąć twarz {name} z zasobów?",
|
||||||
"confirm_delete_shared_link": "Czy na pewno chcesz usunąć ten udostępniony link?",
|
"confirm_delete_shared_link": "Czy na pewno chcesz usunąć ten udostępniony link?",
|
||||||
"confirm_keep_this_delete_others": "Wszystkie inne zasoby zostaną usunięte poza tym zasobem. Czy jesteś pewien, że chcesz kontynuować?",
|
"confirm_keep_this_delete_others": "Wszystkie inne zasoby w tym stosie, z wyjątkiem tego zasobu, zostaną usunięte. Czy jesteś pewien, że chcesz kontynuować?",
|
||||||
"confirm_new_pin_code": "Potwierdź nowy kod PIN",
|
"confirm_new_pin_code": "Potwierdź nowy kod PIN",
|
||||||
"confirm_password": "Potwierdź hasło",
|
"confirm_password": "Potwierdź hasło",
|
||||||
"confirm_tag_face": "Chcesz dodać do tej twarzy etykietę {name}?",
|
"confirm_tag_face": "Chcesz dodać do tej twarzy etykietę {name}?",
|
||||||
@@ -708,7 +708,7 @@
|
|||||||
"control_bottom_app_bar_edit_time": "Edytuj datę i godzinę",
|
"control_bottom_app_bar_edit_time": "Edytuj datę i godzinę",
|
||||||
"control_bottom_app_bar_share_link": "Udostępnij link",
|
"control_bottom_app_bar_share_link": "Udostępnij link",
|
||||||
"control_bottom_app_bar_share_to": "Wyślij",
|
"control_bottom_app_bar_share_to": "Wyślij",
|
||||||
"control_bottom_app_bar_trash_from_immich": "Przenieść do kosza",
|
"control_bottom_app_bar_trash_from_immich": "Przenieś do kosza",
|
||||||
"copied_image_to_clipboard": "Skopiowano obraz do schowka.",
|
"copied_image_to_clipboard": "Skopiowano obraz do schowka.",
|
||||||
"copied_to_clipboard": "Skopiowano do schowka!",
|
"copied_to_clipboard": "Skopiowano do schowka!",
|
||||||
"copy_error": "Błąd kopiowania",
|
"copy_error": "Błąd kopiowania",
|
||||||
@@ -786,7 +786,7 @@
|
|||||||
"delete_local_action_prompt": "{count} lokalnie usunięto",
|
"delete_local_action_prompt": "{count} lokalnie usunięto",
|
||||||
"delete_local_dialog_ok_backed_up_only": "Usuń tylko kopię zapasową",
|
"delete_local_dialog_ok_backed_up_only": "Usuń tylko kopię zapasową",
|
||||||
"delete_local_dialog_ok_force": "Usuń mimo to",
|
"delete_local_dialog_ok_force": "Usuń mimo to",
|
||||||
"delete_others": "Usuń inne",
|
"delete_others": "Usuń pozostałe",
|
||||||
"delete_permanently": "Usuń trwale",
|
"delete_permanently": "Usuń trwale",
|
||||||
"delete_permanently_action_prompt": "{count} trwale usuniętych",
|
"delete_permanently_action_prompt": "{count} trwale usuniętych",
|
||||||
"delete_shared_link": "Usuń udostępniony link",
|
"delete_shared_link": "Usuń udostępniony link",
|
||||||
@@ -898,7 +898,7 @@
|
|||||||
"cannot_navigate_previous_asset": "Nie można przejść do poprzedniego zasobu",
|
"cannot_navigate_previous_asset": "Nie można przejść do poprzedniego zasobu",
|
||||||
"cant_apply_changes": "Nie można zastosować zmian",
|
"cant_apply_changes": "Nie można zastosować zmian",
|
||||||
"cant_change_activity": "Nie można {enabled, select, true {wyłączyć} other {włączyć}} aktywności",
|
"cant_change_activity": "Nie można {enabled, select, true {wyłączyć} other {włączyć}} aktywności",
|
||||||
"cant_change_asset_favorite": "Nie można zmienić ulubionego dla zasobu",
|
"cant_change_asset_favorite": "Nie można zmienić statusu ulubionego dla zasobu",
|
||||||
"cant_change_metadata_assets_count": "Nie można zmienić metadanych {count, plural, one {# zasobu} other {# zasobów}}",
|
"cant_change_metadata_assets_count": "Nie można zmienić metadanych {count, plural, one {# zasobu} other {# zasobów}}",
|
||||||
"cant_get_faces": "Nie można pozyskać twarzy",
|
"cant_get_faces": "Nie można pozyskać twarzy",
|
||||||
"cant_get_number_of_comments": "Nie można uzyskać liczby komentarzy",
|
"cant_get_number_of_comments": "Nie można uzyskać liczby komentarzy",
|
||||||
@@ -923,7 +923,7 @@
|
|||||||
"failed_to_load_people": "Nie udało się pobrać ludzi",
|
"failed_to_load_people": "Nie udało się pobrać ludzi",
|
||||||
"failed_to_remove_product_key": "Nie udało się usunąć klucza produktu",
|
"failed_to_remove_product_key": "Nie udało się usunąć klucza produktu",
|
||||||
"failed_to_reset_pin_code": "Nie udało się zresetować kodu PIN",
|
"failed_to_reset_pin_code": "Nie udało się zresetować kodu PIN",
|
||||||
"failed_to_stack_assets": "Nie udało się zestawić zasobów",
|
"failed_to_stack_assets": "Nie udało się utworzyć stosu z zasobów",
|
||||||
"failed_to_unstack_assets": "Nie udało się rozdzielić zasobów",
|
"failed_to_unstack_assets": "Nie udało się rozdzielić zasobów",
|
||||||
"failed_to_update_notification_status": "Nie udało się zaktualizować stanu powiadomienia",
|
"failed_to_update_notification_status": "Nie udało się zaktualizować stanu powiadomienia",
|
||||||
"import_path_already_exists": "Ta ścieżka importu już istnieje.",
|
"import_path_already_exists": "Ta ścieżka importu już istnieje.",
|
||||||
@@ -1151,7 +1151,7 @@
|
|||||||
"immich_web_interface": "Interfejs internetowy Immich",
|
"immich_web_interface": "Interfejs internetowy Immich",
|
||||||
"import_from_json": "Wczytaj z JSON",
|
"import_from_json": "Wczytaj z JSON",
|
||||||
"import_path": "Ścieżka importu",
|
"import_path": "Ścieżka importu",
|
||||||
"in_albums": "W {count, plural, one {# album} other {# albumy}}",
|
"in_albums": "W {count, plural, one {# albumie} other {# albumach}}",
|
||||||
"in_archive": "W archiwum",
|
"in_archive": "W archiwum",
|
||||||
"include_archived": "Uwzględnij zarchiwizowane",
|
"include_archived": "Uwzględnij zarchiwizowane",
|
||||||
"include_shared_albums": "Uwzględnij udostępnione albumy",
|
"include_shared_albums": "Uwzględnij udostępnione albumy",
|
||||||
@@ -1175,11 +1175,11 @@
|
|||||||
"ios_debug_info_no_sync_yet": "Nie uruchomiono jeszcze żadnego zadania synchronizacji w tle",
|
"ios_debug_info_no_sync_yet": "Nie uruchomiono jeszcze żadnego zadania synchronizacji w tle",
|
||||||
"ios_debug_info_processes_queued": "{count, plural, one {{count} proces w tle w kolejce} few {{count} procesy w tle w kolejce} other {{count} procesów w tle w kolejce}}",
|
"ios_debug_info_processes_queued": "{count, plural, one {{count} proces w tle w kolejce} few {{count} procesy w tle w kolejce} other {{count} procesów w tle w kolejce}}",
|
||||||
"ios_debug_info_processing_ran_at": "Przetwarzanie przebiegło {dateTime}",
|
"ios_debug_info_processing_ran_at": "Przetwarzanie przebiegło {dateTime}",
|
||||||
"items_count": "{count, plural, one {# element} other {# elementy}}",
|
"items_count": "{count, plural, one {# element} few {# elementy} other {# elementów}}",
|
||||||
"jobs": "Zadania",
|
"jobs": "Zadania",
|
||||||
"keep": "Zachowaj",
|
"keep": "Zachowaj",
|
||||||
"keep_all": "Zachowaj wszystko",
|
"keep_all": "Zachowaj wszystko",
|
||||||
"keep_this_delete_others": "Zachowaj to, usuń inne",
|
"keep_this_delete_others": "Zachowaj to, usuń pozostałe",
|
||||||
"kept_this_deleted_others": "Zachowano ten zasób i usunięto {count, plural, one {#zasób} other {#zasoby}}",
|
"kept_this_deleted_others": "Zachowano ten zasób i usunięto {count, plural, one {#zasób} other {#zasoby}}",
|
||||||
"keyboard_shortcuts": "Skróty klawiaturowe",
|
"keyboard_shortcuts": "Skróty klawiaturowe",
|
||||||
"language": "Język",
|
"language": "Język",
|
||||||
@@ -1459,7 +1459,7 @@
|
|||||||
"permanent_deletion_warning_setting_description": "Pokaż ostrzeżenie przy trwałym usuwaniu zasobów",
|
"permanent_deletion_warning_setting_description": "Pokaż ostrzeżenie przy trwałym usuwaniu zasobów",
|
||||||
"permanently_delete": "Usuń trwale",
|
"permanently_delete": "Usuń trwale",
|
||||||
"permanently_delete_assets_count": "Trwale usuń {count, plural, one {zasób} few {zasoby} many {zasobów} other {zasobów}}",
|
"permanently_delete_assets_count": "Trwale usuń {count, plural, one {zasób} few {zasoby} many {zasobów} other {zasobów}}",
|
||||||
"permanently_delete_assets_prompt": "Czy na pewno chcesz trwale usunąć {count, plural, one {ten zasób?} other {te <b>#</b> zasoby?}} Spowoduje to również usunięcie {count, plural, one {go z jego} other {ich z ich}} album(ów).",
|
"permanently_delete_assets_prompt": "Czy na pewno chcesz trwale usunąć {count, plural, one {ten zasób?} few {te <b>#</b> zasoby?} other {te <b>#</b> zasobów?}} Spowoduje to również usunięcie {count, plural, one {go z jego} other {ich z ich}} album(ów).",
|
||||||
"permanently_deleted_asset": "Pomyślnie trwale usunięto zasób",
|
"permanently_deleted_asset": "Pomyślnie trwale usunięto zasób",
|
||||||
"permanently_deleted_assets_count": "Trwale usunięto {count, plural, one {# zasób} other {# zasobów}}",
|
"permanently_deleted_assets_count": "Trwale usunięto {count, plural, one {# zasób} other {# zasobów}}",
|
||||||
"permission": "Pozwolenie",
|
"permission": "Pozwolenie",
|
||||||
@@ -1589,7 +1589,7 @@
|
|||||||
"remote": "Zdalny",
|
"remote": "Zdalny",
|
||||||
"remote_assets": "Zasoby zdalne",
|
"remote_assets": "Zasoby zdalne",
|
||||||
"remove": "Usuń",
|
"remove": "Usuń",
|
||||||
"remove_assets_album_confirmation": "Czy na pewno chcesz usunąć {count, plural, one {# zasób} other {# zasoby}} z albumu?",
|
"remove_assets_album_confirmation": "Czy na pewno chcesz usunąć {count, plural, one {# zasób} few {# zasoby} other {# zasobów}} z albumu?",
|
||||||
"remove_assets_shared_link_confirmation": "Czy na pewno chcesz usunąć {count, plural, one {# zasób} other {# zasoby}} z tego udostępnionego linku?",
|
"remove_assets_shared_link_confirmation": "Czy na pewno chcesz usunąć {count, plural, one {# zasób} other {# zasoby}} z tego udostępnionego linku?",
|
||||||
"remove_assets_title": "Usunąć zasoby?",
|
"remove_assets_title": "Usunąć zasoby?",
|
||||||
"remove_custom_date_range": "Usuń niestandardowy zakres dat",
|
"remove_custom_date_range": "Usuń niestandardowy zakres dat",
|
||||||
@@ -1712,7 +1712,7 @@
|
|||||||
"search_tags": "Wyszukaj etykiety...",
|
"search_tags": "Wyszukaj etykiety...",
|
||||||
"search_timezone": "Wyszukaj strefę czasową...",
|
"search_timezone": "Wyszukaj strefę czasową...",
|
||||||
"search_type": "Wyszukaj w",
|
"search_type": "Wyszukaj w",
|
||||||
"search_your_photos": "Szukaj swoich zdjęć",
|
"search_your_photos": "Przeszukaj swoje zdjęcia",
|
||||||
"searching_locales": "Wyszukaj region...",
|
"searching_locales": "Wyszukaj region...",
|
||||||
"second": "Sekunda",
|
"second": "Sekunda",
|
||||||
"see_all_people": "Zobacz wszystkie osoby",
|
"see_all_people": "Zobacz wszystkie osoby",
|
||||||
@@ -1732,7 +1732,7 @@
|
|||||||
"select_photos": "Wybierz zdjęcia",
|
"select_photos": "Wybierz zdjęcia",
|
||||||
"select_trash_all": "Zaznacz wszystko do kosza",
|
"select_trash_all": "Zaznacz wszystko do kosza",
|
||||||
"select_user_for_sharing_page_err_album": "Nie udało się utworzyć albumu",
|
"select_user_for_sharing_page_err_album": "Nie udało się utworzyć albumu",
|
||||||
"selected": "Zaznaczone",
|
"selected": "Wybrane",
|
||||||
"selected_count": "{count, plural, other {# wybrane}}",
|
"selected_count": "{count, plural, other {# wybrane}}",
|
||||||
"selected_gps_coordinates": "Wybrane Współrzędne GPS",
|
"selected_gps_coordinates": "Wybrane Współrzędne GPS",
|
||||||
"send_message": "Wyślij wiadomość",
|
"send_message": "Wyślij wiadomość",
|
||||||
@@ -1887,9 +1887,9 @@
|
|||||||
"stack": "Stos",
|
"stack": "Stos",
|
||||||
"stack_action_prompt": "{count} zgrupowano",
|
"stack_action_prompt": "{count} zgrupowano",
|
||||||
"stack_duplicates": "Stos duplikatów",
|
"stack_duplicates": "Stos duplikatów",
|
||||||
"stack_select_one_photo": "Wybierz jedno główne zdjęcie do stosu",
|
"stack_select_one_photo": "Wybierz jedno główne zdjęcie dla stosu",
|
||||||
"stack_selected_photos": "Układaj wybrane zdjęcia",
|
"stack_selected_photos": "Utwórz stos z wybranych zdjęć",
|
||||||
"stacked_assets_count": "Ułożone {count, plural, one {# zasób} other{# zasoby}}",
|
"stacked_assets_count": "Utworzono stos z {count, plural, one {# zasobu} other {# zasobów}}",
|
||||||
"stacktrace": "Ślad stosu",
|
"stacktrace": "Ślad stosu",
|
||||||
"start": "Start",
|
"start": "Start",
|
||||||
"start_date": "Od dnia",
|
"start_date": "Od dnia",
|
||||||
@@ -1952,7 +1952,7 @@
|
|||||||
"time_based_memories": "Wspomnienia oparte na czasie",
|
"time_based_memories": "Wspomnienia oparte na czasie",
|
||||||
"timeline": "Oś czasu",
|
"timeline": "Oś czasu",
|
||||||
"timezone": "Strefa czasowa",
|
"timezone": "Strefa czasowa",
|
||||||
"to_archive": "Archiwum",
|
"to_archive": "Zarchiwizuj",
|
||||||
"to_change_password": "Zmień hasło",
|
"to_change_password": "Zmień hasło",
|
||||||
"to_favorite": "Dodaj do ulubionych",
|
"to_favorite": "Dodaj do ulubionych",
|
||||||
"to_login": "Zaloguj się",
|
"to_login": "Zaloguj się",
|
||||||
@@ -1966,7 +1966,7 @@
|
|||||||
"trash": "Kosz",
|
"trash": "Kosz",
|
||||||
"trash_action_prompt": "{count} przeniesione do kosza",
|
"trash_action_prompt": "{count} przeniesione do kosza",
|
||||||
"trash_all": "Usuń wszystkie",
|
"trash_all": "Usuń wszystkie",
|
||||||
"trash_count": "Kosz {count, number}",
|
"trash_count": "Usuń {count, number}",
|
||||||
"trash_delete_asset": "Kosz/Usuń zasób",
|
"trash_delete_asset": "Kosz/Usuń zasób",
|
||||||
"trash_emptied": "Opróżnione śmieci",
|
"trash_emptied": "Opróżnione śmieci",
|
||||||
"trash_no_results_message": "Tu znajdziesz wyrzucone zdjęcia i filmy.",
|
"trash_no_results_message": "Tu znajdziesz wyrzucone zdjęcia i filmy.",
|
||||||
@@ -1982,7 +1982,7 @@
|
|||||||
"type": "Typ",
|
"type": "Typ",
|
||||||
"unable_to_change_pin_code": "Nie można zmienić kodu PIN",
|
"unable_to_change_pin_code": "Nie można zmienić kodu PIN",
|
||||||
"unable_to_setup_pin_code": "Nie można ustawić kodu PIN",
|
"unable_to_setup_pin_code": "Nie można ustawić kodu PIN",
|
||||||
"unarchive": "Cofnij archiwizację",
|
"unarchive": "Przywróć z archiwum",
|
||||||
"unarchive_action_prompt": "{count} usunięto z archiwum",
|
"unarchive_action_prompt": "{count} usunięto z archiwum",
|
||||||
"unarchived_count": "{count, plural, one {# cofnięta archiwizacja} few {# cofnięte archiwizacje} other {# cofniętych archiwizacji}}",
|
"unarchived_count": "{count, plural, one {# cofnięta archiwizacja} few {# cofnięte archiwizacje} other {# cofniętych archiwizacji}}",
|
||||||
"undo": "Cofnij",
|
"undo": "Cofnij",
|
||||||
@@ -2004,9 +2004,9 @@
|
|||||||
"unselect_all": "Odznacz wszystko",
|
"unselect_all": "Odznacz wszystko",
|
||||||
"unselect_all_duplicates": "Odznacz wszystkie duplikaty",
|
"unselect_all_duplicates": "Odznacz wszystkie duplikaty",
|
||||||
"unselect_all_in": "Odznacz wszystkie w {group}",
|
"unselect_all_in": "Odznacz wszystkie w {group}",
|
||||||
"unstack": "Rozłóż stos",
|
"unstack": "Rozdziel stos",
|
||||||
"unstack_action_prompt": "{count} odgrupowano",
|
"unstack_action_prompt": "{count} rozdzielono",
|
||||||
"unstacked_assets_count": "{count, plural, one {Rozłożony # zasób} few {Rozłożone # zasoby} other {Rozłożonych # zasobów}}",
|
"unstacked_assets_count": "Rozdzielono {count, plural, one {# zasób} few {# zasoby} other {# zasobów}}",
|
||||||
"untagged": "Nieoznaczone",
|
"untagged": "Nieoznaczone",
|
||||||
"up_next": "Do następnego",
|
"up_next": "Do następnego",
|
||||||
"update_location_action_prompt": "Zaktualizuj lokalizację {count} wybranych zasobów na:",
|
"update_location_action_prompt": "Zaktualizuj lokalizację {count} wybranych zasobów na:",
|
||||||
@@ -2077,11 +2077,11 @@
|
|||||||
"view_previous_asset": "Wyświetl poprzedni zasób",
|
"view_previous_asset": "Wyświetl poprzedni zasób",
|
||||||
"view_qr_code": "Pokaż kod QR",
|
"view_qr_code": "Pokaż kod QR",
|
||||||
"view_similar_photos": "Zobacz podobne zdjęcia",
|
"view_similar_photos": "Zobacz podobne zdjęcia",
|
||||||
"view_stack": "Zobacz Ułożenie",
|
"view_stack": "Zobacz stos",
|
||||||
"view_user": "Wyświetl użytkownika",
|
"view_user": "Wyświetl użytkownika",
|
||||||
"viewer_remove_from_stack": "Usuń ze stosu",
|
"viewer_remove_from_stack": "Usuń ze stosu",
|
||||||
"viewer_stack_use_as_main_asset": "Użyj jako głównego zasobu",
|
"viewer_stack_use_as_main_asset": "Użyj jako głównego zasobu",
|
||||||
"viewer_unstack": "Rozłóż Stos",
|
"viewer_unstack": "Rozdziel stos",
|
||||||
"visibility_changed": "Zmieniono widoczność dla {count, plural, one {# osoby} other {# osób}}",
|
"visibility_changed": "Zmieniono widoczność dla {count, plural, one {# osoby} other {# osób}}",
|
||||||
"waiting": "Oczekujące",
|
"waiting": "Oczekujące",
|
||||||
"warning": "Ostrzeżenie",
|
"warning": "Ostrzeżenie",
|
||||||
|
|||||||
12
i18n/pt.json
12
i18n/pt.json
@@ -1412,6 +1412,8 @@
|
|||||||
"open_the_search_filters": "Abrir os filtros de pesquisa",
|
"open_the_search_filters": "Abrir os filtros de pesquisa",
|
||||||
"options": "Opções",
|
"options": "Opções",
|
||||||
"or": "ou",
|
"or": "ou",
|
||||||
|
"organize_into_albums": "Organizar em álbuns",
|
||||||
|
"organize_into_albums_description": "Colocar fotos existentes em álbuns utilizando as definições atuais de sincronização",
|
||||||
"organize_your_library": "Organizar a sua biblioteca",
|
"organize_your_library": "Organizar a sua biblioteca",
|
||||||
"original": "original",
|
"original": "original",
|
||||||
"other": "Outro",
|
"other": "Outro",
|
||||||
@@ -1513,7 +1515,7 @@
|
|||||||
"profile_drawer_client_out_of_date_minor": "O aplicativo está desatualizado. Por favor, atualize para a versão mais recente.",
|
"profile_drawer_client_out_of_date_minor": "O aplicativo está desatualizado. Por favor, atualize para a versão mais recente.",
|
||||||
"profile_drawer_client_server_up_to_date": "Cliente e Servidor atualizados",
|
"profile_drawer_client_server_up_to_date": "Cliente e Servidor atualizados",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
"profile_drawer_readonly_mode": "Modo somente leitura activado. Toque duas vezes no ícone do avatar do utilizador para sair.",
|
"profile_drawer_readonly_mode": "Modo somente leitura ativado. Toque duas vezes no ícone do avatar do utilizador para sair.",
|
||||||
"profile_drawer_server_out_of_date_major": "O servidor está desatualizado. Atualize para a versão principal mais recente.",
|
"profile_drawer_server_out_of_date_major": "O servidor está desatualizado. Atualize para a versão principal mais recente.",
|
||||||
"profile_drawer_server_out_of_date_minor": "O servidor está desatualizado. Atualize para a versão mais recente.",
|
"profile_drawer_server_out_of_date_minor": "O servidor está desatualizado. Atualize para a versão mais recente.",
|
||||||
"profile_image_of_user": "Imagem de perfil de {user}",
|
"profile_image_of_user": "Imagem de perfil de {user}",
|
||||||
@@ -1552,6 +1554,7 @@
|
|||||||
"purchase_server_description_2": "Status de apoiante",
|
"purchase_server_description_2": "Status de apoiante",
|
||||||
"purchase_server_title": "Servidor",
|
"purchase_server_title": "Servidor",
|
||||||
"purchase_settings_server_activated": "A chave de produto do servidor é gerida pelo administrador",
|
"purchase_settings_server_activated": "A chave de produto do servidor é gerida pelo administrador",
|
||||||
|
"query_asset_id": "Consultar ID do recurso",
|
||||||
"queue_status": "Em fila {count}/{total}",
|
"queue_status": "Em fila {count}/{total}",
|
||||||
"rating": "Classificação por estrelas",
|
"rating": "Classificação por estrelas",
|
||||||
"rating_clear": "Limpar classificação",
|
"rating_clear": "Limpar classificação",
|
||||||
@@ -1637,6 +1640,7 @@
|
|||||||
"restore_user": "Restaurar utilizador",
|
"restore_user": "Restaurar utilizador",
|
||||||
"restored_asset": "Ficheiro restaurado",
|
"restored_asset": "Ficheiro restaurado",
|
||||||
"resume": "Continuar",
|
"resume": "Continuar",
|
||||||
|
"resume_paused_jobs": "Continuar {count, plural, one {# trabalho em pausa} other {# trabalhos pausados}}",
|
||||||
"retry_upload": "Tentar carregar novamente",
|
"retry_upload": "Tentar carregar novamente",
|
||||||
"review_duplicates": "Rever itens duplicados",
|
"review_duplicates": "Rever itens duplicados",
|
||||||
"review_large_files": "Rever arquivos grandes",
|
"review_large_files": "Rever arquivos grandes",
|
||||||
@@ -1730,7 +1734,7 @@
|
|||||||
"select_user_for_sharing_page_err_album": "Ocorreu um erro ao criar o álbum",
|
"select_user_for_sharing_page_err_album": "Ocorreu um erro ao criar o álbum",
|
||||||
"selected": "Selecionados",
|
"selected": "Selecionados",
|
||||||
"selected_count": "{count, plural, other {# selecionados}}",
|
"selected_count": "{count, plural, other {# selecionados}}",
|
||||||
"selected_gps_coordinates": "coordenadas gps seleccionadas",
|
"selected_gps_coordinates": "Coordenadas GPS selecionadas",
|
||||||
"send_message": "Enviar mensagem",
|
"send_message": "Enviar mensagem",
|
||||||
"send_welcome_email": "Enviar E-mail de boas vindas",
|
"send_welcome_email": "Enviar E-mail de boas vindas",
|
||||||
"server_endpoint": "URL do servidor",
|
"server_endpoint": "URL do servidor",
|
||||||
@@ -1913,6 +1917,8 @@
|
|||||||
"sync_albums_manual_subtitle": "Sincronizar todas as fotos e vídeos enviados para o álbum de backup selecionado",
|
"sync_albums_manual_subtitle": "Sincronizar todas as fotos e vídeos enviados para o álbum de backup selecionado",
|
||||||
"sync_local": "Sincronização Local",
|
"sync_local": "Sincronização Local",
|
||||||
"sync_remote": "Sincronização Remota",
|
"sync_remote": "Sincronização Remota",
|
||||||
|
"sync_status": "Status da sincronização",
|
||||||
|
"sync_status_subtitle": "Ver e gerir o sistema de sincronização",
|
||||||
"sync_upload_album_setting_subtitle": "Crie e envie suas fotos e vídeos para o álbum selecionado no Immich",
|
"sync_upload_album_setting_subtitle": "Crie e envie suas fotos e vídeos para o álbum selecionado no Immich",
|
||||||
"tag": "Etiqueta",
|
"tag": "Etiqueta",
|
||||||
"tag_assets": "Etiquetar ficheiros",
|
"tag_assets": "Etiquetar ficheiros",
|
||||||
@@ -1972,6 +1978,7 @@
|
|||||||
"trash_page_select_assets_btn": "Selecionar arquivos",
|
"trash_page_select_assets_btn": "Selecionar arquivos",
|
||||||
"trash_page_title": "Reciclagem ({count})",
|
"trash_page_title": "Reciclagem ({count})",
|
||||||
"trashed_items_will_be_permanently_deleted_after": "Os itens da reciclagem são eliminados permanentemente após {days, plural, one {# dia} other {# dias}}.",
|
"trashed_items_will_be_permanently_deleted_after": "Os itens da reciclagem são eliminados permanentemente após {days, plural, one {# dia} other {# dias}}.",
|
||||||
|
"troubleshoot": "Diagnosticar problemas",
|
||||||
"type": "Tipo",
|
"type": "Tipo",
|
||||||
"unable_to_change_pin_code": "Não foi possível alterar o código PIN",
|
"unable_to_change_pin_code": "Não foi possível alterar o código PIN",
|
||||||
"unable_to_setup_pin_code": "Não foi possível configurar o código PIN",
|
"unable_to_setup_pin_code": "Não foi possível configurar o código PIN",
|
||||||
@@ -2069,6 +2076,7 @@
|
|||||||
"view_next_asset": "Ver próximo ficheiro",
|
"view_next_asset": "Ver próximo ficheiro",
|
||||||
"view_previous_asset": "Ver ficheiro anterior",
|
"view_previous_asset": "Ver ficheiro anterior",
|
||||||
"view_qr_code": "Ver código QR",
|
"view_qr_code": "Ver código QR",
|
||||||
|
"view_similar_photos": "Ver fotos similares",
|
||||||
"view_stack": "Ver pilha",
|
"view_stack": "Ver pilha",
|
||||||
"view_user": "Ver utilizador",
|
"view_user": "Ver utilizador",
|
||||||
"viewer_remove_from_stack": "Remover da pilha",
|
"viewer_remove_from_stack": "Remover da pilha",
|
||||||
|
|||||||
@@ -1515,7 +1515,7 @@
|
|||||||
"profile_drawer_client_out_of_date_minor": "O aplicativo está desatualizado. Por favor, atualize para a versão mais recente.",
|
"profile_drawer_client_out_of_date_minor": "O aplicativo está desatualizado. Por favor, atualize para a versão mais recente.",
|
||||||
"profile_drawer_client_server_up_to_date": "Cliente e Servidor estão atualizados",
|
"profile_drawer_client_server_up_to_date": "Cliente e Servidor estão atualizados",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
"profile_drawer_readonly_mode": "Modo apenas visualização ativado. Toque duas vezes na foto do usuário para sair deste modo.",
|
"profile_drawer_readonly_mode": "Modo apenas leitura habilidato. Dê um toque prolongado na foto do usuário para sair deste modo.",
|
||||||
"profile_drawer_server_out_of_date_major": "O servidor está desatualizado. Atualize para a versão principal mais recente.",
|
"profile_drawer_server_out_of_date_major": "O servidor está desatualizado. Atualize para a versão principal mais recente.",
|
||||||
"profile_drawer_server_out_of_date_minor": "O servidor está desatualizado. Atualize para a versão mais recente.",
|
"profile_drawer_server_out_of_date_minor": "O servidor está desatualizado. Atualize para a versão mais recente.",
|
||||||
"profile_image_of_user": "Imagem do perfil de {user}",
|
"profile_image_of_user": "Imagem do perfil de {user}",
|
||||||
@@ -1640,6 +1640,7 @@
|
|||||||
"restore_user": "Restaurar usuário",
|
"restore_user": "Restaurar usuário",
|
||||||
"restored_asset": "Arquivo restaurado",
|
"restored_asset": "Arquivo restaurado",
|
||||||
"resume": "Continuar",
|
"resume": "Continuar",
|
||||||
|
"resume_paused_jobs": "Retomar {count, plural, one {# paused job} other {# paused jobs}}",
|
||||||
"retry_upload": "Tentar enviar novamente",
|
"retry_upload": "Tentar enviar novamente",
|
||||||
"review_duplicates": "Revisar duplicidade",
|
"review_duplicates": "Revisar duplicidade",
|
||||||
"review_large_files": "Ver arquivos grandes",
|
"review_large_files": "Ver arquivos grandes",
|
||||||
@@ -1916,6 +1917,8 @@
|
|||||||
"sync_albums_manual_subtitle": "Sincronize todos as fotos e vídeos enviados para os álbuns de backup selecionados",
|
"sync_albums_manual_subtitle": "Sincronize todos as fotos e vídeos enviados para os álbuns de backup selecionados",
|
||||||
"sync_local": "Sincronização Local",
|
"sync_local": "Sincronização Local",
|
||||||
"sync_remote": "Sincronização Remota",
|
"sync_remote": "Sincronização Remota",
|
||||||
|
"sync_status": "Status da Sincronização",
|
||||||
|
"sync_status_subtitle": "Ver e gerenciar o sistema de sincronização",
|
||||||
"sync_upload_album_setting_subtitle": "Crie e envie suas fotos e vídeos para o álbum selecionado no Immich",
|
"sync_upload_album_setting_subtitle": "Crie e envie suas fotos e vídeos para o álbum selecionado no Immich",
|
||||||
"tag": "Marcador",
|
"tag": "Marcador",
|
||||||
"tag_assets": "Marcar arquivos",
|
"tag_assets": "Marcar arquivos",
|
||||||
@@ -1975,6 +1978,7 @@
|
|||||||
"trash_page_select_assets_btn": "Selecionar arquivos",
|
"trash_page_select_assets_btn": "Selecionar arquivos",
|
||||||
"trash_page_title": "Lixeira ({count})",
|
"trash_page_title": "Lixeira ({count})",
|
||||||
"trashed_items_will_be_permanently_deleted_after": "Os itens da lixeira serão deletados permanentemente após {days, plural, one {# dia} other {# dias}}.",
|
"trashed_items_will_be_permanently_deleted_after": "Os itens da lixeira serão deletados permanentemente após {days, plural, one {# dia} other {# dias}}.",
|
||||||
|
"troubleshoot": "Diagnosticar",
|
||||||
"type": "Tipo",
|
"type": "Tipo",
|
||||||
"unable_to_change_pin_code": "Não foi possível alterar o código PIN",
|
"unable_to_change_pin_code": "Não foi possível alterar o código PIN",
|
||||||
"unable_to_setup_pin_code": "Não foi possível criar o código PIN",
|
"unable_to_setup_pin_code": "Não foi possível criar o código PIN",
|
||||||
|
|||||||
28
i18n/ru.json
28
i18n/ru.json
@@ -396,7 +396,7 @@
|
|||||||
"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_subtitle": "Включает режим, в котором можно только просматривать объекты. Функции выбора нескольких объектов, публикации, трансляции и удаления будут недоступны. Включить/отключить этот режим можно удерживая значок аватара пользователя на главном экране.",
|
||||||
"advanced_settings_readonly_mode_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-сертификаты",
|
||||||
@@ -534,9 +534,9 @@
|
|||||||
"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": "Ваши фото и видео могут находиться в разных альбомах/папках на устройстве. Вы можете выбрать, какие альбомы включить, а какие исключить из резервного копирования.",
|
||||||
"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_all": "Все",
|
"backup_all": "Все",
|
||||||
"backup_background_service_backup_failed_message": "Не удалось выполнить резервное копирование. Повторная попытка…",
|
"backup_background_service_backup_failed_message": "Не удалось выполнить резервное копирование. Повторная попытка…",
|
||||||
@@ -546,7 +546,7 @@
|
|||||||
"backup_background_service_error_title": "Ошибка резервного копирования",
|
"backup_background_service_error_title": "Ошибка резервного копирования",
|
||||||
"backup_background_service_in_progress_notification": "Резервное копирование объектов…",
|
"backup_background_service_in_progress_notification": "Резервное копирование объектов…",
|
||||||
"backup_background_service_upload_failure_notification": "Ошибка загрузки {filename}",
|
"backup_background_service_upload_failure_notification": "Ошибка загрузки {filename}",
|
||||||
"backup_controller_page_albums": "Резервное копирование альбомов",
|
"backup_controller_page_albums": "Альбомы",
|
||||||
"backup_controller_page_background_app_refresh_disabled_content": "Включите фоновое обновление приложения в Настройки > Общие > Фоновое обновление приложений, чтобы использовать фоновое резервное копирование.",
|
"backup_controller_page_background_app_refresh_disabled_content": "Включите фоновое обновление приложения в Настройки > Общие > Фоновое обновление приложений, чтобы использовать фоновое резервное копирование.",
|
||||||
"backup_controller_page_background_app_refresh_disabled_title": "Фоновое обновление отключено",
|
"backup_controller_page_background_app_refresh_disabled_title": "Фоновое обновление отключено",
|
||||||
"backup_controller_page_background_app_refresh_enable_button_text": "Перейти в настройки",
|
"backup_controller_page_background_app_refresh_enable_button_text": "Перейти в настройки",
|
||||||
@@ -563,8 +563,8 @@
|
|||||||
"backup_controller_page_background_turn_off": "Выключить фоновую службу",
|
"backup_controller_page_background_turn_off": "Выключить фоновую службу",
|
||||||
"backup_controller_page_background_turn_on": "Включить фоновую службу",
|
"backup_controller_page_background_turn_on": "Включить фоновую службу",
|
||||||
"backup_controller_page_background_wifi": "Только через Wi-Fi",
|
"backup_controller_page_background_wifi": "Только через Wi-Fi",
|
||||||
"backup_controller_page_backup": "Резервное копирование",
|
"backup_controller_page_backup": "Загружено",
|
||||||
"backup_controller_page_backup_selected": "Выбрано: ",
|
"backup_controller_page_backup_selected": "Выбраны: ",
|
||||||
"backup_controller_page_backup_sub": "Загруженные фото и видео",
|
"backup_controller_page_backup_sub": "Загруженные фото и видео",
|
||||||
"backup_controller_page_created": "Создано: {date}",
|
"backup_controller_page_created": "Создано: {date}",
|
||||||
"backup_controller_page_desc_backup": "Включите резервное копирование в активном режиме, чтобы автоматически загружать новые объекты при открытии приложения.",
|
"backup_controller_page_desc_backup": "Включите резервное копирование в активном режиме, чтобы автоматически загружать новые объекты при открытии приложения.",
|
||||||
@@ -768,7 +768,7 @@
|
|||||||
"default_locale": "Дата и время по умолчанию",
|
"default_locale": "Дата и время по умолчанию",
|
||||||
"default_locale_description": "Использовать формат даты и времени в соответствии с языковым стандартом вашего браузера",
|
"default_locale_description": "Использовать формат даты и времени в соответствии с языковым стандартом вашего браузера",
|
||||||
"delete": "Удалить",
|
"delete": "Удалить",
|
||||||
"delete_action_confirmation_message": "Вы действительно хотите удалить этот объект? Это действие переместит объект в корзину сервера и предложит удалить его локально.",
|
"delete_action_confirmation_message": "Вы действительно хотите удалить этот объект? Это действие переместит объект в корзину сервера и попробует удалить его локально.",
|
||||||
"delete_action_prompt": "Объекты удалены ({count} шт.)",
|
"delete_action_prompt": "Объекты удалены ({count} шт.)",
|
||||||
"delete_album": "Удалить альбом",
|
"delete_album": "Удалить альбом",
|
||||||
"delete_api_key_prompt": "Вы действительно хотите удалить этот API ключ?",
|
"delete_api_key_prompt": "Вы действительно хотите удалить этот API ключ?",
|
||||||
@@ -1041,7 +1041,7 @@
|
|||||||
"external": "Внешний",
|
"external": "Внешний",
|
||||||
"external_libraries": "Внешние библиотеки",
|
"external_libraries": "Внешние библиотеки",
|
||||||
"external_network": "Внешняя сеть",
|
"external_network": "Внешняя сеть",
|
||||||
"external_network_sheet_info": "Когда устройство не подключено к выбранной Wi-Fi сети, приложение будет пытаться подключиться к серверу по адресам ниже, сверху вниз, до успешного подключения",
|
"external_network_sheet_info": "Когда устройство не подключено к указанной Wi-Fi сети, приложение будет пытаться подключиться к серверу по адресам ниже, сверху вниз до успешного подключения",
|
||||||
"face_unassigned": "Не назначено",
|
"face_unassigned": "Не назначено",
|
||||||
"failed": "Ошибка",
|
"failed": "Ошибка",
|
||||||
"failed_to_authenticate": "Ошибка аутентификации",
|
"failed_to_authenticate": "Ошибка аутентификации",
|
||||||
@@ -1093,8 +1093,8 @@
|
|||||||
"haptic_feedback_switch": "Включить тактильную отдачу",
|
"haptic_feedback_switch": "Включить тактильную отдачу",
|
||||||
"haptic_feedback_title": "Тактильная отдача",
|
"haptic_feedback_title": "Тактильная отдача",
|
||||||
"has_quota": "Квота",
|
"has_quota": "Квота",
|
||||||
"hash_asset": "Хешированный объект",
|
"hash_asset": "Хеширование объектов",
|
||||||
"hashed_assets": "Хешированные объекты",
|
"hashed_assets": "Хеши",
|
||||||
"hashing": "Хеширование",
|
"hashing": "Хеширование",
|
||||||
"header_settings_add_header_tip": "Добавить заголовок",
|
"header_settings_add_header_tip": "Добавить заголовок",
|
||||||
"header_settings_field_validator_msg": "Значение не может быть пустым",
|
"header_settings_field_validator_msg": "Значение не может быть пустым",
|
||||||
@@ -1219,7 +1219,7 @@
|
|||||||
"local_asset_cast_failed": "Невозможна трансляция объектов, которые ещё не загружены на сервер",
|
"local_asset_cast_failed": "Невозможна трансляция объектов, которые ещё не загружены на сервер",
|
||||||
"local_assets": "Объекты на устройстве",
|
"local_assets": "Объекты на устройстве",
|
||||||
"local_network": "Локальная сеть",
|
"local_network": "Локальная сеть",
|
||||||
"local_network_sheet_info": "Приложение будет подключаться к серверу по этому адресу, когда устройство подключено к выбранной Wi-Fi сети",
|
"local_network_sheet_info": "Приложение будет подключаться к серверу по этому адресу, когда устройство подключено к указанной Wi-Fi сети",
|
||||||
"location_permission": "Доступ к местоположению",
|
"location_permission": "Доступ к местоположению",
|
||||||
"location_permission_content": "Чтобы использовать функцию автоматического переключения, Immich необходимо разрешение на точное определение местоположения, чтобы оно могло считывать название текущей Wi-Fi сети",
|
"location_permission_content": "Чтобы использовать функцию автоматического переключения, Immich необходимо разрешение на точное определение местоположения, чтобы оно могло считывать название текущей Wi-Fi сети",
|
||||||
"location_picker_choose_on_map": "Выбрать на карте",
|
"location_picker_choose_on_map": "Выбрать на карте",
|
||||||
@@ -1413,7 +1413,7 @@
|
|||||||
"options": "Опции",
|
"options": "Опции",
|
||||||
"or": "или",
|
"or": "или",
|
||||||
"organize_into_albums": "Распределить по альбомам",
|
"organize_into_albums": "Распределить по альбомам",
|
||||||
"organize_into_albums_description": "Добавить уже существующие фотографии в альбомы, используя текущие настройки синхронизации",
|
"organize_into_albums_description": "Добавить уже существующие объекты в альбомы, используя текущие настройки синхронизации",
|
||||||
"organize_your_library": "Приведите в порядок свою библиотеку",
|
"organize_your_library": "Приведите в порядок свою библиотеку",
|
||||||
"original": "оригинал",
|
"original": "оригинал",
|
||||||
"other": "Другое",
|
"other": "Другое",
|
||||||
@@ -1915,11 +1915,11 @@
|
|||||||
"sync": "Синхр.",
|
"sync": "Синхр.",
|
||||||
"sync_albums": "Синхронизировать альбомы",
|
"sync_albums": "Синхронизировать альбомы",
|
||||||
"sync_albums_manual_subtitle": "Синхронизировать все загруженные фото и видео в выбранные альбомы для резервного копирования",
|
"sync_albums_manual_subtitle": "Синхронизировать все загруженные фото и видео в выбранные альбомы для резервного копирования",
|
||||||
"sync_local": "Синхронизировать локально",
|
"sync_local": "Локальная синхронизация",
|
||||||
"sync_remote": "Синхронизация с сервером",
|
"sync_remote": "Синхронизация с сервером",
|
||||||
"sync_status": "Статус синхронизации",
|
"sync_status": "Статус синхронизации",
|
||||||
"sync_status_subtitle": "Просмотр и управление системой синхронизации",
|
"sync_status_subtitle": "Просмотр и управление системой синхронизации",
|
||||||
"sync_upload_album_setting_subtitle": "Создавайте и загружайте свои фотографии и видео в выбранные альбомы на сервер Immich",
|
"sync_upload_album_setting_subtitle": "Создавать на сервере такие же альбомы, как выбранные на устройстве, и загружать в них фото и видео",
|
||||||
"tag": "Тег",
|
"tag": "Тег",
|
||||||
"tag_assets": "Добавить теги",
|
"tag_assets": "Добавить теги",
|
||||||
"tag_created": "Тег {tag} создан",
|
"tag_created": "Тег {tag} создан",
|
||||||
|
|||||||
@@ -1515,7 +1515,7 @@
|
|||||||
"profile_drawer_client_out_of_date_minor": "Mobilna aplikacija je zastarela. Posodobite na najnovejšo manjšo različico.",
|
"profile_drawer_client_out_of_date_minor": "Mobilna aplikacija je zastarela. Posodobite na najnovejšo manjšo različico.",
|
||||||
"profile_drawer_client_server_up_to_date": "Odjemalec in strežnik sta posodobljena",
|
"profile_drawer_client_server_up_to_date": "Odjemalec in strežnik sta posodobljena",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
"profile_drawer_readonly_mode": "Način samo za branje je omogočen. Za izhod dvakrat tapnite ikono uporabniškega avatarja.",
|
"profile_drawer_readonly_mode": "Način samo za branje je omogočen. Za izhod dolgo pritisnite ikono uporabniškega avatarja.",
|
||||||
"profile_drawer_server_out_of_date_major": "Strežnik je zastarel. Posodobite na najnovejšo glavno različico.",
|
"profile_drawer_server_out_of_date_major": "Strežnik je zastarel. Posodobite na najnovejšo glavno različico.",
|
||||||
"profile_drawer_server_out_of_date_minor": "Strežnik je zastarel. Posodobite na najnovejšo manjšo različico.",
|
"profile_drawer_server_out_of_date_minor": "Strežnik je zastarel. Posodobite na najnovejšo manjšo različico.",
|
||||||
"profile_image_of_user": "Profilna slika uporabnika {user}",
|
"profile_image_of_user": "Profilna slika uporabnika {user}",
|
||||||
@@ -1917,6 +1917,8 @@
|
|||||||
"sync_albums_manual_subtitle": "Sinhronizirajte vse naložene videoposnetke in fotografije v izbrane varnostne albume",
|
"sync_albums_manual_subtitle": "Sinhronizirajte vse naložene videoposnetke in fotografije v izbrane varnostne albume",
|
||||||
"sync_local": "Sinhroniziraj lokalno",
|
"sync_local": "Sinhroniziraj lokalno",
|
||||||
"sync_remote": "Sinhroniziraj oddaljeno",
|
"sync_remote": "Sinhroniziraj oddaljeno",
|
||||||
|
"sync_status": "Stanje sinhronizacije",
|
||||||
|
"sync_status_subtitle": "Ogled in upravljanje sistema sinhronizacije",
|
||||||
"sync_upload_album_setting_subtitle": "Ustvarite in naložite svoje fotografije in videoposnetke v izbrane albume na Immich",
|
"sync_upload_album_setting_subtitle": "Ustvarite in naložite svoje fotografije in videoposnetke v izbrane albume na Immich",
|
||||||
"tag": "Oznaka",
|
"tag": "Oznaka",
|
||||||
"tag_assets": "Označi sredstva",
|
"tag_assets": "Označi sredstva",
|
||||||
@@ -1976,6 +1978,7 @@
|
|||||||
"trash_page_select_assets_btn": "Izberite sredstva",
|
"trash_page_select_assets_btn": "Izberite sredstva",
|
||||||
"trash_page_title": "Smetnjak ({count})",
|
"trash_page_title": "Smetnjak ({count})",
|
||||||
"trashed_items_will_be_permanently_deleted_after": "Elementi v smetnjaku bodo trajno izbrisani po {days, plural, one {# dnevu} two {# dnevih} few {# dnevih} other {# dneh}}.",
|
"trashed_items_will_be_permanently_deleted_after": "Elementi v smetnjaku bodo trajno izbrisani po {days, plural, one {# dnevu} two {# dnevih} few {# dnevih} other {# dneh}}.",
|
||||||
|
"troubleshoot": "Odpravljanje težav",
|
||||||
"type": "Vrsta",
|
"type": "Vrsta",
|
||||||
"unable_to_change_pin_code": "PIN kode ni mogoče spremeniti",
|
"unable_to_change_pin_code": "PIN kode ni mogoče spremeniti",
|
||||||
"unable_to_setup_pin_code": "PIN kode ni mogoče nastaviti",
|
"unable_to_setup_pin_code": "PIN kode ni mogoče nastaviti",
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
"account_settings": "Podešavanja za Profil",
|
"account_settings": "Podešavanja za Profil",
|
||||||
"acknowledge": "Potvrdi",
|
"acknowledge": "Potvrdi",
|
||||||
"action": "Postupak",
|
"action": "Postupak",
|
||||||
|
"action_common_update": "Ažuriraj",
|
||||||
"actions": "Postupci",
|
"actions": "Postupci",
|
||||||
"active": "Aktivni",
|
"active": "Aktivni",
|
||||||
"activity": "Aktivnost",
|
"activity": "Aktivnost",
|
||||||
@@ -13,6 +14,7 @@
|
|||||||
"add_a_location": "Dodaj Lokaciju",
|
"add_a_location": "Dodaj Lokaciju",
|
||||||
"add_a_name": "Dodaj ime",
|
"add_a_name": "Dodaj ime",
|
||||||
"add_a_title": "Dodaj naslov",
|
"add_a_title": "Dodaj naslov",
|
||||||
|
"add_birthday": "Dodaj rođendan",
|
||||||
"add_endpoint": "Dodajte krajnju tačku",
|
"add_endpoint": "Dodajte krajnju tačku",
|
||||||
"add_exclusion_pattern": "Dodajte obrazac izuzimanja",
|
"add_exclusion_pattern": "Dodajte obrazac izuzimanja",
|
||||||
"add_import_path": "Dodaj putanju za preuzimanje",
|
"add_import_path": "Dodaj putanju za preuzimanje",
|
||||||
@@ -21,10 +23,14 @@
|
|||||||
"add_partner": "Dodaj partner",
|
"add_partner": "Dodaj partner",
|
||||||
"add_path": "Dodaj putanju",
|
"add_path": "Dodaj putanju",
|
||||||
"add_photos": "Dodaj fotografije",
|
"add_photos": "Dodaj fotografije",
|
||||||
|
"add_tag": "Dodaj oznaku",
|
||||||
"add_to": "Dodaj u…",
|
"add_to": "Dodaj u…",
|
||||||
"add_to_album": "Dodaj u album",
|
"add_to_album": "Dodaj u album",
|
||||||
"add_to_album_bottom_sheet_added": "Dodato u {album}",
|
"add_to_album_bottom_sheet_added": "Dodato u {album}",
|
||||||
"add_to_album_bottom_sheet_already_exists": "Već u {album}",
|
"add_to_album_bottom_sheet_already_exists": "Već u {album}",
|
||||||
|
"add_to_album_toggle": "Uključi/isključi izbor za {album}",
|
||||||
|
"add_to_albums": "Dodaj u albume",
|
||||||
|
"add_to_albums_count": "Dodaj u albume ({count})",
|
||||||
"add_to_shared_album": "Dodaj u deljen album",
|
"add_to_shared_album": "Dodaj u deljen album",
|
||||||
"add_url": "Dodaj URL",
|
"add_url": "Dodaj URL",
|
||||||
"added_to_archive": "Dodato u arhivu",
|
"added_to_archive": "Dodato u arhivu",
|
||||||
@@ -32,6 +38,7 @@
|
|||||||
"added_to_favorites_count": "Dodato {count, number} u favorite",
|
"added_to_favorites_count": "Dodato {count, number} u favorite",
|
||||||
"admin": {
|
"admin": {
|
||||||
"add_exclusion_pattern_description": "Dodajte obrasce isključenja. Korištenje *, ** i ? je podržano. Da biste ignorisali sve datoteke u bilo kom direktorijumu pod nazivom „Rav“, koristite „**/Rav/**“. Da biste ignorisali sve datoteke koje se završavaju na „.tif“, koristite „**/*.tif“. Da biste ignorisali apsolutnu putanju, koristite „/path/to/ignore/**“.",
|
"add_exclusion_pattern_description": "Dodajte obrasce isključenja. Korištenje *, ** i ? je podržano. Da biste ignorisali sve datoteke u bilo kom direktorijumu pod nazivom „Rav“, koristite „**/Rav/**“. Da biste ignorisali sve datoteke koje se završavaju na „.tif“, koristite „**/*.tif“. Da biste ignorisali apsolutnu putanju, koristite „/path/to/ignore/**“.",
|
||||||
|
"admin_user": "Administrator",
|
||||||
"asset_offline_description": "Ovo eksterno bibliotečko sredstvo se više ne nalazi na disku i premešteno je u smeće. Ako je datoteka premeštena unutar biblioteke, proverite svoju vremensku liniju za novo odgovarajuće sredstvo. Da biste vratili ovo sredstvo, uverite se da Immich može da pristupi dole navedenoj putanji datoteke i skenirajte biblioteku.",
|
"asset_offline_description": "Ovo eksterno bibliotečko sredstvo se više ne nalazi na disku i premešteno je u smeće. Ako je datoteka premeštena unutar biblioteke, proverite svoju vremensku liniju za novo odgovarajuće sredstvo. Da biste vratili ovo sredstvo, uverite se da Immich može da pristupi dole navedenoj putanji datoteke i skenirajte biblioteku.",
|
||||||
"authentication_settings": "Podešavanja za autentifikaciju",
|
"authentication_settings": "Podešavanja za autentifikaciju",
|
||||||
"authentication_settings_description": "Upravljajte lozinkom, OAuth-om i drugim podešavanjima autentifikacije",
|
"authentication_settings_description": "Upravljajte lozinkom, OAuth-om i drugim podešavanjima autentifikacije",
|
||||||
@@ -41,8 +48,15 @@
|
|||||||
"backup_database": "Kreirajte rezervnu kopiju baze podataka",
|
"backup_database": "Kreirajte rezervnu kopiju baze podataka",
|
||||||
"backup_database_enable_description": "Omogući dampove baze podataka",
|
"backup_database_enable_description": "Omogući dampove baze podataka",
|
||||||
"backup_keep_last_amount": "Količina prethodnih dampova koje treba zadržati",
|
"backup_keep_last_amount": "Količina prethodnih dampova koje treba zadržati",
|
||||||
|
"backup_onboarding_1_description": "kopija na oblaku ili na drugoj fizičkoj lokaciji.",
|
||||||
|
"backup_onboarding_2_description": "lokalne kopije na različitim uređajima. Ovo uključuje glavne datoteke i rezervnu kopiju tih datoteka lokalno.",
|
||||||
|
"backup_onboarding_3_description": "ukupno kopija vaših podataka, uklučujući originalne datoteke. Ovo uključuje 1 udaljenu kopiju i 2 lokalne kopije.",
|
||||||
|
"backup_onboarding_description": "<backblaze-link>3-2-1 strategija rezervnih kopija</backblaze-link> je preporučena da zaštiti vaše podatke. Trebali biste čuvati kopije vaših otpremljenih slika/videa kao i Immich bazu podataka za sveobuhvatno rešenje za rezervne kopije.",
|
||||||
|
"backup_onboarding_footer": "Za više informacija o pravljenju rezervne kopije Immich-a, molimo vas pogledajte <link>dokumentaciju</link>.",
|
||||||
|
"backup_onboarding_parts_title": "3-2-1 rezervna kopija uključuje:",
|
||||||
|
"backup_onboarding_title": "Rezervne kopije",
|
||||||
"backup_settings": "Podešavanja dampa baze podataka",
|
"backup_settings": "Podešavanja dampa baze podataka",
|
||||||
"backup_settings_description": "Upravljajte podešavanjima dampa baze podataka. Napomena: Ovi poslovi se ne prate i nećete biti obavešteni o neuspehu.",
|
"backup_settings_description": "Upravljajte podešavanjima dampa baze podataka.",
|
||||||
"cleared_jobs": "Očišćeni poslovi za: {job}",
|
"cleared_jobs": "Očišćeni poslovi za: {job}",
|
||||||
"config_set_by_file": "Konfiguraciju trenutno postavlja konfiguracioni fajl",
|
"config_set_by_file": "Konfiguraciju trenutno postavlja konfiguracioni fajl",
|
||||||
"confirm_delete_library": "Da li stvarno želite da izbrišete biblioteku {library} ?",
|
"confirm_delete_library": "Da li stvarno želite da izbrišete biblioteku {library} ?",
|
||||||
@@ -163,12 +177,23 @@
|
|||||||
"metadata_settings_description": "Upravljajte podešavanjima metapodataka",
|
"metadata_settings_description": "Upravljajte podešavanjima metapodataka",
|
||||||
"migration_job": "Migracije",
|
"migration_job": "Migracije",
|
||||||
"migration_job_description": "Prenesite sličice datoteka i lica u najnoviju strukturu direktorijuma",
|
"migration_job_description": "Prenesite sličice datoteka i lica u najnoviju strukturu direktorijuma",
|
||||||
|
"nightly_tasks_cluster_faces_setting_description": "Pokreni prepoznavanje lica na novodetektovanim licima",
|
||||||
|
"nightly_tasks_cluster_new_faces_setting": "Združi nova lica",
|
||||||
|
"nightly_tasks_database_cleanup_setting": "Zadaci čiščenja baze podataka",
|
||||||
|
"nightly_tasks_database_cleanup_setting_description": "Očisti stare, istekle podatke iz baze podataka",
|
||||||
|
"nightly_tasks_generate_memories_setting": "Generiši sjećanja",
|
||||||
|
"nightly_tasks_generate_memories_setting_description": "Kreiraj nova sjećanja",
|
||||||
|
"nightly_tasks_missing_thumbnails_setting": "Generiši nedostajuće sličice",
|
||||||
|
"nightly_tasks_missing_thumbnails_setting_description": "Dodajte elemente bez sličica u red za generisanje sličica",
|
||||||
|
"nightly_tasks_settings": "Podešavanja noćnih zadataka",
|
||||||
|
"nightly_tasks_settings_description": "Upravljaj noćnim zadacima",
|
||||||
|
"nightly_tasks_sync_quota_usage_setting_description": "Ažurirajte kvotu memorijskog prostora korisnika na osnovu trenutne upotrebe",
|
||||||
"no_paths_added": "Nema dodatih putanja",
|
"no_paths_added": "Nema dodatih putanja",
|
||||||
"no_pattern_added": "Nije dodat obrazac",
|
"no_pattern_added": "Nije dodat obrazac",
|
||||||
"note_apply_storage_label_previous_assets": "Napomena: Da biste primenili oznaku za skladištenje na prethodno otpremljena sredstva, pokrenite",
|
"note_apply_storage_label_previous_assets": "Napomena: Da biste primenili oznaku za skladištenje na prethodno otpremljena sredstva, pokrenite",
|
||||||
"note_cannot_be_changed_later": "NAPOMENA: Ovo se kasnije ne može promeniti!",
|
"note_cannot_be_changed_later": "NAPOMENA: Ovo se kasnije ne može promeniti!",
|
||||||
"notification_email_from_address": "Sa adrese",
|
"notification_email_from_address": "Sa adrese",
|
||||||
"notification_email_from_address_description": "Adresa e-pošte pošiljaoca, na primer: \"Immich foto server <noreply@example.com>\"",
|
"notification_email_from_address_description": "Adresa e-pošte pošiljaoca, na primer: \"Immich foto server <noreply@example.com>\". Pobrinite se da koristite adresu sa koje vam je dozovljeno slati e-poštu.",
|
||||||
"notification_email_host_description": "Host servera e-pošte (npr. smtp.immich.app)",
|
"notification_email_host_description": "Host servera e-pošte (npr. smtp.immich.app)",
|
||||||
"notification_email_ignore_certificate_errors": "Zanemarite greške sertifikata",
|
"notification_email_ignore_certificate_errors": "Zanemarite greške sertifikata",
|
||||||
"notification_email_ignore_certificate_errors_description": "Ignorišite greške u validaciji TLS sertifikata (ne preporučuje se)",
|
"notification_email_ignore_certificate_errors_description": "Ignorišite greške u validaciji TLS sertifikata (ne preporučuje se)",
|
||||||
@@ -201,7 +226,7 @@
|
|||||||
"oauth_storage_quota_claim": "Zahtev za kvotu skladištenja",
|
"oauth_storage_quota_claim": "Zahtev za kvotu skladištenja",
|
||||||
"oauth_storage_quota_claim_description": "Automatski podesite kvotu memorijskog prostora korisnika na vrednost ovog zahteva.",
|
"oauth_storage_quota_claim_description": "Automatski podesite kvotu memorijskog prostora korisnika na vrednost ovog zahteva.",
|
||||||
"oauth_storage_quota_default": "Podrazumevana kvota za skladištenje (GiB)",
|
"oauth_storage_quota_default": "Podrazumevana kvota za skladištenje (GiB)",
|
||||||
"oauth_storage_quota_default_description": "Kvota u GiB koja se koristi kada nema potraživanja (unesite 0 za neograničenu kvotu).",
|
"oauth_storage_quota_default_description": "Kvota u GiB koja se koristi kada nema potraživanja.",
|
||||||
"oauth_timeout": "Vremensko ograničenje zahteva",
|
"oauth_timeout": "Vremensko ograničenje zahteva",
|
||||||
"oauth_timeout_description": "Vremensko ograničenje za zahteve u milisekundama",
|
"oauth_timeout_description": "Vremensko ograničenje za zahteve u milisekundama",
|
||||||
"password_enable_description": "Prijavite se pomoću e-pošte i lozinke",
|
"password_enable_description": "Prijavite se pomoću e-pošte i lozinke",
|
||||||
@@ -508,7 +533,7 @@
|
|||||||
"backup_controller_page_background_turn_off": "Isključi pozadinski servis",
|
"backup_controller_page_background_turn_off": "Isključi pozadinski servis",
|
||||||
"backup_controller_page_background_turn_on": "Uključi pozadinski servis",
|
"backup_controller_page_background_turn_on": "Uključi pozadinski servis",
|
||||||
"backup_controller_page_background_wifi": "Samo na Wi-Fi",
|
"backup_controller_page_background_wifi": "Samo na Wi-Fi",
|
||||||
"backup_controller_page_backup": "Napravi rezervnu kopiju",
|
"backup_controller_page_backup": "Rezervne kopije",
|
||||||
"backup_controller_page_backup_selected": "Odabrano: ",
|
"backup_controller_page_backup_selected": "Odabrano: ",
|
||||||
"backup_controller_page_backup_sub": "Završeno pravljenje rezervne kopije fotografija i videa",
|
"backup_controller_page_backup_sub": "Završeno pravljenje rezervne kopije fotografija i videa",
|
||||||
"backup_controller_page_created": "Napravljeno:{date}",
|
"backup_controller_page_created": "Napravljeno:{date}",
|
||||||
@@ -519,8 +544,8 @@
|
|||||||
"backup_controller_page_id": "ID:{id}",
|
"backup_controller_page_id": "ID:{id}",
|
||||||
"backup_controller_page_info": "Informacije",
|
"backup_controller_page_info": "Informacije",
|
||||||
"backup_controller_page_none_selected": "Ništa odabrano",
|
"backup_controller_page_none_selected": "Ništa odabrano",
|
||||||
"backup_controller_page_remainder": "Podsetnik",
|
"backup_controller_page_remainder": "Ostatak",
|
||||||
"backup_controller_page_remainder_sub": "Ostalo fotografija i videa da se otpremi od selekcije",
|
"backup_controller_page_remainder_sub": "Ostale fotografije i video snimci za otpremanje od selekcije",
|
||||||
"backup_controller_page_server_storage": "Prostor na serveru",
|
"backup_controller_page_server_storage": "Prostor na serveru",
|
||||||
"backup_controller_page_start_backup": "Pokreni pravljenje rezervne kopije",
|
"backup_controller_page_start_backup": "Pokreni pravljenje rezervne kopije",
|
||||||
"backup_controller_page_status_off": "Automatsko pravljenje rezervnih kopija u prvom planu je isključeno",
|
"backup_controller_page_status_off": "Automatsko pravljenje rezervnih kopija u prvom planu je isključeno",
|
||||||
|
|||||||
@@ -1515,7 +1515,7 @@
|
|||||||
"profile_drawer_client_out_of_date_minor": "Mobilappen är föråldrad. Uppdatera till senaste versionen.",
|
"profile_drawer_client_out_of_date_minor": "Mobilappen är föråldrad. Uppdatera till senaste versionen.",
|
||||||
"profile_drawer_client_server_up_to_date": "Klient och server är uppdaterade",
|
"profile_drawer_client_server_up_to_date": "Klient och server är uppdaterade",
|
||||||
"profile_drawer_github": "GitHub",
|
"profile_drawer_github": "GitHub",
|
||||||
"profile_drawer_readonly_mode": "Skrivskyddat läge aktiverat. Dubbeltryck på användaravatarikonen för att avsluta",
|
"profile_drawer_readonly_mode": "Skrivskyddat läge aktiverat. Håll in användaravatarikonen för att avsluta",
|
||||||
"profile_drawer_server_out_of_date_major": "Servern har en föråldrad mjukvara. Uppdatera till senaste versionen.",
|
"profile_drawer_server_out_of_date_major": "Servern har en föråldrad mjukvara. Uppdatera till senaste versionen.",
|
||||||
"profile_drawer_server_out_of_date_minor": "Servern har en föråldrad mjukvara. Uppdatera till senaste versionen.",
|
"profile_drawer_server_out_of_date_minor": "Servern har en föråldrad mjukvara. Uppdatera till senaste versionen.",
|
||||||
"profile_image_of_user": "{user} profilbild",
|
"profile_image_of_user": "{user} profilbild",
|
||||||
@@ -1917,6 +1917,8 @@
|
|||||||
"sync_albums_manual_subtitle": "Synka alla uppladdade videor och foton till valda backup-album",
|
"sync_albums_manual_subtitle": "Synka alla uppladdade videor och foton till valda backup-album",
|
||||||
"sync_local": "Synkronisera lokalt",
|
"sync_local": "Synkronisera lokalt",
|
||||||
"sync_remote": "Synkronisera fjärrserver",
|
"sync_remote": "Synkronisera fjärrserver",
|
||||||
|
"sync_status": "Synk Status",
|
||||||
|
"sync_status_subtitle": "Visa och hantera synkroniseringssystemet",
|
||||||
"sync_upload_album_setting_subtitle": "Skapa och ladda upp dina foton och videor till de valda albumen på Immich",
|
"sync_upload_album_setting_subtitle": "Skapa och ladda upp dina foton och videor till de valda albumen på Immich",
|
||||||
"tag": "Tagg",
|
"tag": "Tagg",
|
||||||
"tag_assets": "Tagga tillgångar",
|
"tag_assets": "Tagga tillgångar",
|
||||||
@@ -1976,6 +1978,7 @@
|
|||||||
"trash_page_select_assets_btn": "Välj objekt",
|
"trash_page_select_assets_btn": "Välj objekt",
|
||||||
"trash_page_title": "Papperskorg ({count})",
|
"trash_page_title": "Papperskorg ({count})",
|
||||||
"trashed_items_will_be_permanently_deleted_after": "Objekt i papperskorgen raderas permanent efter {days, plural, one {# dag} other {# dagar}}.",
|
"trashed_items_will_be_permanently_deleted_after": "Objekt i papperskorgen raderas permanent efter {days, plural, one {# dag} other {# dagar}}.",
|
||||||
|
"troubleshoot": "Felsök",
|
||||||
"type": "Typ",
|
"type": "Typ",
|
||||||
"unable_to_change_pin_code": "Kunde inte ändra pinkod",
|
"unable_to_change_pin_code": "Kunde inte ändra pinkod",
|
||||||
"unable_to_setup_pin_code": "Kunde inte konfigurera pinkod",
|
"unable_to_setup_pin_code": "Kunde inte konfigurera pinkod",
|
||||||
|
|||||||
414
i18n/tr.json
414
i18n/tr.json
File diff suppressed because it is too large
Load Diff
@@ -1640,7 +1640,7 @@
|
|||||||
"restore_user": "Відновити користувача",
|
"restore_user": "Відновити користувача",
|
||||||
"restored_asset": "Відновлений ресурс",
|
"restored_asset": "Відновлений ресурс",
|
||||||
"resume": "Продовжити",
|
"resume": "Продовжити",
|
||||||
"resume_paused_jobs": "Резюме {count, plural, one {# призупинене завдання} other {# призупинені завдання}}",
|
"resume_paused_jobs": "Відновити {count, plural, one {# призупинене завдання} other {# призупинені завдання}}",
|
||||||
"retry_upload": "Повторити завантаження",
|
"retry_upload": "Повторити завантаження",
|
||||||
"review_duplicates": "Переглянути дублікати",
|
"review_duplicates": "Переглянути дублікати",
|
||||||
"review_large_files": "Перегляд великих файлів",
|
"review_large_files": "Перегляд великих файлів",
|
||||||
|
|||||||
@@ -1510,7 +1510,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_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} 的個人資料圖片",
|
||||||
@@ -1549,6 +1549,7 @@
|
|||||||
"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": "査詢資產ID",
|
||||||
"queue_status": "處理中 {count}/{total}",
|
"queue_status": "處理中 {count}/{total}",
|
||||||
"rating": "評星",
|
"rating": "評星",
|
||||||
"rating_clear": "清除評等",
|
"rating_clear": "清除評等",
|
||||||
@@ -1634,6 +1635,7 @@
|
|||||||
"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": "檢視大型文件",
|
"review_large_files": "檢視大型文件",
|
||||||
@@ -1910,6 +1912,8 @@
|
|||||||
"sync_albums_manual_subtitle": "將所有上傳的短片和照片同步到選定的備份相簿",
|
"sync_albums_manual_subtitle": "將所有上傳的短片和照片同步到選定的備份相簿",
|
||||||
"sync_local": "同步本機",
|
"sync_local": "同步本機",
|
||||||
"sync_remote": "同步遠端",
|
"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": "標記檔案",
|
||||||
@@ -1947,7 +1951,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": "統計",
|
||||||
@@ -1967,6 +1973,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, other {# 天}}後永久刪除。",
|
"trashed_items_will_be_permanently_deleted_after": "垃圾桶中的項目會在 {days, plural, 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 碼",
|
||||||
@@ -1997,6 +2004,7 @@
|
|||||||
"unstacked_assets_count": "已解除堆疊 {count, plural, other {# 個檔案}}",
|
"unstacked_assets_count": "已解除堆疊 {count, plural, other {# 個檔案}}",
|
||||||
"untagged": "無標籤",
|
"untagged": "無標籤",
|
||||||
"up_next": "下一個",
|
"up_next": "下一個",
|
||||||
|
"update_location_action_prompt": "使用以下命令更新{count}個所選資產的位置:",
|
||||||
"updated_at": "更新於",
|
"updated_at": "更新於",
|
||||||
"updated_password": "已更新密碼",
|
"updated_password": "已更新密碼",
|
||||||
"upload": "上傳",
|
"upload": "上傳",
|
||||||
@@ -2063,6 +2071,7 @@
|
|||||||
"view_next_asset": "查看下一項",
|
"view_next_asset": "查看下一項",
|
||||||
"view_previous_asset": "查看上一項",
|
"view_previous_asset": "查看上一項",
|
||||||
"view_qr_code": "查看 QR code",
|
"view_qr_code": "查看 QR code",
|
||||||
|
"view_similar_photos": "查看相似照片",
|
||||||
"view_stack": "查看堆疊",
|
"view_stack": "查看堆疊",
|
||||||
"view_user": "顯示使用者",
|
"view_user": "顯示使用者",
|
||||||
"viewer_remove_from_stack": "從堆疊中移除",
|
"viewer_remove_from_stack": "從堆疊中移除",
|
||||||
|
|||||||
@@ -26,8 +26,8 @@
|
|||||||
"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_album_toggle": "选择相册 {album}",
|
||||||
"add_to_albums": "添加到相册",
|
"add_to_albums": "添加到相册",
|
||||||
"add_to_albums_count": "添加到相册({count}个)",
|
"add_to_albums_count": "添加到相册({count}个)",
|
||||||
@@ -100,7 +100,7 @@
|
|||||||
"image_thumbnail_description": "剥离元数据的小缩略图,用于浏览主时间线等照片组",
|
"image_thumbnail_description": "剥离元数据的小缩略图,用于浏览主时间线等照片组",
|
||||||
"image_thumbnail_quality_description": "缩略图质量从 1 到 100。越高越好,但会产生更大的文件,并且会降低系统的响应能力。",
|
"image_thumbnail_quality_description": "缩略图质量从 1 到 100。越高越好,但会产生更大的文件,并且会降低系统的响应能力。",
|
||||||
"image_thumbnail_title": "缩略图设置",
|
"image_thumbnail_title": "缩略图设置",
|
||||||
"job_concurrency": "{job}并发",
|
"job_concurrency": "{job}任务并发",
|
||||||
"job_created": "任务已创建",
|
"job_created": "任务已创建",
|
||||||
"job_not_concurrency_safe": "此任务并发并不安全。",
|
"job_not_concurrency_safe": "此任务并发并不安全。",
|
||||||
"job_settings": "任务设置",
|
"job_settings": "任务设置",
|
||||||
@@ -121,13 +121,13 @@
|
|||||||
"library_watching_settings": "监控图库(实验性)",
|
"library_watching_settings": "监控图库(实验性)",
|
||||||
"library_watching_settings_description": "自动监控文件变化",
|
"library_watching_settings_description": "自动监控文件变化",
|
||||||
"logging_enable_description": "启用日志记录",
|
"logging_enable_description": "启用日志记录",
|
||||||
"logging_level_description": "启用的日志级别。",
|
"logging_level_description": "启用时,要使用的日志级别。",
|
||||||
"logging_settings": "日志",
|
"logging_settings": "日志",
|
||||||
"machine_learning_clip_model": "CLIP 模型",
|
"machine_learning_clip_model": "CLIP 模型",
|
||||||
"machine_learning_clip_model_description": "请于 <link>此处</link>查看支持的 CLIP 模型名称。注意,更换模型后需要对所有图片重新运行“智能搜索”任务。",
|
"machine_learning_clip_model_description": "请于 <link>此处</link>查看支持的 CLIP 模型名称。注意,更换模型后需要对所有图片重新运行“智能搜索”任务。",
|
||||||
"machine_learning_duplicate_detection": "重复项检测",
|
"machine_learning_duplicate_detection": "重复项检测",
|
||||||
"machine_learning_duplicate_detection_enabled": "启用重复检测",
|
"machine_learning_duplicate_detection_enabled": "启用重复检测",
|
||||||
"machine_learning_duplicate_detection_enabled_description": "如果禁用此功能,完全相同的项目仍将被去重。",
|
"machine_learning_duplicate_detection_enabled_description": "如果禁用,完全相同的项目仍将被去重。",
|
||||||
"machine_learning_duplicate_detection_setting_description": "使用 CLIP 向量匹配(关键词相似度)来查找可能的重复项",
|
"machine_learning_duplicate_detection_setting_description": "使用 CLIP 向量匹配(关键词相似度)来查找可能的重复项",
|
||||||
"machine_learning_enabled": "启用机器学习",
|
"machine_learning_enabled": "启用机器学习",
|
||||||
"machine_learning_enabled_description": "如果禁用,无论以下如何设置,所有机器学习功能将被禁用。",
|
"machine_learning_enabled_description": "如果禁用,无论以下如何设置,所有机器学习功能将被禁用。",
|
||||||
@@ -158,7 +158,7 @@
|
|||||||
"map_enable_description": "启用地图功能",
|
"map_enable_description": "启用地图功能",
|
||||||
"map_gps_settings": "地图与 GPS 设置",
|
"map_gps_settings": "地图与 GPS 设置",
|
||||||
"map_gps_settings_description": "管理地图与 GPS(反向地理编码)设置",
|
"map_gps_settings_description": "管理地图与 GPS(反向地理编码)设置",
|
||||||
"map_implications": "地图功能依赖于外部地形贴图服务(tiles.immich.cloud)",
|
"map_implications": "地图功能依赖于外部地图瓦片服务(tiles.immich.cloud)",
|
||||||
"map_light_style": "浅色模式",
|
"map_light_style": "浅色模式",
|
||||||
"map_manage_reverse_geocoding_settings": "管理<link>反向地理编码</link>设置",
|
"map_manage_reverse_geocoding_settings": "管理<link>反向地理编码</link>设置",
|
||||||
"map_reverse_geocoding": "反向地理编码",
|
"map_reverse_geocoding": "反向地理编码",
|
||||||
@@ -220,7 +220,7 @@
|
|||||||
"oauth_enable_description": "使用 OAuth 登录",
|
"oauth_enable_description": "使用 OAuth 登录",
|
||||||
"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": "角色声明",
|
||||||
"oauth_role_claim_description": "根据此声明的存在自动授予管理员访问权限。声明可以是“user”(用户)或“admin”(管理员)。",
|
"oauth_role_claim_description": "根据此声明的存在自动授予管理员访问权限。声明可以是“user”(用户)或“admin”(管理员)。",
|
||||||
"oauth_settings": "OAuth",
|
"oauth_settings": "OAuth",
|
||||||
@@ -364,7 +364,7 @@
|
|||||||
"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": "延期删除",
|
||||||
"user_delete_delay_settings_description": "永久删除账户及其所有项目之前所保留的天数。用户删除作业会在午夜检查是否有用户可以删除。对该设置的更改将在下次执行时生效。",
|
"user_delete_delay_settings_description": "删除后永久删除用户帐户和资产的天数。用户删除作业会在午夜检查是否有用户可以删除。对该设置的更改将在下次执行时生效。",
|
||||||
"user_delete_immediately": "<b>{user}</b>的账户及项目将<b>立即</b>永久删除。",
|
"user_delete_immediately": "<b>{user}</b>的账户及项目将<b>立即</b>永久删除。",
|
||||||
"user_delete_immediately_checkbox": "立即删除检索到的用户及项目",
|
"user_delete_immediately_checkbox": "立即删除检索到的用户及项目",
|
||||||
"user_details": "用户详情",
|
"user_details": "用户详情",
|
||||||
@@ -1640,7 +1640,7 @@
|
|||||||
"restore_user": "恢复用户",
|
"restore_user": "恢复用户",
|
||||||
"restored_asset": "已恢复项目",
|
"restored_asset": "已恢复项目",
|
||||||
"resume": "继续",
|
"resume": "继续",
|
||||||
"resume_paused_jobs": "继续 {count, plural, one {# 已暂停的作业} other {# 已暂停的作业}}",
|
"resume_paused_jobs": "继续 {count, plural, one {# 已暂停的任务} other {# 已暂停的任务}}",
|
||||||
"retry_upload": "重新上传",
|
"retry_upload": "重新上传",
|
||||||
"review_duplicates": "检查重复项",
|
"review_duplicates": "检查重复项",
|
||||||
"review_large_files": "查看大文件",
|
"review_large_files": "查看大文件",
|
||||||
@@ -1929,7 +1929,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": "点击运行作业",
|
"tap_to_run_job": "点击运行任务",
|
||||||
"template": "模版",
|
"template": "模版",
|
||||||
"theme": "主题",
|
"theme": "主题",
|
||||||
"theme_selection": "主题选项",
|
"theme_selection": "主题选项",
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ FROM builder-cpu AS builder-rknn
|
|||||||
|
|
||||||
# Warning: 25GiB+ disk space required to pull this image
|
# Warning: 25GiB+ disk space required to pull this image
|
||||||
# TODO: find a way to reduce the image size
|
# TODO: find a way to reduce the image size
|
||||||
FROM rocm/dev-ubuntu-22.04:6.3.4-complete@sha256:1f7e92ca7e3a3785680473329ed1091fc99db3e90fcb3a1688f2933e870ed76b AS builder-rocm
|
FROM rocm/dev-ubuntu-22.04:6.4.3-complete@sha256:1f7e92ca7e3a3785680473329ed1091fc99db3e90fcb3a1688f2933e870ed76b AS builder-rocm
|
||||||
|
|
||||||
# renovate: datasource=github-releases depName=Microsoft/onnxruntime
|
# renovate: datasource=github-releases depName=Microsoft/onnxruntime
|
||||||
ARG ONNXRUNTIME_VERSION="v1.20.1"
|
ARG ONNXRUNTIME_VERSION="v1.20.1"
|
||||||
@@ -99,7 +99,7 @@ COPY --from=builder-cuda /usr/local/bin/python3 /usr/local/bin/python3
|
|||||||
COPY --from=builder-cuda /usr/local/lib/python3.11 /usr/local/lib/python3.11
|
COPY --from=builder-cuda /usr/local/lib/python3.11 /usr/local/lib/python3.11
|
||||||
COPY --from=builder-cuda /usr/local/lib/libpython3.11.so /usr/local/lib/libpython3.11.so
|
COPY --from=builder-cuda /usr/local/lib/libpython3.11.so /usr/local/lib/libpython3.11.so
|
||||||
|
|
||||||
FROM rocm/dev-ubuntu-22.04:6.3.4-complete@sha256:1f7e92ca7e3a3785680473329ed1091fc99db3e90fcb3a1688f2933e870ed76b AS prod-rocm
|
FROM rocm/dev-ubuntu-22.04:6.4.3-complete@sha256:1f7e92ca7e3a3785680473329ed1091fc99db3e90fcb3a1688f2933e870ed76b AS prod-rocm
|
||||||
|
|
||||||
FROM prod-cpu AS prod-armnn
|
FROM prod-cpu AS prod-armnn
|
||||||
|
|
||||||
|
|||||||
@@ -54,12 +54,6 @@ class BackgroundWorker(context: Context, params: WorkerParameters) :
|
|||||||
|
|
||||||
private var foregroundFuture: ListenableFuture<Void>? = null
|
private var foregroundFuture: ListenableFuture<Void>? = null
|
||||||
|
|
||||||
init {
|
|
||||||
if (!loader.initialized()) {
|
|
||||||
loader.startInitialization(ctx)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val NOTIFICATION_CHANNEL_ID = "immich::background_worker::notif"
|
private const val NOTIFICATION_CHANNEL_ID = "immich::background_worker::notif"
|
||||||
private const val NOTIFICATION_ID = 100
|
private const val NOTIFICATION_ID = 100
|
||||||
@@ -68,6 +62,10 @@ class BackgroundWorker(context: Context, params: WorkerParameters) :
|
|||||||
override fun startWork(): ListenableFuture<Result> {
|
override fun startWork(): ListenableFuture<Result> {
|
||||||
Log.i(TAG, "Starting background upload worker")
|
Log.i(TAG, "Starting background upload worker")
|
||||||
|
|
||||||
|
if (!loader.initialized()) {
|
||||||
|
loader.startInitialization(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
val notificationChannel = NotificationChannel(
|
val notificationChannel = NotificationChannel(
|
||||||
NOTIFICATION_CHANNEL_ID,
|
NOTIFICATION_CHANNEL_ID,
|
||||||
NOTIFICATION_CHANNEL_ID,
|
NOTIFICATION_CHANNEL_ID,
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ platform :android do
|
|||||||
task: 'bundle',
|
task: 'bundle',
|
||||||
build_type: 'Release',
|
build_type: 'Release',
|
||||||
properties: {
|
properties: {
|
||||||
"android.injected.version.code" => 3014,
|
"android.injected.version.code" => 3015,
|
||||||
"android.injected.version.name" => "1.142.0",
|
"android.injected.version.name" => "1.142.1",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab')
|
upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab')
|
||||||
|
|||||||
@@ -705,7 +705,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = Runner/RunnerProfile.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/RunnerProfile.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 223;
|
CURRENT_PROJECT_VERSION = 224;
|
||||||
CUSTOM_GROUP_ID = group.app.immich.share;
|
CUSTOM_GROUP_ID = group.app.immich.share;
|
||||||
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
@@ -849,7 +849,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 223;
|
CURRENT_PROJECT_VERSION = 224;
|
||||||
CUSTOM_GROUP_ID = group.app.immich.share;
|
CUSTOM_GROUP_ID = group.app.immich.share;
|
||||||
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
@@ -879,7 +879,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 223;
|
CURRENT_PROJECT_VERSION = 224;
|
||||||
CUSTOM_GROUP_ID = group.app.immich.share;
|
CUSTOM_GROUP_ID = group.app.immich.share;
|
||||||
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
@@ -913,7 +913,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = WidgetExtension/WidgetExtension.entitlements;
|
CODE_SIGN_ENTITLEMENTS = WidgetExtension/WidgetExtension.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 223;
|
CURRENT_PROJECT_VERSION = 224;
|
||||||
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
||||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu17;
|
GCC_C_LANGUAGE_STANDARD = gnu17;
|
||||||
@@ -956,7 +956,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = WidgetExtension/WidgetExtension.entitlements;
|
CODE_SIGN_ENTITLEMENTS = WidgetExtension/WidgetExtension.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 223;
|
CURRENT_PROJECT_VERSION = 224;
|
||||||
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
||||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu17;
|
GCC_C_LANGUAGE_STANDARD = gnu17;
|
||||||
@@ -996,7 +996,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = WidgetExtension/WidgetExtension.entitlements;
|
CODE_SIGN_ENTITLEMENTS = WidgetExtension/WidgetExtension.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 223;
|
CURRENT_PROJECT_VERSION = 224;
|
||||||
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
||||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu17;
|
GCC_C_LANGUAGE_STANDARD = gnu17;
|
||||||
@@ -1035,7 +1035,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements;
|
CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 223;
|
CURRENT_PROJECT_VERSION = 224;
|
||||||
CUSTOM_GROUP_ID = group.app.immich.share;
|
CUSTOM_GROUP_ID = group.app.immich.share;
|
||||||
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
||||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||||
@@ -1079,7 +1079,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements;
|
CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 223;
|
CURRENT_PROJECT_VERSION = 224;
|
||||||
CUSTOM_GROUP_ID = group.app.immich.share;
|
CUSTOM_GROUP_ID = group.app.immich.share;
|
||||||
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
||||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||||
@@ -1120,7 +1120,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements;
|
CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 223;
|
CURRENT_PROJECT_VERSION = 224;
|
||||||
CUSTOM_GROUP_ID = group.app.immich.share;
|
CUSTOM_GROUP_ID = group.app.immich.share;
|
||||||
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
||||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||||
|
|||||||
@@ -80,7 +80,7 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.142.0</string>
|
<string>1.142.1</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleURLTypes</key>
|
<key>CFBundleURLTypes</key>
|
||||||
@@ -107,7 +107,7 @@
|
|||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>223</string>
|
<string>224</string>
|
||||||
<key>FLTEnableImpeller</key>
|
<key>FLTEnableImpeller</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>ITSAppUsesNonExemptEncryption</key>
|
<key>ITSAppUsesNonExemptEncryption</key>
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ platform :ios do
|
|||||||
path: "./Runner.xcodeproj",
|
path: "./Runner.xcodeproj",
|
||||||
)
|
)
|
||||||
increment_version_number(
|
increment_version_number(
|
||||||
version_number: "1.142.0"
|
version_number: "1.142.1"
|
||||||
)
|
)
|
||||||
increment_build_number(
|
increment_build_number(
|
||||||
build_number: latest_testflight_build_number + 1,
|
build_number: latest_testflight_build_number + 1,
|
||||||
|
|||||||
@@ -1,22 +1,20 @@
|
|||||||
import 'package:immich_mobile/domain/models/album/local_album.model.dart';
|
import 'package:immich_mobile/domain/models/album/local_album.model.dart';
|
||||||
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
|
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
|
||||||
import 'package:immich_mobile/domain/models/exif.model.dart';
|
import 'package:immich_mobile/domain/models/exif.model.dart';
|
||||||
|
import 'package:immich_mobile/extensions/platform_extensions.dart';
|
||||||
import 'package:immich_mobile/infrastructure/repositories/local_asset.repository.dart';
|
import 'package:immich_mobile/infrastructure/repositories/local_asset.repository.dart';
|
||||||
import 'package:immich_mobile/infrastructure/repositories/remote_asset.repository.dart';
|
import 'package:immich_mobile/infrastructure/repositories/remote_asset.repository.dart';
|
||||||
import 'package:immich_mobile/infrastructure/utils/exif.converter.dart';
|
import 'package:immich_mobile/infrastructure/utils/exif.converter.dart';
|
||||||
import 'package:platform/platform.dart';
|
|
||||||
|
|
||||||
class AssetService {
|
class AssetService {
|
||||||
final RemoteAssetRepository _remoteAssetRepository;
|
final RemoteAssetRepository _remoteAssetRepository;
|
||||||
final DriftLocalAssetRepository _localAssetRepository;
|
final DriftLocalAssetRepository _localAssetRepository;
|
||||||
final Platform _platform;
|
|
||||||
|
|
||||||
const AssetService({
|
const AssetService({
|
||||||
required RemoteAssetRepository remoteAssetRepository,
|
required RemoteAssetRepository remoteAssetRepository,
|
||||||
required DriftLocalAssetRepository localAssetRepository,
|
required DriftLocalAssetRepository localAssetRepository,
|
||||||
}) : _remoteAssetRepository = remoteAssetRepository,
|
}) : _remoteAssetRepository = remoteAssetRepository,
|
||||||
_localAssetRepository = localAssetRepository,
|
_localAssetRepository = localAssetRepository;
|
||||||
_platform = const LocalPlatform();
|
|
||||||
|
|
||||||
Future<BaseAsset?> getAsset(BaseAsset asset) {
|
Future<BaseAsset?> getAsset(BaseAsset asset) {
|
||||||
final id = asset is LocalAsset ? asset.id : (asset as RemoteAsset).id;
|
final id = asset is LocalAsset ? asset.id : (asset as RemoteAsset).id;
|
||||||
@@ -71,7 +69,7 @@ class AssetService {
|
|||||||
width = exif?.width ?? asset.width?.toDouble();
|
width = exif?.width ?? asset.width?.toDouble();
|
||||||
height = exif?.height ?? asset.height?.toDouble();
|
height = exif?.height ?? asset.height?.toDouble();
|
||||||
} else if (asset is LocalAsset) {
|
} else if (asset is LocalAsset) {
|
||||||
isFlipped = _platform.isAndroid && (asset.orientation == 90 || asset.orientation == 270);
|
isFlipped = CurrentPlatform.isAndroid && (asset.orientation == 90 || asset.orientation == 270);
|
||||||
width = asset.width?.toDouble();
|
width = asset.width?.toDouble();
|
||||||
height = asset.height?.toDouble();
|
height = asset.height?.toDouble();
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1,29 +1,24 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:immich_mobile/domain/models/album/local_album.model.dart';
|
import 'package:immich_mobile/domain/models/album/local_album.model.dart';
|
||||||
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
|
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
|
||||||
|
import 'package:immich_mobile/extensions/platform_extensions.dart';
|
||||||
import 'package:immich_mobile/infrastructure/repositories/local_album.repository.dart';
|
import 'package:immich_mobile/infrastructure/repositories/local_album.repository.dart';
|
||||||
import 'package:immich_mobile/platform/native_sync_api.g.dart';
|
import 'package:immich_mobile/platform/native_sync_api.g.dart';
|
||||||
import 'package:immich_mobile/utils/datetime_helpers.dart';
|
import 'package:immich_mobile/utils/datetime_helpers.dart';
|
||||||
import 'package:immich_mobile/utils/diff.dart';
|
import 'package:immich_mobile/utils/diff.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:platform/platform.dart';
|
|
||||||
|
|
||||||
class LocalSyncService {
|
class LocalSyncService {
|
||||||
final DriftLocalAlbumRepository _localAlbumRepository;
|
final DriftLocalAlbumRepository _localAlbumRepository;
|
||||||
final NativeSyncApi _nativeSyncApi;
|
final NativeSyncApi _nativeSyncApi;
|
||||||
final Platform _platform;
|
|
||||||
final Logger _log = Logger("DeviceSyncService");
|
final Logger _log = Logger("DeviceSyncService");
|
||||||
|
|
||||||
LocalSyncService({
|
LocalSyncService({required DriftLocalAlbumRepository localAlbumRepository, required NativeSyncApi nativeSyncApi})
|
||||||
required DriftLocalAlbumRepository localAlbumRepository,
|
: _localAlbumRepository = localAlbumRepository,
|
||||||
required NativeSyncApi nativeSyncApi,
|
_nativeSyncApi = nativeSyncApi;
|
||||||
Platform? platform,
|
|
||||||
}) : _localAlbumRepository = localAlbumRepository,
|
|
||||||
_nativeSyncApi = nativeSyncApi,
|
|
||||||
_platform = platform ?? const LocalPlatform();
|
|
||||||
|
|
||||||
Future<void> sync({bool full = false}) async {
|
Future<void> sync({bool full = false}) async {
|
||||||
final Stopwatch stopwatch = Stopwatch()..start();
|
final Stopwatch stopwatch = Stopwatch()..start();
|
||||||
@@ -53,14 +48,14 @@ class LocalSyncService {
|
|||||||
final dbAlbums = await _localAlbumRepository.getAll();
|
final dbAlbums = await _localAlbumRepository.getAll();
|
||||||
// On Android, we need to sync all albums since it is not possible to
|
// On Android, we need to sync all albums since it is not possible to
|
||||||
// detect album deletions from the native side
|
// detect album deletions from the native side
|
||||||
if (_platform.isAndroid) {
|
if (CurrentPlatform.isAndroid) {
|
||||||
for (final album in dbAlbums) {
|
for (final album in dbAlbums) {
|
||||||
final deviceIds = await _nativeSyncApi.getAssetIdsForAlbum(album.id);
|
final deviceIds = await _nativeSyncApi.getAssetIdsForAlbum(album.id);
|
||||||
await _localAlbumRepository.syncDeletes(album.id, deviceIds);
|
await _localAlbumRepository.syncDeletes(album.id, deviceIds);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_platform.isIOS) {
|
if (CurrentPlatform.isIOS) {
|
||||||
// On iOS, we need to full sync albums that are marked as cloud as the delta sync
|
// On iOS, we need to full sync albums that are marked as cloud as the delta sync
|
||||||
// does not include changes for cloud albums. If ignoreIcloudAssets is enabled,
|
// does not include changes for cloud albums. If ignoreIcloudAssets is enabled,
|
||||||
// remove the albums from the local database from the previous sync
|
// remove the albums from the local database from the previous sync
|
||||||
|
|||||||
9
mobile/lib/extensions/platform_extensions.dart
Normal file
9
mobile/lib/extensions/platform_extensions.dart
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import 'package:flutter/foundation.dart';
|
||||||
|
|
||||||
|
extension CurrentPlatform on TargetPlatform {
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
static bool get isIOS => defaultTargetPlatform == TargetPlatform.iOS;
|
||||||
|
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
static bool get isAndroid => defaultTargetPlatform == TargetPlatform.android;
|
||||||
|
}
|
||||||
@@ -1,22 +1,20 @@
|
|||||||
import 'package:drift/drift.dart';
|
import 'package:drift/drift.dart';
|
||||||
import 'package:immich_mobile/domain/models/album/local_album.model.dart';
|
import 'package:immich_mobile/domain/models/album/local_album.model.dart';
|
||||||
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
|
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
|
||||||
|
import 'package:immich_mobile/extensions/platform_extensions.dart';
|
||||||
import 'package:immich_mobile/infrastructure/entities/local_album.entity.dart';
|
import 'package:immich_mobile/infrastructure/entities/local_album.entity.dart';
|
||||||
import 'package:immich_mobile/infrastructure/entities/local_album.entity.drift.dart';
|
import 'package:immich_mobile/infrastructure/entities/local_album.entity.drift.dart';
|
||||||
import 'package:immich_mobile/infrastructure/entities/local_album_asset.entity.drift.dart';
|
import 'package:immich_mobile/infrastructure/entities/local_album_asset.entity.drift.dart';
|
||||||
import 'package:immich_mobile/infrastructure/entities/local_asset.entity.dart';
|
import 'package:immich_mobile/infrastructure/entities/local_asset.entity.dart';
|
||||||
import 'package:immich_mobile/infrastructure/entities/local_asset.entity.drift.dart';
|
import 'package:immich_mobile/infrastructure/entities/local_asset.entity.drift.dart';
|
||||||
import 'package:immich_mobile/infrastructure/repositories/db.repository.dart';
|
import 'package:immich_mobile/infrastructure/repositories/db.repository.dart';
|
||||||
import 'package:platform/platform.dart';
|
|
||||||
|
|
||||||
enum SortLocalAlbumsBy { id, backupSelection, isIosSharedAlbum, name, assetCount, newestAsset }
|
enum SortLocalAlbumsBy { id, backupSelection, isIosSharedAlbum, name, assetCount, newestAsset }
|
||||||
|
|
||||||
class DriftLocalAlbumRepository extends DriftDatabaseRepository {
|
class DriftLocalAlbumRepository extends DriftDatabaseRepository {
|
||||||
final Drift _db;
|
final Drift _db;
|
||||||
final Platform _platform;
|
|
||||||
const DriftLocalAlbumRepository(this._db, {Platform? platform})
|
const DriftLocalAlbumRepository(this._db) : super(_db);
|
||||||
: _platform = platform ?? const LocalPlatform(),
|
|
||||||
super(_db);
|
|
||||||
|
|
||||||
Future<List<LocalAlbum>> getAll({Set<SortLocalAlbumsBy> sortBy = const {}}) {
|
Future<List<LocalAlbum>> getAll({Set<SortLocalAlbumsBy> sortBy = const {}}) {
|
||||||
final assetCount = _db.localAlbumAssetEntity.assetId.count();
|
final assetCount = _db.localAlbumAssetEntity.assetId.count();
|
||||||
@@ -61,7 +59,7 @@ class DriftLocalAlbumRepository extends DriftDatabaseRepository {
|
|||||||
// Remove all assets that are only in this particular album
|
// Remove all assets that are only in this particular album
|
||||||
// We cannot remove all assets in the album because they might be in other albums in iOS
|
// We cannot remove all assets in the album because they might be in other albums in iOS
|
||||||
// That is not the case on Android since asset <-> album has one:one mapping
|
// That is not the case on Android since asset <-> album has one:one mapping
|
||||||
final assetsToDelete = _platform.isIOS ? await _getUniqueAssetsInAlbum(albumId) : await getAssetIds(albumId);
|
final assetsToDelete = CurrentPlatform.isIOS ? await _getUniqueAssetsInAlbum(albumId) : await getAssetIds(albumId);
|
||||||
await _deleteAssets(assetsToDelete);
|
await _deleteAssets(assetsToDelete);
|
||||||
|
|
||||||
await _db.managers.localAlbumEntity
|
await _db.managers.localAlbumEntity
|
||||||
@@ -144,7 +142,7 @@ class DriftLocalAlbumRepository extends DriftDatabaseRepository {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (_platform.isAndroid) {
|
if (CurrentPlatform.isAndroid) {
|
||||||
// On Android, an asset can only be in one album
|
// On Android, an asset can only be in one album
|
||||||
// So, get the albums that are marked for deletion
|
// So, get the albums that are marked for deletion
|
||||||
// and delete all the assets that are in those albums
|
// and delete all the assets that are in those albums
|
||||||
@@ -265,7 +263,7 @@ class DriftLocalAlbumRepository extends DriftDatabaseRepository {
|
|||||||
return Future.value();
|
return Future.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_platform.isAndroid) {
|
if (CurrentPlatform.isAndroid) {
|
||||||
return _deleteAssets(assetIds);
|
return _deleteAssets(assetIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ import 'package:easy_localization/easy_localization.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:immich_mobile/domain/models/album/local_album.model.dart';
|
import 'package:immich_mobile/domain/models/album/local_album.model.dart';
|
||||||
|
import 'package:immich_mobile/domain/models/store.model.dart';
|
||||||
|
import 'package:immich_mobile/entities/store.entity.dart';
|
||||||
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
||||||
import 'package:immich_mobile/extensions/theme_extensions.dart';
|
import 'package:immich_mobile/extensions/theme_extensions.dart';
|
||||||
import 'package:immich_mobile/extensions/translate_extensions.dart';
|
import 'package:immich_mobile/extensions/translate_extensions.dart';
|
||||||
@@ -34,21 +36,6 @@ class _DriftBackupPageState extends ConsumerState<DriftBackupPage> {
|
|||||||
ref.read(driftBackupProvider.notifier).getBackupStatus(currentUser.id);
|
ref.read(driftBackupProvider.notifier).getBackupStatus(currentUser.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> startBackup() async {
|
|
||||||
final currentUser = ref.read(currentUserProvider);
|
|
||||||
if (currentUser == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
await ref.read(backgroundSyncProvider).syncRemote();
|
|
||||||
await ref.read(driftBackupProvider.notifier).getBackupStatus(currentUser.id);
|
|
||||||
await ref.read(driftBackupProvider.notifier).startBackup(currentUser.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> stopBackup() async {
|
|
||||||
await ref.read(driftBackupProvider.notifier).cancel();
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final selectedAlbum = ref
|
final selectedAlbum = ref
|
||||||
@@ -56,6 +43,24 @@ class _DriftBackupPageState extends ConsumerState<DriftBackupPage> {
|
|||||||
.where((album) => album.backupSelection == BackupSelection.selected)
|
.where((album) => album.backupSelection == BackupSelection.selected)
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
|
final backupNotifier = ref.read(driftBackupProvider.notifier);
|
||||||
|
final backgroundManager = ref.read(backgroundSyncProvider);
|
||||||
|
|
||||||
|
Future<void> startBackup() async {
|
||||||
|
final currentUser = Store.tryGet(StoreKey.currentUser);
|
||||||
|
if (currentUser == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await backgroundManager.syncRemote();
|
||||||
|
await backupNotifier.getBackupStatus(currentUser.id);
|
||||||
|
await backupNotifier.startBackup(currentUser.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> stopBackup() async {
|
||||||
|
await backupNotifier.cancel();
|
||||||
|
}
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
elevation: 0,
|
elevation: 0,
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import 'package:immich_mobile/entities/store.entity.dart';
|
|||||||
import 'package:immich_mobile/providers/auth.provider.dart';
|
import 'package:immich_mobile/providers/auth.provider.dart';
|
||||||
import 'package:immich_mobile/providers/background_sync.provider.dart';
|
import 'package:immich_mobile/providers/background_sync.provider.dart';
|
||||||
import 'package:immich_mobile/providers/backup/backup.provider.dart';
|
import 'package:immich_mobile/providers/backup/backup.provider.dart';
|
||||||
|
import 'package:immich_mobile/providers/backup/drift_backup.provider.dart';
|
||||||
import 'package:immich_mobile/providers/gallery_permission.provider.dart';
|
import 'package:immich_mobile/providers/gallery_permission.provider.dart';
|
||||||
import 'package:immich_mobile/providers/server_info.provider.dart';
|
import 'package:immich_mobile/providers/server_info.provider.dart';
|
||||||
import 'package:immich_mobile/providers/websocket.provider.dart';
|
import 'package:immich_mobile/providers/websocket.provider.dart';
|
||||||
@@ -22,6 +23,7 @@ class SplashScreenPage extends StatefulHookConsumerWidget {
|
|||||||
|
|
||||||
class SplashScreenPageState extends ConsumerState<SplashScreenPage> {
|
class SplashScreenPageState extends ConsumerState<SplashScreenPage> {
|
||||||
final log = Logger("SplashScreenPage");
|
final log = Logger("SplashScreenPage");
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
@@ -49,6 +51,7 @@ class SplashScreenPageState extends ConsumerState<SplashScreenPage> {
|
|||||||
final infoProvider = ref.read(serverInfoProvider.notifier);
|
final infoProvider = ref.read(serverInfoProvider.notifier);
|
||||||
final wsProvider = ref.read(websocketProvider.notifier);
|
final wsProvider = ref.read(websocketProvider.notifier);
|
||||||
final backgroundManager = ref.read(backgroundSyncProvider);
|
final backgroundManager = ref.read(backgroundSyncProvider);
|
||||||
|
final backupProvider = ref.read(driftBackupProvider.notifier);
|
||||||
|
|
||||||
ref.read(authProvider.notifier).saveAuthInfo(accessToken: accessToken).then(
|
ref.read(authProvider.notifier).saveAuthInfo(accessToken: accessToken).then(
|
||||||
(_) async {
|
(_) async {
|
||||||
@@ -57,13 +60,17 @@ class SplashScreenPageState extends ConsumerState<SplashScreenPage> {
|
|||||||
infoProvider.getServerInfo();
|
infoProvider.getServerInfo();
|
||||||
|
|
||||||
if (Store.isBetaTimelineEnabled) {
|
if (Store.isBetaTimelineEnabled) {
|
||||||
await backgroundManager.syncLocal();
|
await Future.wait([backgroundManager.syncLocal(), backgroundManager.syncRemote()]);
|
||||||
await backgroundManager.syncRemote();
|
await Future.wait([
|
||||||
await backgroundManager.hashAssets();
|
backgroundManager.hashAssets().then((_) {
|
||||||
}
|
_resumeBackup(backupProvider);
|
||||||
|
}),
|
||||||
|
_resumeBackup(backupProvider),
|
||||||
|
]);
|
||||||
|
|
||||||
if (Store.get(StoreKey.syncAlbums, false)) {
|
if (Store.get(StoreKey.syncAlbums, false)) {
|
||||||
await backgroundManager.syncLinkedAlbum();
|
await backgroundManager.syncLinkedAlbum();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
log.severe('Failed establishing connection to the server: $e');
|
log.severe('Failed establishing connection to the server: $e');
|
||||||
@@ -106,6 +113,17 @@ class SplashScreenPageState extends ConsumerState<SplashScreenPage> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> _resumeBackup(DriftBackupNotifier notifier) async {
|
||||||
|
final isEnableBackup = Store.get(StoreKey.enableBackup, false);
|
||||||
|
|
||||||
|
if (isEnableBackup) {
|
||||||
|
final currentUser = Store.tryGet(StoreKey.currentUser);
|
||||||
|
if (currentUser != null) {
|
||||||
|
notifier.handleBackupResume(currentUser.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return const Scaffold(
|
return const Scaffold(
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ class AlbumSelector extends ConsumerStatefulWidget {
|
|||||||
class _AlbumSelectorState extends ConsumerState<AlbumSelector> {
|
class _AlbumSelectorState extends ConsumerState<AlbumSelector> {
|
||||||
bool isGrid = false;
|
bool isGrid = false;
|
||||||
final searchController = TextEditingController();
|
final searchController = TextEditingController();
|
||||||
|
final menuController = MenuController();
|
||||||
final searchFocusNode = FocusNode();
|
final searchFocusNode = FocusNode();
|
||||||
List<RemoteAlbum> sortedAlbums = [];
|
List<RemoteAlbum> sortedAlbums = [];
|
||||||
List<RemoteAlbum> shownAlbums = [];
|
List<RemoteAlbum> shownAlbums = [];
|
||||||
@@ -157,34 +158,45 @@ class _AlbumSelectorState extends ConsumerState<AlbumSelector> {
|
|||||||
await sortAlbums();
|
await sortAlbums();
|
||||||
});
|
});
|
||||||
|
|
||||||
return MultiSliver(
|
return PopScope(
|
||||||
children: [
|
onPopInvokedWithResult: (didPop, _) {
|
||||||
_SearchBar(
|
menuController.close();
|
||||||
searchController: searchController,
|
},
|
||||||
searchFocusNode: searchFocusNode,
|
child: MultiSliver(
|
||||||
onSearch: onSearch,
|
children: [
|
||||||
filterMode: filter.mode,
|
_SearchBar(
|
||||||
onClearSearch: clearSearch,
|
searchController: searchController,
|
||||||
),
|
searchFocusNode: searchFocusNode,
|
||||||
_QuickFilterButtonRow(
|
onSearch: onSearch,
|
||||||
filterMode: filter.mode,
|
filterMode: filter.mode,
|
||||||
onChangeFilter: changeFilter,
|
onClearSearch: clearSearch,
|
||||||
onSearch: onSearch,
|
),
|
||||||
searchController: searchController,
|
_QuickFilterButtonRow(
|
||||||
),
|
filterMode: filter.mode,
|
||||||
_QuickSortAndViewMode(isGrid: isGrid, onToggleViewMode: toggleViewMode, onSortChanged: changeSort),
|
onChangeFilter: changeFilter,
|
||||||
isGrid
|
onSearch: onSearch,
|
||||||
? _AlbumGrid(albums: shownAlbums, userId: userId, onAlbumSelected: widget.onAlbumSelected)
|
searchController: searchController,
|
||||||
: _AlbumList(albums: shownAlbums, userId: userId, onAlbumSelected: widget.onAlbumSelected),
|
),
|
||||||
],
|
_QuickSortAndViewMode(
|
||||||
|
isGrid: isGrid,
|
||||||
|
onToggleViewMode: toggleViewMode,
|
||||||
|
onSortChanged: changeSort,
|
||||||
|
controller: menuController,
|
||||||
|
),
|
||||||
|
isGrid
|
||||||
|
? _AlbumGrid(albums: shownAlbums, userId: userId, onAlbumSelected: widget.onAlbumSelected)
|
||||||
|
: _AlbumList(albums: shownAlbums, userId: userId, onAlbumSelected: widget.onAlbumSelected),
|
||||||
|
],
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class _SortButton extends ConsumerStatefulWidget {
|
class _SortButton extends ConsumerStatefulWidget {
|
||||||
const _SortButton(this.onSortChanged);
|
const _SortButton(this.onSortChanged, {this.controller});
|
||||||
|
|
||||||
final Future<void> Function(AlbumSort) onSortChanged;
|
final Future<void> Function(AlbumSort) onSortChanged;
|
||||||
|
final MenuController? controller;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
ConsumerState<_SortButton> createState() => _SortButtonState();
|
ConsumerState<_SortButton> createState() => _SortButtonState();
|
||||||
@@ -220,6 +232,7 @@ class _SortButtonState extends ConsumerState<_SortButton> {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return MenuAnchor(
|
return MenuAnchor(
|
||||||
|
controller: widget.controller,
|
||||||
style: MenuStyle(
|
style: MenuStyle(
|
||||||
elevation: const WidgetStatePropertyAll(1),
|
elevation: const WidgetStatePropertyAll(1),
|
||||||
shape: WidgetStateProperty.all(
|
shape: WidgetStateProperty.all(
|
||||||
@@ -449,10 +462,16 @@ class _QuickFilterButton extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _QuickSortAndViewMode extends StatelessWidget {
|
class _QuickSortAndViewMode extends StatelessWidget {
|
||||||
const _QuickSortAndViewMode({required this.isGrid, required this.onToggleViewMode, required this.onSortChanged});
|
const _QuickSortAndViewMode({
|
||||||
|
required this.isGrid,
|
||||||
|
required this.onToggleViewMode,
|
||||||
|
required this.onSortChanged,
|
||||||
|
this.controller,
|
||||||
|
});
|
||||||
|
|
||||||
final bool isGrid;
|
final bool isGrid;
|
||||||
final VoidCallback onToggleViewMode;
|
final VoidCallback onToggleViewMode;
|
||||||
|
final MenuController? controller;
|
||||||
final Future<void> Function(AlbumSort) onSortChanged;
|
final Future<void> Function(AlbumSort) onSortChanged;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -463,7 +482,7 @@ class _QuickSortAndViewMode extends StatelessWidget {
|
|||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
_SortButton(onSortChanged),
|
_SortButton(onSortChanged, controller: controller),
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: Icon(isGrid ? Icons.view_list_outlined : Icons.grid_view_outlined, size: 24),
|
icon: Icon(isGrid ? Icons.view_list_outlined : Icons.grid_view_outlined, size: 24),
|
||||||
onPressed: onToggleViewMode,
|
onPressed: onToggleViewMode,
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import 'package:immich_mobile/domain/models/timeline.model.dart';
|
|||||||
import 'package:immich_mobile/domain/services/timeline.service.dart';
|
import 'package:immich_mobile/domain/services/timeline.service.dart';
|
||||||
import 'package:immich_mobile/domain/utils/event_stream.dart';
|
import 'package:immich_mobile/domain/utils/event_stream.dart';
|
||||||
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
||||||
|
import 'package:immich_mobile/extensions/platform_extensions.dart';
|
||||||
import 'package:immich_mobile/extensions/scroll_extensions.dart';
|
import 'package:immich_mobile/extensions/scroll_extensions.dart';
|
||||||
import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_stack.provider.dart';
|
import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_stack.provider.dart';
|
||||||
import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_stack.widget.dart';
|
import 'package:immich_mobile/presentation/widgets/asset_viewer/asset_stack.widget.dart';
|
||||||
@@ -30,7 +31,6 @@ import 'package:immich_mobile/providers/infrastructure/timeline.provider.dart';
|
|||||||
import 'package:immich_mobile/widgets/common/immich_loading_indicator.dart';
|
import 'package:immich_mobile/widgets/common/immich_loading_indicator.dart';
|
||||||
import 'package:immich_mobile/widgets/photo_view/photo_view.dart';
|
import 'package:immich_mobile/widgets/photo_view/photo_view.dart';
|
||||||
import 'package:immich_mobile/widgets/photo_view/photo_view_gallery.dart';
|
import 'package:immich_mobile/widgets/photo_view/photo_view_gallery.dart';
|
||||||
import 'package:platform/platform.dart';
|
|
||||||
|
|
||||||
@RoutePage()
|
@RoutePage()
|
||||||
class AssetViewerPage extends StatelessWidget {
|
class AssetViewerPage extends StatelessWidget {
|
||||||
@@ -53,10 +53,9 @@ class AssetViewerPage extends StatelessWidget {
|
|||||||
|
|
||||||
class AssetViewer extends ConsumerStatefulWidget {
|
class AssetViewer extends ConsumerStatefulWidget {
|
||||||
final int initialIndex;
|
final int initialIndex;
|
||||||
final Platform? platform;
|
|
||||||
final int? heroOffset;
|
final int? heroOffset;
|
||||||
|
|
||||||
const AssetViewer({super.key, required this.initialIndex, this.platform, this.heroOffset});
|
const AssetViewer({super.key, required this.initialIndex, this.heroOffset});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
ConsumerState createState() => _AssetViewerState();
|
ConsumerState createState() => _AssetViewerState();
|
||||||
@@ -86,7 +85,6 @@ class _AssetViewerState extends ConsumerState<AssetViewer> {
|
|||||||
PhotoViewControllerBase? viewController;
|
PhotoViewControllerBase? viewController;
|
||||||
StreamSubscription? reloadSubscription;
|
StreamSubscription? reloadSubscription;
|
||||||
|
|
||||||
late Platform platform;
|
|
||||||
late final int heroOffset;
|
late final int heroOffset;
|
||||||
late PhotoViewControllerValue initialPhotoViewState;
|
late PhotoViewControllerValue initialPhotoViewState;
|
||||||
bool? hasDraggedDown;
|
bool? hasDraggedDown;
|
||||||
@@ -114,7 +112,6 @@ class _AssetViewerState extends ConsumerState<AssetViewer> {
|
|||||||
super.initState();
|
super.initState();
|
||||||
assert(ref.read(currentAssetNotifier) != null, "Current asset should not be null when opening the AssetViewer");
|
assert(ref.read(currentAssetNotifier) != null, "Current asset should not be null when opening the AssetViewer");
|
||||||
pageController = PageController(initialPage: widget.initialIndex);
|
pageController = PageController(initialPage: widget.initialIndex);
|
||||||
platform = widget.platform ?? const LocalPlatform();
|
|
||||||
totalAssets = ref.read(timelineServiceProvider).totalAssets;
|
totalAssets = ref.read(timelineServiceProvider).totalAssets;
|
||||||
bottomSheetController = DraggableScrollableController();
|
bottomSheetController = DraggableScrollableController();
|
||||||
WidgetsBinding.instance.addPostFrameCallback(_onAssetInit);
|
WidgetsBinding.instance.addPostFrameCallback(_onAssetInit);
|
||||||
@@ -638,7 +635,7 @@ class _AssetViewerState extends ConsumerState<AssetViewer> {
|
|||||||
gaplessPlayback: true,
|
gaplessPlayback: true,
|
||||||
loadingBuilder: _placeholderBuilder,
|
loadingBuilder: _placeholderBuilder,
|
||||||
pageController: pageController,
|
pageController: pageController,
|
||||||
scrollPhysics: platform.isIOS
|
scrollPhysics: CurrentPlatform.isIOS
|
||||||
? const FastScrollPhysics() // Use bouncing physics for iOS
|
? const FastScrollPhysics() // Use bouncing physics for iOS
|
||||||
: const FastClampingScrollPhysics(), // Use heavy physics for Android
|
: const FastClampingScrollPhysics(), // Use heavy physics for Android
|
||||||
itemCount: totalAssets,
|
itemCount: totalAssets,
|
||||||
|
|||||||
@@ -98,16 +98,16 @@ class _GeneralBottomSheetState extends ConsumerState<GeneralBottomSheet> {
|
|||||||
const ShareActionButton(source: ActionSource.timeline),
|
const ShareActionButton(source: ActionSource.timeline),
|
||||||
if (multiselect.hasRemote) ...[
|
if (multiselect.hasRemote) ...[
|
||||||
const ShareLinkActionButton(source: ActionSource.timeline),
|
const ShareLinkActionButton(source: ActionSource.timeline),
|
||||||
const ArchiveActionButton(source: ActionSource.timeline),
|
|
||||||
const FavoriteActionButton(source: ActionSource.timeline),
|
|
||||||
const DownloadActionButton(source: ActionSource.timeline),
|
const DownloadActionButton(source: ActionSource.timeline),
|
||||||
|
isTrashEnable
|
||||||
|
? const TrashActionButton(source: ActionSource.timeline)
|
||||||
|
: const DeletePermanentActionButton(source: ActionSource.timeline),
|
||||||
|
const FavoriteActionButton(source: ActionSource.timeline),
|
||||||
|
const ArchiveActionButton(source: ActionSource.timeline),
|
||||||
const EditDateTimeActionButton(source: ActionSource.timeline),
|
const EditDateTimeActionButton(source: ActionSource.timeline),
|
||||||
const EditLocationActionButton(source: ActionSource.timeline),
|
const EditLocationActionButton(source: ActionSource.timeline),
|
||||||
const MoveToLockFolderActionButton(source: ActionSource.timeline),
|
const MoveToLockFolderActionButton(source: ActionSource.timeline),
|
||||||
if (multiselect.selectedAssets.length > 1) const StackActionButton(source: ActionSource.timeline),
|
if (multiselect.selectedAssets.length > 1) const StackActionButton(source: ActionSource.timeline),
|
||||||
isTrashEnable
|
|
||||||
? const TrashActionButton(source: ActionSource.timeline)
|
|
||||||
: const DeletePermanentActionButton(source: ActionSource.timeline),
|
|
||||||
const DeleteActionButton(source: ActionSource.timeline),
|
const DeleteActionButton(source: ActionSource.timeline),
|
||||||
],
|
],
|
||||||
if (multiselect.hasLocal || multiselect.hasMerged) const DeleteLocalActionButton(source: ActionSource.timeline),
|
if (multiselect.hasLocal || multiselect.hasMerged) const DeleteLocalActionButton(source: ActionSource.timeline),
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ class Scrubber extends ConsumerStatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<_Segment> _buildSegments({required List<Segment> layoutSegments, required double timelineHeight}) {
|
List<_Segment> _buildSegments({required List<Segment> layoutSegments, required double timelineHeight}) {
|
||||||
const double offsetThreshold = 20.0;
|
const double offsetThreshold = 40.0;
|
||||||
|
|
||||||
final segments = <_Segment>[];
|
final segments = <_Segment>[];
|
||||||
if (layoutSegments.isEmpty || layoutSegments.first.bucket is! TimeBucket) {
|
if (layoutSegments.isEmpty || layoutSegments.first.bucket is! TimeBucket) {
|
||||||
@@ -390,7 +390,7 @@ class _SegmentWidget extends StatelessWidget {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return IgnorePointer(
|
return IgnorePointer(
|
||||||
child: Container(
|
child: Container(
|
||||||
margin: const EdgeInsets.only(right: 12.0),
|
margin: const EdgeInsets.only(right: 36.0),
|
||||||
child: Material(
|
child: Material(
|
||||||
color: context.colorScheme.surface,
|
color: context.colorScheme.surface,
|
||||||
borderRadius: const BorderRadius.all(Radius.circular(16.0)),
|
borderRadius: const BorderRadius.all(Radius.circular(16.0)),
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ class Timeline extends StatelessWidget {
|
|||||||
this.showStorageIndicator,
|
this.showStorageIndicator,
|
||||||
this.withStack = false,
|
this.withStack = false,
|
||||||
this.appBar = const ImmichSliverAppBar(floating: true, pinned: false, snap: false),
|
this.appBar = const ImmichSliverAppBar(floating: true, pinned: false, snap: false),
|
||||||
this.bottomSheet = const GeneralBottomSheet(),
|
this.bottomSheet = const GeneralBottomSheet(minChildSize: 0.18),
|
||||||
this.groupBy,
|
this.groupBy,
|
||||||
this.withScrubber = true,
|
this.withScrubber = true,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:immich_mobile/domain/models/store.model.dart';
|
||||||
import 'package:immich_mobile/domain/services/log.service.dart';
|
import 'package:immich_mobile/domain/services/log.service.dart';
|
||||||
import 'package:immich_mobile/entities/store.entity.dart';
|
import 'package:immich_mobile/entities/store.entity.dart';
|
||||||
import 'package:immich_mobile/models/backup/backup_state.model.dart';
|
import 'package:immich_mobile/models/backup/backup_state.model.dart';
|
||||||
@@ -18,7 +19,6 @@ import 'package:immich_mobile/providers/memory.provider.dart';
|
|||||||
import 'package:immich_mobile/providers/notification_permission.provider.dart';
|
import 'package:immich_mobile/providers/notification_permission.provider.dart';
|
||||||
import 'package:immich_mobile/providers/server_info.provider.dart';
|
import 'package:immich_mobile/providers/server_info.provider.dart';
|
||||||
import 'package:immich_mobile/providers/tab.provider.dart';
|
import 'package:immich_mobile/providers/tab.provider.dart';
|
||||||
import 'package:immich_mobile/providers/user.provider.dart';
|
|
||||||
import 'package:immich_mobile/providers/websocket.provider.dart';
|
import 'package:immich_mobile/providers/websocket.provider.dart';
|
||||||
import 'package:immich_mobile/services/app_settings.service.dart';
|
import 'package:immich_mobile/services/app_settings.service.dart';
|
||||||
import 'package:immich_mobile/services/background.service.dart';
|
import 'package:immich_mobile/services/background.service.dart';
|
||||||
@@ -144,32 +144,42 @@ class AppLifeCycleNotifier extends StateNotifier<AppLifeCycleEnum> {
|
|||||||
|
|
||||||
final backgroundManager = _ref.read(backgroundSyncProvider);
|
final backgroundManager = _ref.read(backgroundSyncProvider);
|
||||||
final isAlbumLinkedSyncEnable = _ref.read(appSettingsServiceProvider).getSetting(AppSettingsEnum.syncAlbums);
|
final isAlbumLinkedSyncEnable = _ref.read(appSettingsServiceProvider).getSetting(AppSettingsEnum.syncAlbums);
|
||||||
final isEnableBackup = _ref.read(appSettingsServiceProvider).getSetting(AppSettingsEnum.enableBackup);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Run operations sequentially with state checks and error handling for each
|
await Future.wait([
|
||||||
await _safeRun(backgroundManager.syncLocal(), "syncLocal");
|
_safeRun(backgroundManager.syncLocal(), "syncLocal"),
|
||||||
await _safeRun(backgroundManager.syncRemote(), "syncRemote");
|
_safeRun(backgroundManager.syncRemote(), "syncRemote"),
|
||||||
await _safeRun(backgroundManager.hashAssets(), "hashAssets");
|
]);
|
||||||
|
|
||||||
|
await Future.wait([
|
||||||
|
_safeRun(backgroundManager.hashAssets(), "hashAssets").then((_) {
|
||||||
|
_resumeBackup();
|
||||||
|
}),
|
||||||
|
_resumeBackup(),
|
||||||
|
]);
|
||||||
|
|
||||||
if (isAlbumLinkedSyncEnable) {
|
if (isAlbumLinkedSyncEnable) {
|
||||||
await _safeRun(backgroundManager.syncLinkedAlbum(), "syncLinkedAlbum");
|
await _safeRun(backgroundManager.syncLinkedAlbum(), "syncLinkedAlbum");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle backup resume only if still active
|
|
||||||
if (isEnableBackup) {
|
|
||||||
final currentUser = _ref.read(currentUserProvider);
|
|
||||||
if (currentUser != null) {
|
|
||||||
await _safeRun(
|
|
||||||
_ref.read(driftBackupProvider.notifier).handleBackupResume(currentUser.id),
|
|
||||||
"handleBackupResume",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (e, stackTrace) {
|
} catch (e, stackTrace) {
|
||||||
_log.severe("Error during background sync", e, stackTrace);
|
_log.severe("Error during background sync", e, stackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> _resumeBackup() async {
|
||||||
|
final isEnableBackup = _ref.read(appSettingsServiceProvider).getSetting(AppSettingsEnum.enableBackup);
|
||||||
|
|
||||||
|
if (isEnableBackup) {
|
||||||
|
final currentUser = Store.tryGet(StoreKey.currentUser);
|
||||||
|
if (currentUser != null) {
|
||||||
|
await _safeRun(
|
||||||
|
_ref.read(driftBackupProvider.notifier).handleBackupResume(currentUser.id),
|
||||||
|
"handleBackupResume",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Helper method to check if operations should continue
|
// Helper method to check if operations should continue
|
||||||
bool _shouldContinueOperation() {
|
bool _shouldContinueOperation() {
|
||||||
return [AppLifeCycleEnum.resumed, AppLifeCycleEnum.active].contains(state) &&
|
return [AppLifeCycleEnum.resumed, AppLifeCycleEnum.active].contains(state) &&
|
||||||
|
|||||||
@@ -97,29 +97,11 @@ class _ImmichLogoWithText extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
Builder(
|
Builder(
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
return Badge(
|
return Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 4),
|
padding: const EdgeInsets.only(top: 3.0),
|
||||||
backgroundColor: context.primaryColor,
|
child: SvgPicture.asset(
|
||||||
alignment: Alignment.centerRight,
|
context.isDarkTheme ? 'assets/immich-logo-inline-dark.svg' : 'assets/immich-logo-inline-light.svg',
|
||||||
offset: const Offset(16, -8),
|
height: 40,
|
||||||
label: Text(
|
|
||||||
'β',
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 11,
|
|
||||||
color: context.colorScheme.onPrimary,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
fontFamily: 'OverpassMono',
|
|
||||||
height: 1.2,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.only(top: 3.0),
|
|
||||||
child: SvgPicture.asset(
|
|
||||||
context.isDarkTheme
|
|
||||||
? 'assets/immich-logo-inline-dark.svg'
|
|
||||||
: 'assets/immich-logo-inline-light.svg',
|
|
||||||
height: 40,
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -28,10 +28,10 @@ class BetaTimelineListTile extends ConsumerWidget {
|
|||||||
context: context,
|
context: context,
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
title: value ? const Text("Enable Beta Timeline") : const Text("Disable Beta Timeline"),
|
title: value ? const Text("Enable New Timeline") : const Text("Disable New Timeline"),
|
||||||
content: value
|
content: value
|
||||||
? const Text("Are you sure you want to enable the beta timeline?")
|
? const Text("Are you sure you want to enable the new timeline?")
|
||||||
: const Text("Are you sure you want to disable the beta timeline?"),
|
: const Text("Are you sure you want to disable the new timeline?"),
|
||||||
actions: [
|
actions: [
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
@@ -58,8 +58,7 @@ class BetaTimelineListTile extends ConsumerWidget {
|
|||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(left: 4.0),
|
padding: const EdgeInsets.only(left: 4.0),
|
||||||
child: ListTile(
|
child: ListTile(
|
||||||
title: Text("advanced_settings_beta_timeline_title".t(context: context)),
|
title: Text("new_timeline".t(context: context)),
|
||||||
subtitle: Text("advanced_settings_beta_timeline_subtitle".t(context: context)),
|
|
||||||
trailing: Switch.adaptive(
|
trailing: Switch.adaptive(
|
||||||
value: betaTimelineValue,
|
value: betaTimelineValue,
|
||||||
onChanged: onSwitchChanged,
|
onChanged: onSwitchChanged,
|
||||||
|
|||||||
2
mobile/openapi/README.md
generated
2
mobile/openapi/README.md
generated
@@ -3,7 +3,7 @@ Immich API
|
|||||||
|
|
||||||
This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
|
This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
|
||||||
|
|
||||||
- API version: 1.142.0
|
- API version: 1.142.1
|
||||||
- Generator version: 7.8.0
|
- Generator version: 7.8.0
|
||||||
- Build package: org.openapitools.codegen.languages.DartClientCodegen
|
- Build package: org.openapitools.codegen.languages.DartClientCodegen
|
||||||
|
|
||||||
|
|||||||
@@ -1429,7 +1429,7 @@ packages:
|
|||||||
source: hosted
|
source: hosted
|
||||||
version: "5.0.1"
|
version: "5.0.1"
|
||||||
platform:
|
platform:
|
||||||
dependency: "direct main"
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: platform
|
name: platform
|
||||||
sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
|
sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ name: immich_mobile
|
|||||||
description: Immich - selfhosted backup media file on mobile phone
|
description: Immich - selfhosted backup media file on mobile phone
|
||||||
|
|
||||||
publish_to: 'none'
|
publish_to: 'none'
|
||||||
version: 1.142.0+3014
|
version: 1.142.1+3015
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=3.8.0 <4.0.0'
|
sdk: '>=3.8.0 <4.0.0'
|
||||||
@@ -57,7 +57,6 @@ dependencies:
|
|||||||
photo_manager: ^3.6.4
|
photo_manager: ^3.6.4
|
||||||
photo_manager_image_provider: ^2.2.0
|
photo_manager_image_provider: ^2.2.0
|
||||||
pinput: ^5.0.1
|
pinput: ^5.0.1
|
||||||
platform: ^3.1.6
|
|
||||||
punycode: ^1.0.0
|
punycode: ^1.0.0
|
||||||
riverpod_annotation: ^2.6.1
|
riverpod_annotation: ^2.6.1
|
||||||
scrollable_positioned_list: ^0.3.8
|
scrollable_positioned_list: ^0.3.8
|
||||||
|
|||||||
@@ -9858,7 +9858,7 @@
|
|||||||
"info": {
|
"info": {
|
||||||
"title": "Immich",
|
"title": "Immich",
|
||||||
"description": "Immich API",
|
"description": "Immich API",
|
||||||
"version": "1.142.0",
|
"version": "1.142.1",
|
||||||
"contact": {}
|
"contact": {}
|
||||||
},
|
},
|
||||||
"tags": [],
|
"tags": [],
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@immich/sdk",
|
"name": "@immich/sdk",
|
||||||
"version": "1.142.0",
|
"version": "1.142.1",
|
||||||
"description": "Auto-generated TypeScript SDK for the Immich API",
|
"description": "Auto-generated TypeScript SDK for the Immich API",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./build/index.js",
|
"main": "./build/index.js",
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
"@oazapfts/runtime": "^1.0.2"
|
"@oazapfts/runtime": "^1.0.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^22.18.0",
|
"@types/node": "^22.18.1",
|
||||||
"typescript": "^5.3.3"
|
"typescript": "^5.3.3"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Immich
|
* Immich
|
||||||
* 1.142.0
|
* 1.142.1
|
||||||
* DO NOT MODIFY - This file has been generated using oazapfts.
|
* DO NOT MODIFY - This file has been generated using oazapfts.
|
||||||
* See https://www.npmjs.com/package/oazapfts
|
* See https://www.npmjs.com/package/oazapfts
|
||||||
*/
|
*/
|
||||||
|
|||||||
363
pnpm-lock.yaml
generated
363
pnpm-lock.yaml
generated
@@ -63,7 +63,7 @@ importers:
|
|||||||
specifier: ^4.13.1
|
specifier: ^4.13.1
|
||||||
version: 4.13.4
|
version: 4.13.4
|
||||||
'@types/node':
|
'@types/node':
|
||||||
specifier: ^22.18.0
|
specifier: ^22.18.1
|
||||||
version: 22.18.1
|
version: 22.18.1
|
||||||
'@vitest/coverage-v8':
|
'@vitest/coverage-v8':
|
||||||
specifier: ^3.0.0
|
specifier: ^3.0.0
|
||||||
@@ -109,10 +109,10 @@ importers:
|
|||||||
version: 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
|
version: 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
|
||||||
vite:
|
vite:
|
||||||
specifier: ^7.0.0
|
specifier: ^7.0.0
|
||||||
version: 7.1.2(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
version: 7.1.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
vite-tsconfig-paths:
|
vite-tsconfig-paths:
|
||||||
specifier: ^5.0.0
|
specifier: ^5.0.0
|
||||||
version: 5.1.4(typescript@5.9.2)(vite@7.1.2(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
version: 5.1.4(typescript@5.9.2)(vite@7.1.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
||||||
vitest:
|
vitest:
|
||||||
specifier: ^3.0.0
|
specifier: ^3.0.0
|
||||||
version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
@@ -214,7 +214,7 @@ importers:
|
|||||||
specifier: ^3.4.2
|
specifier: ^3.4.2
|
||||||
version: 3.7.1
|
version: 3.7.1
|
||||||
'@types/node':
|
'@types/node':
|
||||||
specifier: ^22.18.0
|
specifier: ^22.18.1
|
||||||
version: 22.18.1
|
version: 22.18.1
|
||||||
'@types/oidc-provider':
|
'@types/oidc-provider':
|
||||||
specifier: ^9.0.0
|
specifier: ^9.0.0
|
||||||
@@ -296,7 +296,7 @@ importers:
|
|||||||
version: 1.0.4
|
version: 1.0.4
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@types/node':
|
'@types/node':
|
||||||
specifier: ^22.18.0
|
specifier: ^22.18.1
|
||||||
version: 22.18.1
|
version: 22.18.1
|
||||||
typescript:
|
typescript:
|
||||||
specifier: ^5.3.3
|
specifier: ^5.3.3
|
||||||
@@ -585,7 +585,7 @@ importers:
|
|||||||
specifier: ^2.0.0
|
specifier: ^2.0.0
|
||||||
version: 2.0.0
|
version: 2.0.0
|
||||||
'@types/node':
|
'@types/node':
|
||||||
specifier: ^22.18.0
|
specifier: ^22.18.1
|
||||||
version: 22.18.1
|
version: 22.18.1
|
||||||
'@types/nodemailer':
|
'@types/nodemailer':
|
||||||
specifier: ^6.4.14
|
specifier: ^6.4.14
|
||||||
@@ -667,10 +667,10 @@ importers:
|
|||||||
version: 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
|
version: 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
|
||||||
unplugin-swc:
|
unplugin-swc:
|
||||||
specifier: ^1.4.5
|
specifier: ^1.4.5
|
||||||
version: 1.5.5(@swc/core@1.13.3(@swc/helpers@0.5.17))(rollup@4.46.3)
|
version: 1.5.5(@swc/core@1.13.3(@swc/helpers@0.5.17))(rollup@4.50.1)
|
||||||
vite-tsconfig-paths:
|
vite-tsconfig-paths:
|
||||||
specifier: ^5.0.0
|
specifier: ^5.0.0
|
||||||
version: 5.1.4(typescript@5.9.2)(vite@7.1.2(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
version: 5.1.4(typescript@5.9.2)(vite@7.1.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
||||||
vitest:
|
vitest:
|
||||||
specifier: ^3.0.0
|
specifier: ^3.0.0
|
||||||
version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
@@ -794,25 +794,25 @@ importers:
|
|||||||
version: 3.1.2
|
version: 3.1.2
|
||||||
'@sveltejs/adapter-static':
|
'@sveltejs/adapter-static':
|
||||||
specifier: ^3.0.8
|
specifier: ^3.0.8
|
||||||
version: 3.0.9(@sveltejs/kit@2.27.1(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))
|
version: 3.0.9(@sveltejs/kit@2.27.1(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))
|
||||||
'@sveltejs/enhanced-img':
|
'@sveltejs/enhanced-img':
|
||||||
specifier: ^0.8.0
|
specifier: ^0.8.0
|
||||||
version: 0.8.1(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(rollup@4.46.3)(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
version: 0.8.1(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(rollup@4.50.1)(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
||||||
'@sveltejs/kit':
|
'@sveltejs/kit':
|
||||||
specifier: ^2.27.1
|
specifier: ^2.27.1
|
||||||
version: 2.27.1(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
version: 2.27.1(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
||||||
'@sveltejs/vite-plugin-svelte':
|
'@sveltejs/vite-plugin-svelte':
|
||||||
specifier: 6.1.2
|
specifier: 6.1.2
|
||||||
version: 6.1.2(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
version: 6.1.2(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
||||||
'@tailwindcss/vite':
|
'@tailwindcss/vite':
|
||||||
specifier: ^4.1.7
|
specifier: ^4.1.7
|
||||||
version: 4.1.12(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
version: 4.1.12(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
||||||
'@testing-library/jest-dom':
|
'@testing-library/jest-dom':
|
||||||
specifier: ^6.4.2
|
specifier: ^6.4.2
|
||||||
version: 6.7.0
|
version: 6.7.0
|
||||||
'@testing-library/svelte':
|
'@testing-library/svelte':
|
||||||
specifier: ^5.2.8
|
specifier: ^5.2.8
|
||||||
version: 5.2.8(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
version: 5.2.8(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
||||||
'@testing-library/user-event':
|
'@testing-library/user-event':
|
||||||
specifier: ^14.5.2
|
specifier: ^14.5.2
|
||||||
version: 14.6.1(@testing-library/dom@10.4.0)
|
version: 14.6.1(@testing-library/dom@10.4.0)
|
||||||
@@ -878,7 +878,7 @@ importers:
|
|||||||
version: 3.4.0(prettier@3.6.2)(svelte@5.35.5)
|
version: 3.4.0(prettier@3.6.2)(svelte@5.35.5)
|
||||||
rollup-plugin-visualizer:
|
rollup-plugin-visualizer:
|
||||||
specifier: ^6.0.0
|
specifier: ^6.0.0
|
||||||
version: 6.0.3(rollup@4.46.3)
|
version: 6.0.3(rollup@4.50.1)
|
||||||
svelte:
|
svelte:
|
||||||
specifier: 5.35.5
|
specifier: 5.35.5
|
||||||
version: 5.35.5
|
version: 5.35.5
|
||||||
@@ -899,7 +899,7 @@ importers:
|
|||||||
version: 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
|
version: 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
|
||||||
vite:
|
vite:
|
||||||
specifier: ^7.1.2
|
specifier: ^7.1.2
|
||||||
version: 7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
version: 7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
vitest:
|
vitest:
|
||||||
specifier: ^3.0.0
|
specifier: ^3.0.0
|
||||||
version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
@@ -1561,8 +1561,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-vDVrlmRAY8z9Ul/HxT+8ceAru95LQgkSKiXkSYZvqtbkPSfhZJgpRp45Cldbh1GJ1kxzQkI70AqyrTI58KpaWQ==}
|
resolution: {integrity: sha512-vDVrlmRAY8z9Ul/HxT+8ceAru95LQgkSKiXkSYZvqtbkPSfhZJgpRp45Cldbh1GJ1kxzQkI70AqyrTI58KpaWQ==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
|
|
||||||
'@babel/runtime@7.28.3':
|
'@babel/runtime@7.28.4':
|
||||||
resolution: {integrity: sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==}
|
resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
|
|
||||||
'@babel/template@7.27.2':
|
'@babel/template@7.27.2':
|
||||||
@@ -3538,103 +3538,108 @@ packages:
|
|||||||
rollup:
|
rollup:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rollup/rollup-android-arm-eabi@4.46.3':
|
'@rollup/rollup-android-arm-eabi@4.50.1':
|
||||||
resolution: {integrity: sha512-UmTdvXnLlqQNOCJnyksjPs1G4GqXNGW1LrzCe8+8QoaLhhDeTXYBgJ3k6x61WIhlHX2U+VzEJ55TtIjR/HTySA==}
|
resolution: {integrity: sha512-HJXwzoZN4eYTdD8bVV22DN8gsPCAj3V20NHKOs8ezfXanGpmVPR7kalUHd+Y31IJp9stdB87VKPFbsGY3H/2ag==}
|
||||||
cpu: [arm]
|
cpu: [arm]
|
||||||
os: [android]
|
os: [android]
|
||||||
|
|
||||||
'@rollup/rollup-android-arm64@4.46.3':
|
'@rollup/rollup-android-arm64@4.50.1':
|
||||||
resolution: {integrity: sha512-8NoxqLpXm7VyeI0ocidh335D6OKT0UJ6fHdnIxf3+6oOerZZc+O7r+UhvROji6OspyPm+rrIdb1gTXtVIqn+Sg==}
|
resolution: {integrity: sha512-PZlsJVcjHfcH53mOImyt3bc97Ep3FJDXRpk9sMdGX0qgLmY0EIWxCag6EigerGhLVuL8lDVYNnSo8qnTElO4xw==}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [android]
|
os: [android]
|
||||||
|
|
||||||
'@rollup/rollup-darwin-arm64@4.46.3':
|
'@rollup/rollup-darwin-arm64@4.50.1':
|
||||||
resolution: {integrity: sha512-csnNavqZVs1+7/hUKtgjMECsNG2cdB8F7XBHP6FfQjqhjF8rzMzb3SLyy/1BG7YSfQ+bG75Ph7DyedbUqwq1rA==}
|
resolution: {integrity: sha512-xc6i2AuWh++oGi4ylOFPmzJOEeAa2lJeGUGb4MudOtgfyyjr4UPNK+eEWTPLvmPJIY/pgw6ssFIox23SyrkkJw==}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
'@rollup/rollup-darwin-x64@4.46.3':
|
'@rollup/rollup-darwin-x64@4.50.1':
|
||||||
resolution: {integrity: sha512-r2MXNjbuYabSIX5yQqnT8SGSQ26XQc8fmp6UhlYJd95PZJkQD1u82fWP7HqvGUf33IsOC6qsiV+vcuD4SDP6iw==}
|
resolution: {integrity: sha512-2ofU89lEpDYhdLAbRdeyz/kX3Y2lpYc6ShRnDjY35bZhd2ipuDMDi6ZTQ9NIag94K28nFMofdnKeHR7BT0CATw==}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
'@rollup/rollup-freebsd-arm64@4.46.3':
|
'@rollup/rollup-freebsd-arm64@4.50.1':
|
||||||
resolution: {integrity: sha512-uluObTmgPJDuJh9xqxyr7MV61Imq+0IvVsAlWyvxAaBSNzCcmZlhfYcRhCdMaCsy46ccZa7vtDDripgs9Jkqsw==}
|
resolution: {integrity: sha512-wOsE6H2u6PxsHY/BeFHA4VGQN3KUJFZp7QJBmDYI983fgxq5Th8FDkVuERb2l9vDMs1D5XhOrhBrnqcEY6l8ZA==}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [freebsd]
|
os: [freebsd]
|
||||||
|
|
||||||
'@rollup/rollup-freebsd-x64@4.46.3':
|
'@rollup/rollup-freebsd-x64@4.50.1':
|
||||||
resolution: {integrity: sha512-AVJXEq9RVHQnejdbFvh1eWEoobohUYN3nqJIPI4mNTMpsyYN01VvcAClxflyk2HIxvLpRcRggpX1m9hkXkpC/A==}
|
resolution: {integrity: sha512-A/xeqaHTlKbQggxCqispFAcNjycpUEHP52mwMQZUNqDUJFFYtPHCXS1VAG29uMlDzIVr+i00tSFWFLivMcoIBQ==}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [freebsd]
|
os: [freebsd]
|
||||||
|
|
||||||
'@rollup/rollup-linux-arm-gnueabihf@4.46.3':
|
'@rollup/rollup-linux-arm-gnueabihf@4.50.1':
|
||||||
resolution: {integrity: sha512-byyflM+huiwHlKi7VHLAYTKr67X199+V+mt1iRgJenAI594vcmGGddWlu6eHujmcdl6TqSNnvqaXJqZdnEWRGA==}
|
resolution: {integrity: sha512-54v4okehwl5TaSIkpp97rAHGp7t3ghinRd/vyC1iXqXMfjYUTm7TfYmCzXDoHUPTTf36L8pr0E7YsD3CfB3ZDg==}
|
||||||
cpu: [arm]
|
cpu: [arm]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@rollup/rollup-linux-arm-musleabihf@4.46.3':
|
'@rollup/rollup-linux-arm-musleabihf@4.50.1':
|
||||||
resolution: {integrity: sha512-aLm3NMIjr4Y9LklrH5cu7yybBqoVCdr4Nvnm8WB7PKCn34fMCGypVNpGK0JQWdPAzR/FnoEoFtlRqZbBBLhVoQ==}
|
resolution: {integrity: sha512-p/LaFyajPN/0PUHjv8TNyxLiA7RwmDoVY3flXHPSzqrGcIp/c2FjwPPP5++u87DGHtw+5kSH5bCJz0mvXngYxw==}
|
||||||
cpu: [arm]
|
cpu: [arm]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@rollup/rollup-linux-arm64-gnu@4.46.3':
|
'@rollup/rollup-linux-arm64-gnu@4.50.1':
|
||||||
resolution: {integrity: sha512-VtilE6eznJRDIoFOzaagQodUksTEfLIsvXymS+UdJiSXrPW7Ai+WG4uapAc3F7Hgs791TwdGh4xyOzbuzIZrnw==}
|
resolution: {integrity: sha512-2AbMhFFkTo6Ptna1zO7kAXXDLi7H9fGTbVaIq2AAYO7yzcAsuTNWPHhb2aTA6GPiP+JXh85Y8CiS54iZoj4opw==}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@rollup/rollup-linux-arm64-musl@4.46.3':
|
'@rollup/rollup-linux-arm64-musl@4.50.1':
|
||||||
resolution: {integrity: sha512-dG3JuS6+cRAL0GQ925Vppafi0qwZnkHdPeuZIxIPXqkCLP02l7ka+OCyBoDEv8S+nKHxfjvjW4OZ7hTdHkx8/w==}
|
resolution: {integrity: sha512-Cgef+5aZwuvesQNw9eX7g19FfKX5/pQRIyhoXLCiBOrWopjo7ycfB292TX9MDcDijiuIJlx1IzJz3IoCPfqs9w==}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@rollup/rollup-linux-loongarch64-gnu@4.46.3':
|
'@rollup/rollup-linux-loongarch64-gnu@4.50.1':
|
||||||
resolution: {integrity: sha512-iU8DxnxEKJptf8Vcx4XvAUdpkZfaz0KWfRrnIRrOndL0SvzEte+MTM7nDH4A2Now4FvTZ01yFAgj6TX/mZl8hQ==}
|
resolution: {integrity: sha512-RPhTwWMzpYYrHrJAS7CmpdtHNKtt2Ueo+BlLBjfZEhYBhK00OsEqM08/7f+eohiF6poe0YRDDd8nAvwtE/Y62Q==}
|
||||||
cpu: [loong64]
|
cpu: [loong64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@rollup/rollup-linux-ppc64-gnu@4.46.3':
|
'@rollup/rollup-linux-ppc64-gnu@4.50.1':
|
||||||
resolution: {integrity: sha512-VrQZp9tkk0yozJoQvQcqlWiqaPnLM6uY1qPYXvukKePb0fqaiQtOdMJSxNFUZFsGw5oA5vvVokjHrx8a9Qsz2A==}
|
resolution: {integrity: sha512-eSGMVQw9iekut62O7eBdbiccRguuDgiPMsw++BVUg+1K7WjZXHOg/YOT9SWMzPZA+w98G+Fa1VqJgHZOHHnY0Q==}
|
||||||
cpu: [ppc64]
|
cpu: [ppc64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@rollup/rollup-linux-riscv64-gnu@4.46.3':
|
'@rollup/rollup-linux-riscv64-gnu@4.50.1':
|
||||||
resolution: {integrity: sha512-uf2eucWSUb+M7b0poZ/08LsbcRgaDYL8NCGjUeFMwCWFwOuFcZ8D9ayPl25P3pl+D2FH45EbHdfyUesQ2Lt9wA==}
|
resolution: {integrity: sha512-S208ojx8a4ciIPrLgazF6AgdcNJzQE4+S9rsmOmDJkusvctii+ZvEuIC4v/xFqzbuP8yDjn73oBlNDgF6YGSXQ==}
|
||||||
cpu: [riscv64]
|
cpu: [riscv64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@rollup/rollup-linux-riscv64-musl@4.46.3':
|
'@rollup/rollup-linux-riscv64-musl@4.50.1':
|
||||||
resolution: {integrity: sha512-7tnUcDvN8DHm/9ra+/nF7lLzYHDeODKKKrh6JmZejbh1FnCNZS8zMkZY5J4sEipy2OW1d1Ncc4gNHUd0DLqkSg==}
|
resolution: {integrity: sha512-3Ag8Ls1ggqkGUvSZWYcdgFwriy2lWo+0QlYgEFra/5JGtAd6C5Hw59oojx1DeqcA2Wds2ayRgvJ4qxVTzCHgzg==}
|
||||||
cpu: [riscv64]
|
cpu: [riscv64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@rollup/rollup-linux-s390x-gnu@4.46.3':
|
'@rollup/rollup-linux-s390x-gnu@4.50.1':
|
||||||
resolution: {integrity: sha512-MUpAOallJim8CsJK+4Lc9tQzlfPbHxWDrGXZm2z6biaadNpvh3a5ewcdat478W+tXDoUiHwErX/dOql7ETcLqg==}
|
resolution: {integrity: sha512-t9YrKfaxCYe7l7ldFERE1BRg/4TATxIg+YieHQ966jwvo7ddHJxPj9cNFWLAzhkVsbBvNA4qTbPVNsZKBO4NSg==}
|
||||||
cpu: [s390x]
|
cpu: [s390x]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@rollup/rollup-linux-x64-gnu@4.46.3':
|
'@rollup/rollup-linux-x64-gnu@4.50.1':
|
||||||
resolution: {integrity: sha512-F42IgZI4JicE2vM2PWCe0N5mR5vR0gIdORPqhGQ32/u1S1v3kLtbZ0C/mi9FFk7C5T0PgdeyWEPajPjaUpyoKg==}
|
resolution: {integrity: sha512-MCgtFB2+SVNuQmmjHf+wfI4CMxy3Tk8XjA5Z//A0AKD7QXUYFMQcns91K6dEHBvZPCnhJSyDWLApk40Iq/H3tA==}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@rollup/rollup-linux-x64-musl@4.46.3':
|
'@rollup/rollup-linux-x64-musl@4.50.1':
|
||||||
resolution: {integrity: sha512-oLc+JrwwvbimJUInzx56Q3ujL3Kkhxehg7O1gWAYzm8hImCd5ld1F2Gry5YDjR21MNb5WCKhC9hXgU7rRlyegQ==}
|
resolution: {integrity: sha512-nEvqG+0jeRmqaUMuwzlfMKwcIVffy/9KGbAGyoa26iu6eSngAYQ512bMXuqqPrlTyfqdlB9FVINs93j534UJrg==}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@rollup/rollup-win32-arm64-msvc@4.46.3':
|
'@rollup/rollup-openharmony-arm64@4.50.1':
|
||||||
resolution: {integrity: sha512-lOrQ+BVRstruD1fkWg9yjmumhowR0oLAAzavB7yFSaGltY8klttmZtCLvOXCmGE9mLIn8IBV/IFrQOWz5xbFPg==}
|
resolution: {integrity: sha512-RDsLm+phmT3MJd9SNxA9MNuEAO/J2fhW8GXk62G/B4G7sLVumNFbRwDL6v5NrESb48k+QMqdGbHgEtfU0LCpbA==}
|
||||||
|
cpu: [arm64]
|
||||||
|
os: [openharmony]
|
||||||
|
|
||||||
|
'@rollup/rollup-win32-arm64-msvc@4.50.1':
|
||||||
|
resolution: {integrity: sha512-hpZB/TImk2FlAFAIsoElM3tLzq57uxnGYwplg6WDyAxbYczSi8O2eQ+H2Lx74504rwKtZ3N2g4bCUkiamzS6TQ==}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
'@rollup/rollup-win32-ia32-msvc@4.46.3':
|
'@rollup/rollup-win32-ia32-msvc@4.50.1':
|
||||||
resolution: {integrity: sha512-vvrVKPRS4GduGR7VMH8EylCBqsDcw6U+/0nPDuIjXQRbHJc6xOBj+frx8ksfZAh6+Fptw5wHrN7etlMmQnPQVg==}
|
resolution: {integrity: sha512-SXjv8JlbzKM0fTJidX4eVsH+Wmnp0/WcD8gJxIZyR6Gay5Qcsmdbi9zVtnbkGPG8v2vMR1AD06lGWy5FLMcG7A==}
|
||||||
cpu: [ia32]
|
cpu: [ia32]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
'@rollup/rollup-win32-x64-msvc@4.46.3':
|
'@rollup/rollup-win32-x64-msvc@4.50.1':
|
||||||
resolution: {integrity: sha512-fi3cPxCnu3ZeM3EwKZPgXbWoGzm2XHgB/WShKI81uj8wG0+laobmqy5wbgEwzstlbLu4MyO8C19FyhhWseYKNQ==}
|
resolution: {integrity: sha512-StxAO/8ts62KZVRAm4JZYq9+NqNsV7RvimNK+YM7ry//zebEH6meuugqW/P5OFUCjyQgui+9fUxT6d5NShvMvA==}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
@@ -8360,8 +8365,8 @@ packages:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
webpack: ^4.0.0 || ^5.0.0
|
webpack: ^4.0.0 || ^5.0.0
|
||||||
|
|
||||||
nwsapi@2.2.21:
|
nwsapi@2.2.22:
|
||||||
resolution: {integrity: sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==}
|
resolution: {integrity: sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==}
|
||||||
|
|
||||||
nypm@0.6.0:
|
nypm@0.6.0:
|
||||||
resolution: {integrity: sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg==}
|
resolution: {integrity: sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg==}
|
||||||
@@ -9746,8 +9751,8 @@ packages:
|
|||||||
rollup:
|
rollup:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
rollup@4.46.3:
|
rollup@4.50.1:
|
||||||
resolution: {integrity: sha512-RZn2XTjXb8t5g13f5YclGoilU/kwT696DIkY3sywjdZidNSi3+vseaQov7D7BZXVJCPv3pDWUN69C78GGbXsKw==}
|
resolution: {integrity: sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==}
|
||||||
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
|
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
@@ -10512,8 +10517,8 @@ packages:
|
|||||||
tinyexec@0.3.2:
|
tinyexec@0.3.2:
|
||||||
resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
|
resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
|
||||||
|
|
||||||
tinyglobby@0.2.14:
|
tinyglobby@0.2.15:
|
||||||
resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
|
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
|
||||||
engines: {node: '>=12.0.0'}
|
engines: {node: '>=12.0.0'}
|
||||||
|
|
||||||
tinypool@1.1.1:
|
tinypool@1.1.1:
|
||||||
@@ -10950,8 +10955,8 @@ packages:
|
|||||||
vite:
|
vite:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
vite@7.1.2:
|
vite@7.1.5:
|
||||||
resolution: {integrity: sha512-J0SQBPlQiEXAF7tajiH+rUooJPo0l8KQgyg4/aMunNtrOa7bwuZJsJbDWzeljqQpgftxuq5yNJxQ91O9ts29UQ==}
|
resolution: {integrity: sha512-4cKBO9wR75r0BeIWWWId9XK9Lj6La5X846Zw9dFfzMRw38IlTk2iCcUt6hsyiDRcPidc55ZParFYDXi0nXOeLQ==}
|
||||||
engines: {node: ^20.19.0 || >=22.12.0}
|
engines: {node: ^20.19.0 || >=22.12.0}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -12230,7 +12235,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
core-js-pure: 3.43.0
|
core-js-pure: 3.43.0
|
||||||
|
|
||||||
'@babel/runtime@7.28.3': {}
|
'@babel/runtime@7.28.4': {}
|
||||||
|
|
||||||
'@babel/template@7.27.2':
|
'@babel/template@7.27.2':
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -12552,7 +12557,7 @@ snapshots:
|
|||||||
'@babel/preset-env': 7.27.2(@babel/core@7.27.7)
|
'@babel/preset-env': 7.27.2(@babel/core@7.27.7)
|
||||||
'@babel/preset-react': 7.27.1(@babel/core@7.27.7)
|
'@babel/preset-react': 7.27.1(@babel/core@7.27.7)
|
||||||
'@babel/preset-typescript': 7.27.1(@babel/core@7.27.7)
|
'@babel/preset-typescript': 7.27.1(@babel/core@7.27.7)
|
||||||
'@babel/runtime': 7.28.3
|
'@babel/runtime': 7.28.4
|
||||||
'@babel/runtime-corejs3': 7.27.6
|
'@babel/runtime-corejs3': 7.27.6
|
||||||
'@babel/traverse': 7.28.3
|
'@babel/traverse': 7.28.3
|
||||||
'@docusaurus/logger': 3.8.1
|
'@docusaurus/logger': 3.8.1
|
||||||
@@ -14788,72 +14793,75 @@ snapshots:
|
|||||||
react: 18.3.1
|
react: 18.3.1
|
||||||
react-redux: 7.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
react-redux: 7.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
|
|
||||||
'@rollup/pluginutils@5.2.0(rollup@4.46.3)':
|
'@rollup/pluginutils@5.2.0(rollup@4.50.1)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/estree': 1.0.8
|
'@types/estree': 1.0.8
|
||||||
estree-walker: 2.0.2
|
estree-walker: 2.0.2
|
||||||
picomatch: 4.0.3
|
picomatch: 4.0.3
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
rollup: 4.46.3
|
rollup: 4.50.1
|
||||||
|
|
||||||
'@rollup/rollup-android-arm-eabi@4.46.3':
|
'@rollup/rollup-android-arm-eabi@4.50.1':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rollup/rollup-android-arm64@4.46.3':
|
'@rollup/rollup-android-arm64@4.50.1':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rollup/rollup-darwin-arm64@4.46.3':
|
'@rollup/rollup-darwin-arm64@4.50.1':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rollup/rollup-darwin-x64@4.46.3':
|
'@rollup/rollup-darwin-x64@4.50.1':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rollup/rollup-freebsd-arm64@4.46.3':
|
'@rollup/rollup-freebsd-arm64@4.50.1':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rollup/rollup-freebsd-x64@4.46.3':
|
'@rollup/rollup-freebsd-x64@4.50.1':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rollup/rollup-linux-arm-gnueabihf@4.46.3':
|
'@rollup/rollup-linux-arm-gnueabihf@4.50.1':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rollup/rollup-linux-arm-musleabihf@4.46.3':
|
'@rollup/rollup-linux-arm-musleabihf@4.50.1':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rollup/rollup-linux-arm64-gnu@4.46.3':
|
'@rollup/rollup-linux-arm64-gnu@4.50.1':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rollup/rollup-linux-arm64-musl@4.46.3':
|
'@rollup/rollup-linux-arm64-musl@4.50.1':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rollup/rollup-linux-loongarch64-gnu@4.46.3':
|
'@rollup/rollup-linux-loongarch64-gnu@4.50.1':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rollup/rollup-linux-ppc64-gnu@4.46.3':
|
'@rollup/rollup-linux-ppc64-gnu@4.50.1':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rollup/rollup-linux-riscv64-gnu@4.46.3':
|
'@rollup/rollup-linux-riscv64-gnu@4.50.1':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rollup/rollup-linux-riscv64-musl@4.46.3':
|
'@rollup/rollup-linux-riscv64-musl@4.50.1':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rollup/rollup-linux-s390x-gnu@4.46.3':
|
'@rollup/rollup-linux-s390x-gnu@4.50.1':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rollup/rollup-linux-x64-gnu@4.46.3':
|
'@rollup/rollup-linux-x64-gnu@4.50.1':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rollup/rollup-linux-x64-musl@4.46.3':
|
'@rollup/rollup-linux-x64-musl@4.50.1':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rollup/rollup-win32-arm64-msvc@4.46.3':
|
'@rollup/rollup-openharmony-arm64@4.50.1':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rollup/rollup-win32-ia32-msvc@4.46.3':
|
'@rollup/rollup-win32-arm64-msvc@4.50.1':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rollup/rollup-win32-x64-msvc@4.46.3':
|
'@rollup/rollup-win32-ia32-msvc@4.50.1':
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@rollup/rollup-win32-x64-msvc@4.50.1':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@scarf/scarf@1.4.0': {}
|
'@scarf/scarf@1.4.0': {}
|
||||||
@@ -14879,7 +14887,7 @@ snapshots:
|
|||||||
|
|
||||||
'@slorber/react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
'@slorber/react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/runtime': 7.28.3
|
'@babel/runtime': 7.28.4
|
||||||
invariant: 2.2.4
|
invariant: 2.2.4
|
||||||
prop-types: 15.8.1
|
prop-types: 15.8.1
|
||||||
react: 18.3.1
|
react: 18.3.1
|
||||||
@@ -14910,29 +14918,29 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
acorn: 8.15.0
|
acorn: 8.15.0
|
||||||
|
|
||||||
'@sveltejs/adapter-static@3.0.9(@sveltejs/kit@2.27.1(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))':
|
'@sveltejs/adapter-static@3.0.9(@sveltejs/kit@2.27.1(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@sveltejs/kit': 2.27.1(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
'@sveltejs/kit': 2.27.1(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
||||||
|
|
||||||
'@sveltejs/enhanced-img@0.8.1(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(rollup@4.46.3)(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))':
|
'@sveltejs/enhanced-img@0.8.1(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(rollup@4.50.1)(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@sveltejs/vite-plugin-svelte': 6.1.2(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
'@sveltejs/vite-plugin-svelte': 6.1.2(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
||||||
magic-string: 0.30.17
|
magic-string: 0.30.17
|
||||||
sharp: 0.34.3
|
sharp: 0.34.3
|
||||||
svelte: 5.35.5
|
svelte: 5.35.5
|
||||||
svelte-parse-markup: 0.1.5(svelte@5.35.5)
|
svelte-parse-markup: 0.1.5(svelte@5.35.5)
|
||||||
vite: 7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
vite: 7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
vite-imagetools: 8.0.0(rollup@4.46.3)
|
vite-imagetools: 8.0.0(rollup@4.50.1)
|
||||||
zimmerframe: 1.1.2
|
zimmerframe: 1.1.2
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- rollup
|
- rollup
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@sveltejs/kit@2.27.1(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))':
|
'@sveltejs/kit@2.27.1(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@standard-schema/spec': 1.0.0
|
'@standard-schema/spec': 1.0.0
|
||||||
'@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0)
|
'@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0)
|
||||||
'@sveltejs/vite-plugin-svelte': 6.1.2(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
'@sveltejs/vite-plugin-svelte': 6.1.2(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
||||||
'@types/cookie': 0.6.0
|
'@types/cookie': 0.6.0
|
||||||
acorn: 8.15.0
|
acorn: 8.15.0
|
||||||
cookie: 0.6.0
|
cookie: 0.6.0
|
||||||
@@ -14945,27 +14953,27 @@ snapshots:
|
|||||||
set-cookie-parser: 2.7.1
|
set-cookie-parser: 2.7.1
|
||||||
sirv: 3.0.1
|
sirv: 3.0.1
|
||||||
svelte: 5.35.5
|
svelte: 5.35.5
|
||||||
vite: 7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
vite: 7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
|
|
||||||
'@sveltejs/vite-plugin-svelte-inspector@5.0.0(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))':
|
'@sveltejs/vite-plugin-svelte-inspector@5.0.0(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@sveltejs/vite-plugin-svelte': 6.1.2(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
'@sveltejs/vite-plugin-svelte': 6.1.2(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
||||||
debug: 4.4.1
|
debug: 4.4.1
|
||||||
svelte: 5.35.5
|
svelte: 5.35.5
|
||||||
vite: 7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
vite: 7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))':
|
'@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@sveltejs/vite-plugin-svelte-inspector': 5.0.0(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
'@sveltejs/vite-plugin-svelte-inspector': 5.0.0(@sveltejs/vite-plugin-svelte@6.1.2(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)))(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
||||||
debug: 4.4.1
|
debug: 4.4.1
|
||||||
deepmerge: 4.3.1
|
deepmerge: 4.3.1
|
||||||
kleur: 4.1.5
|
kleur: 4.1.5
|
||||||
magic-string: 0.30.17
|
magic-string: 0.30.17
|
||||||
svelte: 5.35.5
|
svelte: 5.35.5
|
||||||
vite: 7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
vite: 7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
vitefu: 1.1.1(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
vitefu: 1.1.1(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
@@ -15187,17 +15195,17 @@ snapshots:
|
|||||||
'@tailwindcss/oxide-win32-arm64-msvc': 4.1.12
|
'@tailwindcss/oxide-win32-arm64-msvc': 4.1.12
|
||||||
'@tailwindcss/oxide-win32-x64-msvc': 4.1.12
|
'@tailwindcss/oxide-win32-x64-msvc': 4.1.12
|
||||||
|
|
||||||
'@tailwindcss/vite@4.1.12(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))':
|
'@tailwindcss/vite@4.1.12(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tailwindcss/node': 4.1.12
|
'@tailwindcss/node': 4.1.12
|
||||||
'@tailwindcss/oxide': 4.1.12
|
'@tailwindcss/oxide': 4.1.12
|
||||||
tailwindcss: 4.1.12
|
tailwindcss: 4.1.12
|
||||||
vite: 7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
vite: 7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
|
|
||||||
'@testing-library/dom@10.4.0':
|
'@testing-library/dom@10.4.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/code-frame': 7.27.1
|
'@babel/code-frame': 7.27.1
|
||||||
'@babel/runtime': 7.28.3
|
'@babel/runtime': 7.28.4
|
||||||
'@types/aria-query': 5.0.4
|
'@types/aria-query': 5.0.4
|
||||||
aria-query: 5.3.0
|
aria-query: 5.3.0
|
||||||
chalk: 4.1.2
|
chalk: 4.1.2
|
||||||
@@ -15214,12 +15222,12 @@ snapshots:
|
|||||||
picocolors: 1.1.1
|
picocolors: 1.1.1
|
||||||
redent: 3.0.0
|
redent: 3.0.0
|
||||||
|
|
||||||
'@testing-library/svelte@5.2.8(svelte@5.35.5)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))':
|
'@testing-library/svelte@5.2.8(svelte@5.35.5)(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@testing-library/dom': 10.4.0
|
'@testing-library/dom': 10.4.0
|
||||||
svelte: 5.35.5
|
svelte: 5.35.5
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
vite: 7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
vite: 7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
|
|
||||||
'@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)':
|
'@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)':
|
||||||
@@ -15874,21 +15882,21 @@ snapshots:
|
|||||||
chai: 5.2.0
|
chai: 5.2.0
|
||||||
tinyrainbow: 2.0.0
|
tinyrainbow: 2.0.0
|
||||||
|
|
||||||
'@vitest/mocker@3.2.4(vite@7.1.2(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))':
|
'@vitest/mocker@3.2.4(vite@7.1.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vitest/spy': 3.2.4
|
'@vitest/spy': 3.2.4
|
||||||
estree-walker: 3.0.3
|
estree-walker: 3.0.3
|
||||||
magic-string: 0.30.17
|
magic-string: 0.30.17
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
vite: 7.1.2(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
vite: 7.1.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
|
|
||||||
'@vitest/mocker@3.2.4(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))':
|
'@vitest/mocker@3.2.4(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vitest/spy': 3.2.4
|
'@vitest/spy': 3.2.4
|
||||||
estree-walker: 3.0.3
|
estree-walker: 3.0.3
|
||||||
magic-string: 0.30.17
|
magic-string: 0.30.17
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
vite: 7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
vite: 7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
|
|
||||||
'@vitest/pretty-format@3.2.4':
|
'@vitest/pretty-format@3.2.4':
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -18787,7 +18795,7 @@ snapshots:
|
|||||||
|
|
||||||
history@4.10.1:
|
history@4.10.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/runtime': 7.28.3
|
'@babel/runtime': 7.28.4
|
||||||
loose-envify: 1.4.0
|
loose-envify: 1.4.0
|
||||||
resolve-pathname: 3.0.0
|
resolve-pathname: 3.0.0
|
||||||
tiny-invariant: 1.3.3
|
tiny-invariant: 1.3.3
|
||||||
@@ -19314,7 +19322,7 @@ snapshots:
|
|||||||
http-proxy-agent: 5.0.0
|
http-proxy-agent: 5.0.0
|
||||||
https-proxy-agent: 5.0.1
|
https-proxy-agent: 5.0.1
|
||||||
is-potential-custom-element-name: 1.0.1
|
is-potential-custom-element-name: 1.0.1
|
||||||
nwsapi: 2.2.21
|
nwsapi: 2.2.22
|
||||||
parse5: 7.3.0
|
parse5: 7.3.0
|
||||||
saxes: 6.0.0
|
saxes: 6.0.0
|
||||||
symbol-tree: 3.2.4
|
symbol-tree: 3.2.4
|
||||||
@@ -19343,7 +19351,7 @@ snapshots:
|
|||||||
http-proxy-agent: 7.0.2
|
http-proxy-agent: 7.0.2
|
||||||
https-proxy-agent: 7.0.6
|
https-proxy-agent: 7.0.6
|
||||||
is-potential-custom-element-name: 1.0.1
|
is-potential-custom-element-name: 1.0.1
|
||||||
nwsapi: 2.2.21
|
nwsapi: 2.2.22
|
||||||
parse5: 7.3.0
|
parse5: 7.3.0
|
||||||
rrweb-cssom: 0.8.0
|
rrweb-cssom: 0.8.0
|
||||||
saxes: 6.0.0
|
saxes: 6.0.0
|
||||||
@@ -19373,7 +19381,7 @@ snapshots:
|
|||||||
http-proxy-agent: 7.0.2
|
http-proxy-agent: 7.0.2
|
||||||
https-proxy-agent: 7.0.6
|
https-proxy-agent: 7.0.6
|
||||||
is-potential-custom-element-name: 1.0.1
|
is-potential-custom-element-name: 1.0.1
|
||||||
nwsapi: 2.2.21
|
nwsapi: 2.2.22
|
||||||
parse5: 7.3.0
|
parse5: 7.3.0
|
||||||
rrweb-cssom: 0.8.0
|
rrweb-cssom: 0.8.0
|
||||||
saxes: 6.0.0
|
saxes: 6.0.0
|
||||||
@@ -20610,7 +20618,7 @@ snapshots:
|
|||||||
proc-log: 5.0.0
|
proc-log: 5.0.0
|
||||||
semver: 7.7.2
|
semver: 7.7.2
|
||||||
tar: 7.4.3
|
tar: 7.4.3
|
||||||
tinyglobby: 0.2.14
|
tinyglobby: 0.2.15
|
||||||
which: 5.0.0
|
which: 5.0.0
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
@@ -20668,7 +20676,7 @@ snapshots:
|
|||||||
schema-utils: 3.3.0
|
schema-utils: 3.3.0
|
||||||
webpack: 5.100.2
|
webpack: 5.100.2
|
||||||
|
|
||||||
nwsapi@2.2.21:
|
nwsapi@2.2.22:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
nypm@0.6.0:
|
nypm@0.6.0:
|
||||||
@@ -21866,7 +21874,7 @@ snapshots:
|
|||||||
|
|
||||||
react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.100.2):
|
react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.100.2):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/runtime': 7.28.3
|
'@babel/runtime': 7.28.4
|
||||||
react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)'
|
react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)'
|
||||||
webpack: 5.100.2
|
webpack: 5.100.2
|
||||||
|
|
||||||
@@ -21878,7 +21886,7 @@ snapshots:
|
|||||||
|
|
||||||
react-redux@7.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
|
react-redux@7.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/runtime': 7.28.3
|
'@babel/runtime': 7.28.4
|
||||||
'@types/react-redux': 7.1.34
|
'@types/react-redux': 7.1.34
|
||||||
hoist-non-react-statics: 3.3.2
|
hoist-non-react-statics: 3.3.2
|
||||||
loose-envify: 1.4.0
|
loose-envify: 1.4.0
|
||||||
@@ -21890,13 +21898,13 @@ snapshots:
|
|||||||
|
|
||||||
react-router-config@5.1.1(react-router@5.3.4(react@18.3.1))(react@18.3.1):
|
react-router-config@5.1.1(react-router@5.3.4(react@18.3.1))(react@18.3.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/runtime': 7.28.3
|
'@babel/runtime': 7.28.4
|
||||||
react: 18.3.1
|
react: 18.3.1
|
||||||
react-router: 5.3.4(react@18.3.1)
|
react-router: 5.3.4(react@18.3.1)
|
||||||
|
|
||||||
react-router-dom@5.3.4(react@18.3.1):
|
react-router-dom@5.3.4(react@18.3.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/runtime': 7.28.3
|
'@babel/runtime': 7.28.4
|
||||||
history: 4.10.1
|
history: 4.10.1
|
||||||
loose-envify: 1.4.0
|
loose-envify: 1.4.0
|
||||||
prop-types: 15.8.1
|
prop-types: 15.8.1
|
||||||
@@ -21907,7 +21915,7 @@ snapshots:
|
|||||||
|
|
||||||
react-router@5.3.4(react@18.3.1):
|
react-router@5.3.4(react@18.3.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/runtime': 7.28.3
|
'@babel/runtime': 7.28.4
|
||||||
history: 4.10.1
|
history: 4.10.1
|
||||||
hoist-non-react-statics: 3.3.2
|
hoist-non-react-statics: 3.3.2
|
||||||
loose-envify: 1.4.0
|
loose-envify: 1.4.0
|
||||||
@@ -22017,7 +22025,7 @@ snapshots:
|
|||||||
|
|
||||||
redux@4.2.1:
|
redux@4.2.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/runtime': 7.28.3
|
'@babel/runtime': 7.28.4
|
||||||
|
|
||||||
reflect-metadata@0.2.2: {}
|
reflect-metadata@0.2.2: {}
|
||||||
|
|
||||||
@@ -22228,39 +22236,40 @@ snapshots:
|
|||||||
|
|
||||||
robust-predicates@3.0.2: {}
|
robust-predicates@3.0.2: {}
|
||||||
|
|
||||||
rollup-plugin-visualizer@6.0.3(rollup@4.46.3):
|
rollup-plugin-visualizer@6.0.3(rollup@4.50.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
open: 8.4.2
|
open: 8.4.2
|
||||||
picomatch: 4.0.3
|
picomatch: 4.0.3
|
||||||
source-map: 0.7.4
|
source-map: 0.7.4
|
||||||
yargs: 17.7.2
|
yargs: 17.7.2
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
rollup: 4.46.3
|
rollup: 4.50.1
|
||||||
|
|
||||||
rollup@4.46.3:
|
rollup@4.50.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/estree': 1.0.8
|
'@types/estree': 1.0.8
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@rollup/rollup-android-arm-eabi': 4.46.3
|
'@rollup/rollup-android-arm-eabi': 4.50.1
|
||||||
'@rollup/rollup-android-arm64': 4.46.3
|
'@rollup/rollup-android-arm64': 4.50.1
|
||||||
'@rollup/rollup-darwin-arm64': 4.46.3
|
'@rollup/rollup-darwin-arm64': 4.50.1
|
||||||
'@rollup/rollup-darwin-x64': 4.46.3
|
'@rollup/rollup-darwin-x64': 4.50.1
|
||||||
'@rollup/rollup-freebsd-arm64': 4.46.3
|
'@rollup/rollup-freebsd-arm64': 4.50.1
|
||||||
'@rollup/rollup-freebsd-x64': 4.46.3
|
'@rollup/rollup-freebsd-x64': 4.50.1
|
||||||
'@rollup/rollup-linux-arm-gnueabihf': 4.46.3
|
'@rollup/rollup-linux-arm-gnueabihf': 4.50.1
|
||||||
'@rollup/rollup-linux-arm-musleabihf': 4.46.3
|
'@rollup/rollup-linux-arm-musleabihf': 4.50.1
|
||||||
'@rollup/rollup-linux-arm64-gnu': 4.46.3
|
'@rollup/rollup-linux-arm64-gnu': 4.50.1
|
||||||
'@rollup/rollup-linux-arm64-musl': 4.46.3
|
'@rollup/rollup-linux-arm64-musl': 4.50.1
|
||||||
'@rollup/rollup-linux-loongarch64-gnu': 4.46.3
|
'@rollup/rollup-linux-loongarch64-gnu': 4.50.1
|
||||||
'@rollup/rollup-linux-ppc64-gnu': 4.46.3
|
'@rollup/rollup-linux-ppc64-gnu': 4.50.1
|
||||||
'@rollup/rollup-linux-riscv64-gnu': 4.46.3
|
'@rollup/rollup-linux-riscv64-gnu': 4.50.1
|
||||||
'@rollup/rollup-linux-riscv64-musl': 4.46.3
|
'@rollup/rollup-linux-riscv64-musl': 4.50.1
|
||||||
'@rollup/rollup-linux-s390x-gnu': 4.46.3
|
'@rollup/rollup-linux-s390x-gnu': 4.50.1
|
||||||
'@rollup/rollup-linux-x64-gnu': 4.46.3
|
'@rollup/rollup-linux-x64-gnu': 4.50.1
|
||||||
'@rollup/rollup-linux-x64-musl': 4.46.3
|
'@rollup/rollup-linux-x64-musl': 4.50.1
|
||||||
'@rollup/rollup-win32-arm64-msvc': 4.46.3
|
'@rollup/rollup-openharmony-arm64': 4.50.1
|
||||||
'@rollup/rollup-win32-ia32-msvc': 4.46.3
|
'@rollup/rollup-win32-arm64-msvc': 4.50.1
|
||||||
'@rollup/rollup-win32-x64-msvc': 4.46.3
|
'@rollup/rollup-win32-ia32-msvc': 4.50.1
|
||||||
|
'@rollup/rollup-win32-x64-msvc': 4.50.1
|
||||||
fsevents: 2.3.3
|
fsevents: 2.3.3
|
||||||
|
|
||||||
router@2.2.0:
|
router@2.2.0:
|
||||||
@@ -23281,7 +23290,7 @@ snapshots:
|
|||||||
|
|
||||||
tinyexec@0.3.2: {}
|
tinyexec@0.3.2: {}
|
||||||
|
|
||||||
tinyglobby@0.2.14:
|
tinyglobby@0.2.15:
|
||||||
dependencies:
|
dependencies:
|
||||||
fdir: 6.5.0(picomatch@4.0.3)
|
fdir: 6.5.0(picomatch@4.0.3)
|
||||||
picomatch: 4.0.3
|
picomatch: 4.0.3
|
||||||
@@ -23571,9 +23580,9 @@ snapshots:
|
|||||||
|
|
||||||
unpipe@1.0.0: {}
|
unpipe@1.0.0: {}
|
||||||
|
|
||||||
unplugin-swc@1.5.5(@swc/core@1.13.3(@swc/helpers@0.5.17))(rollup@4.46.3):
|
unplugin-swc@1.5.5(@swc/core@1.13.3(@swc/helpers@0.5.17))(rollup@4.50.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@rollup/pluginutils': 5.2.0(rollup@4.46.3)
|
'@rollup/pluginutils': 5.2.0(rollup@4.50.1)
|
||||||
'@swc/core': 1.13.3(@swc/helpers@0.5.17)
|
'@swc/core': 1.13.3(@swc/helpers@0.5.17)
|
||||||
load-tsconfig: 0.2.5
|
load-tsconfig: 0.2.5
|
||||||
unplugin: 2.3.5
|
unplugin: 2.3.5
|
||||||
@@ -23713,9 +23722,9 @@ snapshots:
|
|||||||
'@types/unist': 3.0.3
|
'@types/unist': 3.0.3
|
||||||
vfile-message: 4.0.2
|
vfile-message: 4.0.2
|
||||||
|
|
||||||
vite-imagetools@8.0.0(rollup@4.46.3):
|
vite-imagetools@8.0.0(rollup@4.50.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@rollup/pluginutils': 5.2.0(rollup@4.46.3)
|
'@rollup/pluginutils': 5.2.0(rollup@4.50.1)
|
||||||
imagetools-core: 8.0.0
|
imagetools-core: 8.0.0
|
||||||
sharp: 0.34.3
|
sharp: 0.34.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@@ -23728,7 +23737,7 @@ snapshots:
|
|||||||
debug: 4.4.1
|
debug: 4.4.1
|
||||||
es-module-lexer: 1.7.0
|
es-module-lexer: 1.7.0
|
||||||
pathe: 2.0.3
|
pathe: 2.0.3
|
||||||
vite: 7.1.2(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
vite: 7.1.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@types/node'
|
- '@types/node'
|
||||||
- jiti
|
- jiti
|
||||||
@@ -23749,7 +23758,7 @@ snapshots:
|
|||||||
debug: 4.4.1
|
debug: 4.4.1
|
||||||
es-module-lexer: 1.7.0
|
es-module-lexer: 1.7.0
|
||||||
pathe: 2.0.3
|
pathe: 2.0.3
|
||||||
vite: 7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
vite: 7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@types/node'
|
- '@types/node'
|
||||||
- jiti
|
- jiti
|
||||||
@@ -23764,25 +23773,25 @@ snapshots:
|
|||||||
- tsx
|
- tsx
|
||||||
- yaml
|
- yaml
|
||||||
|
|
||||||
vite-tsconfig-paths@5.1.4(typescript@5.9.2)(vite@7.1.2(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)):
|
vite-tsconfig-paths@5.1.4(typescript@5.9.2)(vite@7.1.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)):
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 4.4.1
|
debug: 4.4.1
|
||||||
globrex: 0.1.2
|
globrex: 0.1.2
|
||||||
tsconfck: 3.1.6(typescript@5.9.2)
|
tsconfck: 3.1.6(typescript@5.9.2)
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
vite: 7.1.2(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
vite: 7.1.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
- typescript
|
- typescript
|
||||||
|
|
||||||
vite@7.1.2(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1):
|
vite@7.1.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
esbuild: 0.25.9
|
esbuild: 0.25.9
|
||||||
fdir: 6.5.0(picomatch@4.0.3)
|
fdir: 6.5.0(picomatch@4.0.3)
|
||||||
picomatch: 4.0.3
|
picomatch: 4.0.3
|
||||||
postcss: 8.5.6
|
postcss: 8.5.6
|
||||||
rollup: 4.46.3
|
rollup: 4.50.1
|
||||||
tinyglobby: 0.2.14
|
tinyglobby: 0.2.15
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@types/node': 22.18.1
|
'@types/node': 22.18.1
|
||||||
fsevents: 2.3.3
|
fsevents: 2.3.3
|
||||||
@@ -23791,14 +23800,14 @@ snapshots:
|
|||||||
terser: 5.43.1
|
terser: 5.43.1
|
||||||
yaml: 2.8.1
|
yaml: 2.8.1
|
||||||
|
|
||||||
vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1):
|
vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
esbuild: 0.25.9
|
esbuild: 0.25.9
|
||||||
fdir: 6.5.0(picomatch@4.0.3)
|
fdir: 6.5.0(picomatch@4.0.3)
|
||||||
picomatch: 4.0.3
|
picomatch: 4.0.3
|
||||||
postcss: 8.5.6
|
postcss: 8.5.6
|
||||||
rollup: 4.46.3
|
rollup: 4.50.1
|
||||||
tinyglobby: 0.2.14
|
tinyglobby: 0.2.15
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@types/node': 24.3.0
|
'@types/node': 24.3.0
|
||||||
fsevents: 2.3.3
|
fsevents: 2.3.3
|
||||||
@@ -23807,9 +23816,9 @@ snapshots:
|
|||||||
terser: 5.43.1
|
terser: 5.43.1
|
||||||
yaml: 2.8.1
|
yaml: 2.8.1
|
||||||
|
|
||||||
vitefu@1.1.1(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)):
|
vitefu@1.1.1(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)):
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
vite: 7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
vite: 7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
|
|
||||||
vitest-fetch-mock@0.4.5(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)):
|
vitest-fetch-mock@0.4.5(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)):
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -23819,7 +23828,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@types/chai': 5.2.2
|
'@types/chai': 5.2.2
|
||||||
'@vitest/expect': 3.2.4
|
'@vitest/expect': 3.2.4
|
||||||
'@vitest/mocker': 3.2.4(vite@7.1.2(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
'@vitest/mocker': 3.2.4(vite@7.1.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
||||||
'@vitest/pretty-format': 3.2.4
|
'@vitest/pretty-format': 3.2.4
|
||||||
'@vitest/runner': 3.2.4
|
'@vitest/runner': 3.2.4
|
||||||
'@vitest/snapshot': 3.2.4
|
'@vitest/snapshot': 3.2.4
|
||||||
@@ -23834,10 +23843,10 @@ snapshots:
|
|||||||
std-env: 3.9.0
|
std-env: 3.9.0
|
||||||
tinybench: 2.9.0
|
tinybench: 2.9.0
|
||||||
tinyexec: 0.3.2
|
tinyexec: 0.3.2
|
||||||
tinyglobby: 0.2.14
|
tinyglobby: 0.2.15
|
||||||
tinypool: 1.1.1
|
tinypool: 1.1.1
|
||||||
tinyrainbow: 2.0.0
|
tinyrainbow: 2.0.0
|
||||||
vite: 7.1.2(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
vite: 7.1.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
vite-node: 3.2.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
vite-node: 3.2.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
why-is-node-running: 2.3.0
|
why-is-node-running: 2.3.0
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
@@ -23863,7 +23872,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@types/chai': 5.2.2
|
'@types/chai': 5.2.2
|
||||||
'@vitest/expect': 3.2.4
|
'@vitest/expect': 3.2.4
|
||||||
'@vitest/mocker': 3.2.4(vite@7.1.2(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
'@vitest/mocker': 3.2.4(vite@7.1.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
||||||
'@vitest/pretty-format': 3.2.4
|
'@vitest/pretty-format': 3.2.4
|
||||||
'@vitest/runner': 3.2.4
|
'@vitest/runner': 3.2.4
|
||||||
'@vitest/snapshot': 3.2.4
|
'@vitest/snapshot': 3.2.4
|
||||||
@@ -23878,10 +23887,10 @@ snapshots:
|
|||||||
std-env: 3.9.0
|
std-env: 3.9.0
|
||||||
tinybench: 2.9.0
|
tinybench: 2.9.0
|
||||||
tinyexec: 0.3.2
|
tinyexec: 0.3.2
|
||||||
tinyglobby: 0.2.14
|
tinyglobby: 0.2.15
|
||||||
tinypool: 1.1.1
|
tinypool: 1.1.1
|
||||||
tinyrainbow: 2.0.0
|
tinyrainbow: 2.0.0
|
||||||
vite: 7.1.2(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
vite: 7.1.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
vite-node: 3.2.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
vite-node: 3.2.4(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
why-is-node-running: 2.3.0
|
why-is-node-running: 2.3.0
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
@@ -23907,7 +23916,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@types/chai': 5.2.2
|
'@types/chai': 5.2.2
|
||||||
'@vitest/expect': 3.2.4
|
'@vitest/expect': 3.2.4
|
||||||
'@vitest/mocker': 3.2.4(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
'@vitest/mocker': 3.2.4(vite@7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
|
||||||
'@vitest/pretty-format': 3.2.4
|
'@vitest/pretty-format': 3.2.4
|
||||||
'@vitest/runner': 3.2.4
|
'@vitest/runner': 3.2.4
|
||||||
'@vitest/snapshot': 3.2.4
|
'@vitest/snapshot': 3.2.4
|
||||||
@@ -23922,10 +23931,10 @@ snapshots:
|
|||||||
std-env: 3.9.0
|
std-env: 3.9.0
|
||||||
tinybench: 2.9.0
|
tinybench: 2.9.0
|
||||||
tinyexec: 0.3.2
|
tinyexec: 0.3.2
|
||||||
tinyglobby: 0.2.14
|
tinyglobby: 0.2.15
|
||||||
tinypool: 1.1.1
|
tinypool: 1.1.1
|
||||||
tinyrainbow: 2.0.0
|
tinyrainbow: 2.0.0
|
||||||
vite: 7.1.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
vite: 7.1.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
vite-node: 3.2.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
vite-node: 3.2.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
why-is-node-running: 2.3.0
|
why-is-node-running: 2.3.0
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
|
|||||||
@@ -1,83 +1,4 @@
|
|||||||
# dev build
|
FROM ghcr.io/immich-app/base-server-dev:202509091104@sha256:4f9275330f1e49e7ce9840758ea91839052fe6ed40972d5bb97a9af857fa956a AS builder
|
||||||
FROM ghcr.io/immich-app/base-server-dev:202509091104@sha256:4f9275330f1e49e7ce9840758ea91839052fe6ed40972d5bb97a9af857fa956a AS dev
|
|
||||||
|
|
||||||
ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0 \
|
|
||||||
CI=1 \
|
|
||||||
COREPACK_HOME=/tmp
|
|
||||||
|
|
||||||
RUN npm install --global corepack@latest && \
|
|
||||||
corepack enable pnpm && \
|
|
||||||
echo "store-dir=/buildcache/pnpm-store" >> /usr/local/etc/npmrc && \
|
|
||||||
echo "devdir=/buildcache/node-gyp" >> /usr/local/etc/npmrc
|
|
||||||
|
|
||||||
COPY ./package* ./pnpm* .pnpmfile.cjs /tmp/create-dep-cache/
|
|
||||||
COPY ./web/package* ./web/pnpm* /tmp/create-dep-cache/web/
|
|
||||||
COPY ./server/package* ./server/pnpm* /tmp/create-dep-cache/server/
|
|
||||||
COPY ./open-api/typescript-sdk/package* ./open-api/typescript-sdk/pnpm* /tmp/create-dep-cache/open-api/typescript-sdk/
|
|
||||||
WORKDIR /tmp/create-dep-cache
|
|
||||||
RUN pnpm fetch && rm -rf /tmp/create-dep-cache && chmod -R o+rw /buildcache
|
|
||||||
WORKDIR /usr/src/app
|
|
||||||
|
|
||||||
ENV PATH="${PATH}:/usr/src/app/server/bin:/usr/src/app/web/bin" \
|
|
||||||
IMMICH_ENV=development \
|
|
||||||
NVIDIA_DRIVER_CAPABILITIES=all \
|
|
||||||
NVIDIA_VISIBLE_DEVICES=all
|
|
||||||
ENTRYPOINT ["tini", "--", "/bin/bash", "-c"]
|
|
||||||
|
|
||||||
FROM dev AS dev-container-server
|
|
||||||
|
|
||||||
RUN apt-get update --allow-releaseinfo-change && \
|
|
||||||
apt-get install sudo inetutils-ping openjdk-11-jre-headless \
|
|
||||||
vim nano \
|
|
||||||
-y --no-install-recommends --fix-missing
|
|
||||||
|
|
||||||
RUN usermod -aG sudo node && \
|
|
||||||
echo "node ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
|
|
||||||
mkdir -p /workspaces/immich
|
|
||||||
|
|
||||||
RUN chown node:node -R /workspaces
|
|
||||||
COPY --chown=node:node --chmod=755 ../.devcontainer/server/*.sh /immich-devcontainer/
|
|
||||||
|
|
||||||
WORKDIR /workspaces/immich
|
|
||||||
|
|
||||||
FROM dev-container-server AS dev-container-mobile
|
|
||||||
USER root
|
|
||||||
# Enable multiarch for arm64 if necessary
|
|
||||||
RUN if [ "$(dpkg --print-architecture)" = "arm64" ]; then \
|
|
||||||
dpkg --add-architecture amd64 && \
|
|
||||||
apt-get update && \
|
|
||||||
apt-get install -y --no-install-recommends \
|
|
||||||
qemu-user-static \
|
|
||||||
libc6:amd64 \
|
|
||||||
libstdc++6:amd64 \
|
|
||||||
libgcc1:amd64; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Flutter SDK
|
|
||||||
# https://flutter.dev/docs/development/tools/sdk/releases?tab=linux
|
|
||||||
ENV FLUTTER_CHANNEL="stable"
|
|
||||||
ENV FLUTTER_VERSION="3.32.8"
|
|
||||||
ENV FLUTTER_HOME=/flutter
|
|
||||||
ENV PATH=${PATH}:${FLUTTER_HOME}/bin
|
|
||||||
|
|
||||||
# Flutter SDK
|
|
||||||
RUN mkdir -p ${FLUTTER_HOME} \
|
|
||||||
&& curl -C - --output flutter.tar.xz https://storage.googleapis.com/flutter_infra_release/releases/${FLUTTER_CHANNEL}/linux/flutter_linux_${FLUTTER_VERSION}-${FLUTTER_CHANNEL}.tar.xz \
|
|
||||||
&& tar -xf flutter.tar.xz --strip-components=1 -C ${FLUTTER_HOME} \
|
|
||||||
&& rm flutter.tar.xz \
|
|
||||||
&& chown -R node ${FLUTTER_HOME}
|
|
||||||
|
|
||||||
|
|
||||||
RUN apt-get update \
|
|
||||||
&& wget -qO- https://dcm.dev/pgp-key.public | gpg --dearmor -o /usr/share/keyrings/dcm.gpg \
|
|
||||||
&& echo 'deb [signed-by=/usr/share/keyrings/dcm.gpg arch=amd64] https://dcm.dev/debian stable main' | tee /etc/apt/sources.list.d/dart_stable.list \
|
|
||||||
&& apt-get update \
|
|
||||||
&& apt-get install dcm -y
|
|
||||||
|
|
||||||
RUN dart --disable-analytics
|
|
||||||
|
|
||||||
# production-builder-base image
|
|
||||||
FROM ghcr.io/immich-app/base-server-dev:202509091104@sha256:4f9275330f1e49e7ce9840758ea91839052fe6ed40972d5bb97a9af857fa956a AS prod-builder-base
|
|
||||||
ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0 \
|
ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0 \
|
||||||
CI=1 \
|
CI=1 \
|
||||||
COREPACK_HOME=/tmp
|
COREPACK_HOME=/tmp
|
||||||
@@ -85,8 +6,7 @@ ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0 \
|
|||||||
RUN npm install --global corepack@latest && \
|
RUN npm install --global corepack@latest && \
|
||||||
corepack enable pnpm
|
corepack enable pnpm
|
||||||
|
|
||||||
# server production build
|
FROM builder AS server
|
||||||
FROM prod-builder-base AS server-prod
|
|
||||||
|
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
COPY ./package* ./pnpm* .pnpmfile.cjs ./
|
COPY ./package* ./pnpm* .pnpmfile.cjs ./
|
||||||
@@ -94,8 +14,7 @@ COPY ./server ./server/
|
|||||||
RUN SHARP_IGNORE_GLOBAL_LIBVIPS=true pnpm --filter immich --frozen-lockfile build && \
|
RUN SHARP_IGNORE_GLOBAL_LIBVIPS=true pnpm --filter immich --frozen-lockfile build && \
|
||||||
SHARP_FORCE_GLOBAL_LIBVIPS=true pnpm --filter immich --frozen-lockfile --prod --no-optional deploy /output/server-pruned
|
SHARP_FORCE_GLOBAL_LIBVIPS=true pnpm --filter immich --frozen-lockfile --prod --no-optional deploy /output/server-pruned
|
||||||
|
|
||||||
# web production build
|
FROM builder AS web
|
||||||
FROM prod-builder-base AS web-prod
|
|
||||||
|
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
COPY ./package* ./pnpm* .pnpmfile.cjs ./
|
COPY ./package* ./pnpm* .pnpmfile.cjs ./
|
||||||
@@ -105,7 +24,7 @@ COPY ./open-api ./open-api/
|
|||||||
RUN SHARP_IGNORE_GLOBAL_LIBVIPS=true pnpm --filter @immich/sdk --filter immich-web --frozen-lockfile --force install && \
|
RUN SHARP_IGNORE_GLOBAL_LIBVIPS=true pnpm --filter @immich/sdk --filter immich-web --frozen-lockfile --force install && \
|
||||||
pnpm --filter @immich/sdk --filter immich-web build
|
pnpm --filter @immich/sdk --filter immich-web build
|
||||||
|
|
||||||
FROM prod-builder-base AS cli-prod
|
FROM builder AS cli
|
||||||
|
|
||||||
COPY ./package* ./pnpm* .pnpmfile.cjs ./
|
COPY ./package* ./pnpm* .pnpmfile.cjs ./
|
||||||
COPY ./cli ./cli/
|
COPY ./cli ./cli/
|
||||||
@@ -114,7 +33,6 @@ RUN pnpm --filter @immich/sdk --filter @immich/cli --frozen-lockfile install &&
|
|||||||
pnpm --filter @immich/sdk --filter @immich/cli build && \
|
pnpm --filter @immich/sdk --filter @immich/cli build && \
|
||||||
pnpm --filter @immich/cli --prod --no-optional deploy /output/cli-pruned
|
pnpm --filter @immich/cli --prod --no-optional deploy /output/cli-pruned
|
||||||
|
|
||||||
# prod base image
|
|
||||||
FROM ghcr.io/immich-app/base-server-prod:202509091104@sha256:d1ccbac24c84f2f8277cf85281edfca62d85d7daed6a62b8efd3a81bcd3c5e0e
|
FROM ghcr.io/immich-app/base-server-prod:202509091104@sha256:d1ccbac24c84f2f8277cf85281edfca62d85d7daed6a62b8efd3a81bcd3c5e0e
|
||||||
|
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
@@ -122,9 +40,9 @@ ENV NODE_ENV=production \
|
|||||||
NVIDIA_DRIVER_CAPABILITIES=all \
|
NVIDIA_DRIVER_CAPABILITIES=all \
|
||||||
NVIDIA_VISIBLE_DEVICES=all
|
NVIDIA_VISIBLE_DEVICES=all
|
||||||
|
|
||||||
COPY --from=server-prod /output/server-pruned ./server
|
COPY --from=server /output/server-pruned ./server
|
||||||
COPY --from=web-prod /usr/src/app/web/build /build/www
|
COPY --from=web /usr/src/app/web/build /build/www
|
||||||
COPY --from=cli-prod /output/cli-pruned ./cli
|
COPY --from=cli /output/cli-pruned ./cli
|
||||||
RUN ln -s ../../cli/bin/immich server/bin/immich
|
RUN ln -s ../../cli/bin/immich server/bin/immich
|
||||||
COPY LICENSE /licenses/LICENSE.txt
|
COPY LICENSE /licenses/LICENSE.txt
|
||||||
COPY LICENSE /LICENSE
|
COPY LICENSE /LICENSE
|
||||||
|
|||||||
77
server/Dockerfile.dev
Normal file
77
server/Dockerfile.dev
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
# dev build
|
||||||
|
FROM ghcr.io/immich-app/base-server-dev:202509091104@sha256:4f9275330f1e49e7ce9840758ea91839052fe6ed40972d5bb97a9af857fa956a AS dev
|
||||||
|
|
||||||
|
ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0 \
|
||||||
|
CI=1 \
|
||||||
|
COREPACK_HOME=/tmp
|
||||||
|
|
||||||
|
RUN npm install --global corepack@latest && \
|
||||||
|
corepack enable pnpm && \
|
||||||
|
echo "store-dir=/buildcache/pnpm-store" >> /usr/local/etc/npmrc && \
|
||||||
|
echo "devdir=/buildcache/node-gyp" >> /usr/local/etc/npmrc
|
||||||
|
|
||||||
|
COPY ./package* ./pnpm* .pnpmfile.cjs /tmp/create-dep-cache/
|
||||||
|
COPY ./web/package* ./web/pnpm* /tmp/create-dep-cache/web/
|
||||||
|
COPY ./server/package* ./server/pnpm* /tmp/create-dep-cache/server/
|
||||||
|
COPY ./open-api/typescript-sdk/package* ./open-api/typescript-sdk/pnpm* /tmp/create-dep-cache/open-api/typescript-sdk/
|
||||||
|
WORKDIR /tmp/create-dep-cache
|
||||||
|
RUN pnpm fetch && rm -rf /tmp/create-dep-cache && chmod -R o+rw /buildcache
|
||||||
|
WORKDIR /usr/src/app
|
||||||
|
|
||||||
|
ENV PATH="${PATH}:/usr/src/app/server/bin:/usr/src/app/web/bin" \
|
||||||
|
IMMICH_ENV=development \
|
||||||
|
NVIDIA_DRIVER_CAPABILITIES=all \
|
||||||
|
NVIDIA_VISIBLE_DEVICES=all
|
||||||
|
ENTRYPOINT ["tini", "--", "/bin/bash", "-c"]
|
||||||
|
|
||||||
|
FROM dev AS dev-container-server
|
||||||
|
|
||||||
|
RUN apt-get update --allow-releaseinfo-change && \
|
||||||
|
apt-get install sudo inetutils-ping openjdk-11-jre-headless \
|
||||||
|
vim nano \
|
||||||
|
-y --no-install-recommends --fix-missing
|
||||||
|
|
||||||
|
RUN usermod -aG sudo node && \
|
||||||
|
echo "node ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
|
||||||
|
mkdir -p /workspaces/immich
|
||||||
|
|
||||||
|
RUN chown node:node -R /workspaces
|
||||||
|
COPY --chown=node:node --chmod=755 ../.devcontainer/server/*.sh /immich-devcontainer/
|
||||||
|
|
||||||
|
WORKDIR /workspaces/immich
|
||||||
|
|
||||||
|
FROM dev-container-server AS dev-container-mobile
|
||||||
|
USER root
|
||||||
|
# Enable multiarch for arm64 if necessary
|
||||||
|
RUN if [ "$(dpkg --print-architecture)" = "arm64" ]; then \
|
||||||
|
dpkg --add-architecture amd64 && \
|
||||||
|
apt-get update && \
|
||||||
|
apt-get install -y --no-install-recommends \
|
||||||
|
qemu-user-static \
|
||||||
|
libc6:amd64 \
|
||||||
|
libstdc++6:amd64 \
|
||||||
|
libgcc1:amd64; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Flutter SDK
|
||||||
|
# https://flutter.dev/docs/development/tools/sdk/releases?tab=linux
|
||||||
|
ENV FLUTTER_CHANNEL="stable"
|
||||||
|
ENV FLUTTER_VERSION="3.32.8"
|
||||||
|
ENV FLUTTER_HOME=/flutter
|
||||||
|
ENV PATH=${PATH}:${FLUTTER_HOME}/bin
|
||||||
|
|
||||||
|
# Flutter SDK
|
||||||
|
RUN mkdir -p ${FLUTTER_HOME} \
|
||||||
|
&& curl -C - --output flutter.tar.xz https://storage.googleapis.com/flutter_infra_release/releases/${FLUTTER_CHANNEL}/linux/flutter_linux_${FLUTTER_VERSION}-${FLUTTER_CHANNEL}.tar.xz \
|
||||||
|
&& tar -xf flutter.tar.xz --strip-components=1 -C ${FLUTTER_HOME} \
|
||||||
|
&& rm flutter.tar.xz \
|
||||||
|
&& chown -R node ${FLUTTER_HOME}
|
||||||
|
|
||||||
|
|
||||||
|
RUN apt-get update \
|
||||||
|
&& wget -qO- https://dcm.dev/pgp-key.public | gpg --dearmor -o /usr/share/keyrings/dcm.gpg \
|
||||||
|
&& echo 'deb [signed-by=/usr/share/keyrings/dcm.gpg arch=amd64] https://dcm.dev/debian stable main' | tee /etc/apt/sources.list.d/dart_stable.list \
|
||||||
|
&& apt-get update \
|
||||||
|
&& apt-get install dcm -y
|
||||||
|
|
||||||
|
RUN dart --disable-analytics
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "immich",
|
"name": "immich",
|
||||||
"version": "1.142.0",
|
"version": "1.142.1",
|
||||||
"description": "",
|
"description": "",
|
||||||
"author": "",
|
"author": "",
|
||||||
"private": true,
|
"private": true,
|
||||||
@@ -129,7 +129,7 @@
|
|||||||
"@types/luxon": "^3.6.2",
|
"@types/luxon": "^3.6.2",
|
||||||
"@types/mock-fs": "^4.13.1",
|
"@types/mock-fs": "^4.13.1",
|
||||||
"@types/multer": "^2.0.0",
|
"@types/multer": "^2.0.0",
|
||||||
"@types/node": "^22.18.0",
|
"@types/node": "^22.18.1",
|
||||||
"@types/nodemailer": "^6.4.14",
|
"@types/nodemailer": "^6.4.14",
|
||||||
"@types/picomatch": "^4.0.0",
|
"@types/picomatch": "^4.0.0",
|
||||||
"@types/pngjs": "^6.0.5",
|
"@types/pngjs": "^6.0.5",
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ export class OAuthRepository {
|
|||||||
);
|
);
|
||||||
const client = await this.getClient(config);
|
const client = await this.getClient(config);
|
||||||
state ??= randomState();
|
state ??= randomState();
|
||||||
|
|
||||||
let codeVerifier: string | null;
|
let codeVerifier: string | null;
|
||||||
if (codeChallenge) {
|
if (codeChallenge) {
|
||||||
codeVerifier = null;
|
codeVerifier = null;
|
||||||
@@ -36,13 +37,20 @@ export class OAuthRepository {
|
|||||||
codeVerifier = randomPKCECodeVerifier();
|
codeVerifier = randomPKCECodeVerifier();
|
||||||
codeChallenge = await calculatePKCECodeChallenge(codeVerifier);
|
codeChallenge = await calculatePKCECodeChallenge(codeVerifier);
|
||||||
}
|
}
|
||||||
const url = buildAuthorizationUrl(client, {
|
|
||||||
|
const params: Record<string, string> = {
|
||||||
redirect_uri: redirectUrl,
|
redirect_uri: redirectUrl,
|
||||||
scope: config.scope,
|
scope: config.scope,
|
||||||
state,
|
state,
|
||||||
code_challenge: client.serverMetadata().supportsPKCE() ? codeChallenge : '',
|
};
|
||||||
code_challenge_method: client.serverMetadata().supportsPKCE() ? 'S256' : '',
|
|
||||||
}).toString();
|
if (client.serverMetadata().supportsPKCE()) {
|
||||||
|
params.code_challenge = codeChallenge;
|
||||||
|
params.code_challenge_method = 'S256';
|
||||||
|
}
|
||||||
|
|
||||||
|
const url = buildAuthorizationUrl(client, params).toString();
|
||||||
|
|
||||||
return { url, state, codeVerifier };
|
return { url, state, codeVerifier };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -420,7 +420,7 @@ describe(AssetService.name, () => {
|
|||||||
ids: ['asset-1'],
|
ids: ['asset-1'],
|
||||||
latitude: 0,
|
latitude: 0,
|
||||||
longitude: 0,
|
longitude: 0,
|
||||||
visibility: undefined,
|
visibility: AssetVisibility.Archive,
|
||||||
isFavorite: false,
|
isFavorite: false,
|
||||||
duplicateId: undefined,
|
duplicateId: undefined,
|
||||||
rating: undefined,
|
rating: undefined,
|
||||||
|
|||||||
@@ -115,59 +115,68 @@ export class AssetService extends BaseService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async updateAll(auth: AuthDto, dto: AssetBulkUpdateDto): Promise<void> {
|
async updateAll(auth: AuthDto, dto: AssetBulkUpdateDto): Promise<void> {
|
||||||
const { ids, description, dateTimeOriginal, dateTimeRelative, timeZone, latitude, longitude, ...options } = dto;
|
const {
|
||||||
|
ids,
|
||||||
|
isFavorite,
|
||||||
|
visibility,
|
||||||
|
dateTimeOriginal,
|
||||||
|
latitude,
|
||||||
|
longitude,
|
||||||
|
rating,
|
||||||
|
description,
|
||||||
|
duplicateId,
|
||||||
|
dateTimeRelative,
|
||||||
|
timeZone,
|
||||||
|
} = dto;
|
||||||
await this.requireAccess({ auth, permission: Permission.AssetUpdate, ids });
|
await this.requireAccess({ auth, permission: Permission.AssetUpdate, ids });
|
||||||
|
|
||||||
const staticValuesChanged =
|
const assetDto = { isFavorite, visibility, duplicateId };
|
||||||
description !== undefined || dateTimeOriginal !== undefined || latitude !== undefined || longitude !== undefined;
|
const exifDto = { latitude, longitude, rating, description, dateTimeOriginal };
|
||||||
|
|
||||||
if (staticValuesChanged) {
|
const isExifChanged = Object.values(exifDto).some((v) => v !== undefined);
|
||||||
await this.assetRepository.updateAllExif(ids, { description, dateTimeOriginal, latitude, longitude });
|
if (isExifChanged) {
|
||||||
|
await this.assetRepository.updateAllExif(ids, exifDto);
|
||||||
}
|
}
|
||||||
|
|
||||||
const assets =
|
const assets =
|
||||||
(dateTimeRelative !== undefined && dateTimeRelative !== 0) || timeZone !== undefined
|
(dateTimeRelative !== undefined && dateTimeRelative !== 0) || timeZone !== undefined
|
||||||
? await this.assetRepository.updateDateTimeOriginal(ids, dateTimeRelative, timeZone)
|
? await this.assetRepository.updateDateTimeOriginal(ids, dateTimeRelative, timeZone)
|
||||||
: null;
|
: undefined;
|
||||||
|
|
||||||
const dateTimesWithTimezone =
|
const dateTimesWithTimezone = assets
|
||||||
assets?.map((asset) => {
|
? assets.map((asset) => {
|
||||||
const isoString = asset.dateTimeOriginal?.toISOString();
|
const isoString = asset.dateTimeOriginal?.toISOString();
|
||||||
let dateTime = isoString ? DateTime.fromISO(isoString) : null;
|
let dateTime = isoString ? DateTime.fromISO(isoString) : null;
|
||||||
|
|
||||||
if (dateTime && asset.timeZone) {
|
if (dateTime && asset.timeZone) {
|
||||||
dateTime = dateTime.setZone(asset.timeZone);
|
dateTime = dateTime.setZone(asset.timeZone);
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
assetId: asset.assetId,
|
assetId: asset.assetId,
|
||||||
dateTimeOriginal: dateTime?.toISO() ?? null,
|
dateTimeOriginal: dateTime?.toISO() ?? null,
|
||||||
};
|
};
|
||||||
}) ?? null;
|
})
|
||||||
|
: ids.map((id) => ({ assetId: id, dateTimeOriginal }));
|
||||||
|
|
||||||
if (staticValuesChanged || dateTimesWithTimezone) {
|
if (dateTimesWithTimezone.length > 0) {
|
||||||
const entries: JobItem[] = (dateTimesWithTimezone ?? ids).map((entry: any) => ({
|
await this.jobRepository.queueAll(
|
||||||
name: JobName.SidecarWrite,
|
dateTimesWithTimezone.map(({ assetId: id, dateTimeOriginal }) => ({
|
||||||
data: {
|
name: JobName.SidecarWrite,
|
||||||
id: entry.assetId ?? entry,
|
data: {
|
||||||
description,
|
...exifDto,
|
||||||
dateTimeOriginal: entry.dateTimeOriginal ?? dateTimeOriginal,
|
id,
|
||||||
latitude,
|
dateTimeOriginal: dateTimeOriginal ?? undefined,
|
||||||
longitude,
|
},
|
||||||
},
|
})),
|
||||||
}));
|
);
|
||||||
await this.jobRepository.queueAll(entries);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
const isAssetChanged = Object.values(assetDto).some((v) => v !== undefined);
|
||||||
options.visibility !== undefined ||
|
if (isAssetChanged) {
|
||||||
options.isFavorite !== undefined ||
|
await this.assetRepository.updateAll(ids, assetDto);
|
||||||
options.duplicateId !== undefined ||
|
|
||||||
options.rating !== undefined
|
|
||||||
) {
|
|
||||||
await this.assetRepository.updateAll(ids, options);
|
|
||||||
|
|
||||||
if (options.visibility === AssetVisibility.Locked) {
|
if (visibility === AssetVisibility.Locked) {
|
||||||
await this.albumRepository.removeAssetsFromAll(ids);
|
await this.albumRepository.removeAssetsFromAll(ids);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "immich-web",
|
"name": "immich-web",
|
||||||
"version": "1.142.0",
|
"version": "1.142.1",
|
||||||
"license": "GNU Affero General Public License version 3",
|
"license": "GNU Affero General Public License version 3",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -67,7 +67,7 @@
|
|||||||
<div class="flex items-center gap-4 text-xl font-semibold text-immich-primary dark:text-immich-dark-primary">
|
<div class="flex items-center gap-4 text-xl font-semibold text-immich-primary dark:text-immich-dark-primary">
|
||||||
<span class="flex items-center gap-2">
|
<span class="flex items-center gap-2">
|
||||||
<Icon path={icon} size="1.25em" class="hidden shrink-0 sm:block" />
|
<Icon path={icon} size="1.25em" class="hidden shrink-0 sm:block" />
|
||||||
{title.toUpperCase()}
|
<span class="uppercase">{title}</span>
|
||||||
</span>
|
</span>
|
||||||
<div class="flex gap-2">
|
<div class="flex gap-2">
|
||||||
{#if jobCounts.failed > 0}
|
{#if jobCounts.failed > 0}
|
||||||
@@ -137,7 +137,7 @@
|
|||||||
onClick={() => onCommand({ command: JobCommand.Start, force: false })}
|
onClick={() => onCommand({ command: JobCommand.Start, force: false })}
|
||||||
>
|
>
|
||||||
<Icon path={mdiAlertCircle} size="36" />
|
<Icon path={mdiAlertCircle} size="36" />
|
||||||
{$t('disabled').toUpperCase()}
|
<span class="uppercase">{$t('disabled')}</span>
|
||||||
</JobTileButton>
|
</JobTileButton>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
@@ -145,7 +145,7 @@
|
|||||||
{#if waitingCount > 0}
|
{#if waitingCount > 0}
|
||||||
<JobTileButton color="gray" onClick={() => onCommand({ command: JobCommand.Empty, force: false })}>
|
<JobTileButton color="gray" onClick={() => onCommand({ command: JobCommand.Empty, force: false })}>
|
||||||
<Icon path={mdiClose} size="24" />
|
<Icon path={mdiClose} size="24" />
|
||||||
{$t('clear').toUpperCase()}
|
<span class="uppercase">{$t('clear')}</span>
|
||||||
</JobTileButton>
|
</JobTileButton>
|
||||||
{/if}
|
{/if}
|
||||||
{#if queueStatus.isPaused}
|
{#if queueStatus.isPaused}
|
||||||
@@ -153,12 +153,12 @@
|
|||||||
<JobTileButton color="light-gray" onClick={() => onCommand({ command: JobCommand.Resume, force: false })}>
|
<JobTileButton color="light-gray" onClick={() => onCommand({ command: JobCommand.Resume, force: false })}>
|
||||||
<!-- size property is not reactive, so have to use width and height -->
|
<!-- size property is not reactive, so have to use width and height -->
|
||||||
<Icon path={mdiFastForward} {size} />
|
<Icon path={mdiFastForward} {size} />
|
||||||
{$t('resume').toUpperCase()}
|
<span class="uppercase">{$t('resume')}</span>
|
||||||
</JobTileButton>
|
</JobTileButton>
|
||||||
{:else}
|
{:else}
|
||||||
<JobTileButton color="light-gray" onClick={() => onCommand({ command: JobCommand.Pause, force: false })}>
|
<JobTileButton color="light-gray" onClick={() => onCommand({ command: JobCommand.Pause, force: false })}>
|
||||||
<Icon path={mdiPause} size="24" />
|
<Icon path={mdiPause} size="24" />
|
||||||
{$t('pause').toUpperCase()}
|
<span class="uppercase">{$t('pause')}</span>
|
||||||
</JobTileButton>
|
</JobTileButton>
|
||||||
{/if}
|
{/if}
|
||||||
{/if}
|
{/if}
|
||||||
@@ -167,25 +167,25 @@
|
|||||||
{#if allText}
|
{#if allText}
|
||||||
<JobTileButton color="dark-gray" onClick={() => onCommand({ command: JobCommand.Start, force: true })}>
|
<JobTileButton color="dark-gray" onClick={() => onCommand({ command: JobCommand.Start, force: true })}>
|
||||||
<Icon path={mdiAllInclusive} size="24" />
|
<Icon path={mdiAllInclusive} size="24" />
|
||||||
{allText}
|
<span class="uppercase">{allText}</span>
|
||||||
</JobTileButton>
|
</JobTileButton>
|
||||||
{/if}
|
{/if}
|
||||||
{#if refreshText}
|
{#if refreshText}
|
||||||
<JobTileButton color="gray" onClick={() => onCommand({ command: JobCommand.Start, force: undefined })}>
|
<JobTileButton color="gray" onClick={() => onCommand({ command: JobCommand.Start, force: undefined })}>
|
||||||
<Icon path={mdiImageRefreshOutline} size="24" />
|
<Icon path={mdiImageRefreshOutline} size="24" />
|
||||||
{refreshText}
|
<span class="uppercase">{refreshText}</span>
|
||||||
</JobTileButton>
|
</JobTileButton>
|
||||||
{/if}
|
{/if}
|
||||||
<JobTileButton color="light-gray" onClick={() => onCommand({ command: JobCommand.Start, force: false })}>
|
<JobTileButton color="light-gray" onClick={() => onCommand({ command: JobCommand.Start, force: false })}>
|
||||||
<Icon path={mdiSelectionSearch} size="24" />
|
<Icon path={mdiSelectionSearch} size="24" />
|
||||||
{missingText}
|
<span class="uppercase">{missingText}</span>
|
||||||
</JobTileButton>
|
</JobTileButton>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if !disabled && !multipleButtons && isIdle}
|
{#if !disabled && !multipleButtons && isIdle}
|
||||||
<JobTileButton color="light-gray" onClick={() => onCommand({ command: JobCommand.Start, force: false })}>
|
<JobTileButton color="light-gray" onClick={() => onCommand({ command: JobCommand.Start, force: false })}>
|
||||||
<Icon path={mdiPlay} size="48" />
|
<Icon path={mdiPlay} size="48" />
|
||||||
{missingText}
|
<span class="uppercase">{missingText}</span>
|
||||||
</JobTileButton>
|
</JobTileButton>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -177,9 +177,9 @@
|
|||||||
{disabled}
|
{disabled}
|
||||||
{subtitle}
|
{subtitle}
|
||||||
{description}
|
{description}
|
||||||
allText={allText?.toUpperCase()}
|
{allText}
|
||||||
refreshText={refreshText?.toUpperCase()}
|
{refreshText}
|
||||||
missingText={missingText.toUpperCase()}
|
{missingText}
|
||||||
{jobCounts}
|
{jobCounts}
|
||||||
{queueStatus}
|
{queueStatus}
|
||||||
onCommand={(command) => (handleCommandOverride || handleCommand)(jobName, command)}
|
onCommand={(command) => (handleCommandOverride || handleCommand)(jobName, command)}
|
||||||
|
|||||||
@@ -36,19 +36,19 @@
|
|||||||
|
|
||||||
<div class="flex flex-col gap-5">
|
<div class="flex flex-col gap-5">
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm dark:text-immich-dark-fg">{$t('total_usage').toUpperCase()}</p>
|
<p class="text-sm dark:text-immich-dark-fg uppercase">{$t('total_usage')}</p>
|
||||||
|
|
||||||
<div class="mt-5 hidden justify-between lg:flex gap-4">
|
<div class="mt-5 hidden justify-between lg:flex gap-4">
|
||||||
<StatsCard icon={mdiCameraIris} title={$t('photos').toUpperCase()} value={stats.photos} />
|
<StatsCard icon={mdiCameraIris} title={$t('photos')} value={stats.photos} />
|
||||||
<StatsCard icon={mdiPlayCircle} title={$t('videos').toUpperCase()} value={stats.videos} />
|
<StatsCard icon={mdiPlayCircle} title={$t('videos')} value={stats.videos} />
|
||||||
<StatsCard icon={mdiChartPie} title={$t('storage').toUpperCase()} value={statsUsage} unit={statsUsageUnit} />
|
<StatsCard icon={mdiChartPie} title={$t('storage')} value={statsUsage} unit={statsUsageUnit} />
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-5 flex lg:hidden">
|
<div class="mt-5 flex lg:hidden">
|
||||||
<div class="flex flex-col justify-between rounded-3xl bg-subtle p-5 dark:bg-immich-dark-gray">
|
<div class="flex flex-col justify-between rounded-3xl bg-subtle p-5 dark:bg-immich-dark-gray">
|
||||||
<div class="flex flex-wrap gap-x-12">
|
<div class="flex flex-wrap gap-x-12">
|
||||||
<div class="flex place-items-center gap-4 text-immich-primary dark:text-immich-dark-primary">
|
<div class="flex place-items-center gap-4 text-immich-primary dark:text-immich-dark-primary">
|
||||||
<Icon path={mdiCameraIris} size="25" />
|
<Icon path={mdiCameraIris} size="25" />
|
||||||
<p>{$t('photos').toUpperCase()}</p>
|
<p class="uppercase">{$t('photos')}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="relative text-center font-mono text-2xl font-semibold">
|
<div class="relative text-center font-mono text-2xl font-semibold">
|
||||||
@@ -60,7 +60,7 @@
|
|||||||
<div class="flex flex-wrap gap-x-12">
|
<div class="flex flex-wrap gap-x-12">
|
||||||
<div class="flex place-items-center gap-4 text-immich-primary dark:text-immich-dark-primary">
|
<div class="flex place-items-center gap-4 text-immich-primary dark:text-immich-dark-primary">
|
||||||
<Icon path={mdiPlayCircle} size="25" />
|
<Icon path={mdiPlayCircle} size="25" />
|
||||||
<p>{$t('videos').toUpperCase()}</p>
|
<p class="uppercase">{$t('videos')}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="relative text-center font-mono text-2xl font-semibold">
|
<div class="relative text-center font-mono text-2xl font-semibold">
|
||||||
@@ -72,7 +72,7 @@
|
|||||||
<div class="flex flex-wrap gap-x-7">
|
<div class="flex flex-wrap gap-x-7">
|
||||||
<div class="flex place-items-center gap-4 text-immich-primary dark:text-immich-dark-primary">
|
<div class="flex place-items-center gap-4 text-immich-primary dark:text-immich-dark-primary">
|
||||||
<Icon path={mdiChartPie} size="25" />
|
<Icon path={mdiChartPie} size="25" />
|
||||||
<p>{$t('storage').toUpperCase()}</p>
|
<p class="uppercase">{$t('storage')}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="relative flex text-center font-mono text-2xl font-semibold">
|
<div class="relative flex text-center font-mono text-2xl font-semibold">
|
||||||
@@ -87,7 +87,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<p class="text-sm dark:text-immich-dark-fg">{$t('user_usage_detail').toUpperCase()}</p>
|
<p class="text-sm dark:text-immich-dark-fg uppercase">{$t('user_usage_detail')}</p>
|
||||||
<table class="mt-5 w-full text-start">
|
<table class="mt-5 w-full text-start">
|
||||||
<thead
|
<thead
|
||||||
class="mb-4 flex h-12 w-full rounded-md border bg-gray-50 text-immich-primary dark:border-immich-dark-gray dark:bg-immich-dark-gray dark:text-immich-dark-primary"
|
class="mb-4 flex h-12 w-full rounded-md border bg-gray-50 text-immich-primary dark:border-immich-dark-gray dark:bg-immich-dark-gray dark:text-immich-dark-primary"
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
<div class="flex h-[140px] w-full flex-col justify-between rounded-3xl bg-subtle text-primary p-5">
|
<div class="flex h-[140px] w-full flex-col justify-between rounded-3xl bg-subtle text-primary p-5">
|
||||||
<div class="flex place-items-center gap-4">
|
<div class="flex place-items-center gap-4">
|
||||||
<Icon path={icon} size="40" />
|
<Icon path={icon} size="40" />
|
||||||
<Text size="large" fontWeight="bold">{title}</Text>
|
<Text size="large" fontWeight="bold" class="uppercase">{title}</Text>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="relative mx-auto font-mono text-2xl font-semibold">
|
<div class="relative mx-auto font-mono text-2xl font-semibold">
|
||||||
|
|||||||
@@ -183,7 +183,7 @@
|
|||||||
|
|
||||||
<SettingInputField
|
<SettingInputField
|
||||||
inputType={SettingInputFieldType.TEXT}
|
inputType={SettingInputFieldType.TEXT}
|
||||||
label={$t('admin.oauth_timeout').toUpperCase()}
|
label={$t('admin.oauth_timeout')}
|
||||||
description={$t('admin.oauth_timeout_description')}
|
description={$t('admin.oauth_timeout_description')}
|
||||||
required={true}
|
required={true}
|
||||||
bind:value={config.oauth.timeout}
|
bind:value={config.oauth.timeout}
|
||||||
@@ -193,7 +193,7 @@
|
|||||||
|
|
||||||
<SettingInputField
|
<SettingInputField
|
||||||
inputType={SettingInputFieldType.TEXT}
|
inputType={SettingInputFieldType.TEXT}
|
||||||
label={$t('admin.oauth_storage_label_claim').toUpperCase()}
|
label={$t('admin.oauth_storage_label_claim')}
|
||||||
description={$t('admin.oauth_storage_label_claim_description')}
|
description={$t('admin.oauth_storage_label_claim_description')}
|
||||||
bind:value={config.oauth.storageLabelClaim}
|
bind:value={config.oauth.storageLabelClaim}
|
||||||
required={true}
|
required={true}
|
||||||
@@ -203,7 +203,7 @@
|
|||||||
|
|
||||||
<SettingInputField
|
<SettingInputField
|
||||||
inputType={SettingInputFieldType.TEXT}
|
inputType={SettingInputFieldType.TEXT}
|
||||||
label={$t('admin.oauth_role_claim').toUpperCase()}
|
label={$t('admin.oauth_role_claim')}
|
||||||
description={$t('admin.oauth_role_claim_description')}
|
description={$t('admin.oauth_role_claim_description')}
|
||||||
bind:value={config.oauth.roleClaim}
|
bind:value={config.oauth.roleClaim}
|
||||||
required={true}
|
required={true}
|
||||||
@@ -213,7 +213,7 @@
|
|||||||
|
|
||||||
<SettingInputField
|
<SettingInputField
|
||||||
inputType={SettingInputFieldType.TEXT}
|
inputType={SettingInputFieldType.TEXT}
|
||||||
label={$t('admin.oauth_storage_quota_claim').toUpperCase()}
|
label={$t('admin.oauth_storage_quota_claim')}
|
||||||
description={$t('admin.oauth_storage_quota_claim_description')}
|
description={$t('admin.oauth_storage_quota_claim_description')}
|
||||||
bind:value={config.oauth.storageQuotaClaim}
|
bind:value={config.oauth.storageQuotaClaim}
|
||||||
required={true}
|
required={true}
|
||||||
@@ -223,7 +223,7 @@
|
|||||||
|
|
||||||
<SettingInputField
|
<SettingInputField
|
||||||
inputType={SettingInputFieldType.NUMBER}
|
inputType={SettingInputFieldType.NUMBER}
|
||||||
label={$t('admin.oauth_storage_quota_default').toUpperCase()}
|
label={$t('admin.oauth_storage_quota_default')}
|
||||||
description={$t('admin.oauth_storage_quota_default_description')}
|
description={$t('admin.oauth_storage_quota_default_description')}
|
||||||
bind:value={config.oauth.defaultStorageQuota}
|
bind:value={config.oauth.defaultStorageQuota}
|
||||||
required={false}
|
required={false}
|
||||||
@@ -233,7 +233,7 @@
|
|||||||
|
|
||||||
<SettingInputField
|
<SettingInputField
|
||||||
inputType={SettingInputFieldType.TEXT}
|
inputType={SettingInputFieldType.TEXT}
|
||||||
label={$t('admin.oauth_button_text').toUpperCase()}
|
label={$t('admin.oauth_button_text')}
|
||||||
bind:value={config.oauth.buttonText}
|
bind:value={config.oauth.buttonText}
|
||||||
required={false}
|
required={false}
|
||||||
disabled={disabled || !config.oauth.enabled}
|
disabled={disabled || !config.oauth.enabled}
|
||||||
@@ -241,21 +241,21 @@
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<SettingSwitch
|
<SettingSwitch
|
||||||
title={$t('admin.oauth_auto_register').toUpperCase()}
|
title={$t('admin.oauth_auto_register')}
|
||||||
subtitle={$t('admin.oauth_auto_register_description')}
|
subtitle={$t('admin.oauth_auto_register_description')}
|
||||||
bind:checked={config.oauth.autoRegister}
|
bind:checked={config.oauth.autoRegister}
|
||||||
disabled={disabled || !config.oauth.enabled}
|
disabled={disabled || !config.oauth.enabled}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<SettingSwitch
|
<SettingSwitch
|
||||||
title={$t('admin.oauth_auto_launch').toUpperCase()}
|
title={$t('admin.oauth_auto_launch')}
|
||||||
subtitle={$t('admin.oauth_auto_launch_description')}
|
subtitle={$t('admin.oauth_auto_launch_description')}
|
||||||
disabled={disabled || !config.oauth.enabled}
|
disabled={disabled || !config.oauth.enabled}
|
||||||
bind:checked={config.oauth.autoLaunch}
|
bind:checked={config.oauth.autoLaunch}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<SettingSwitch
|
<SettingSwitch
|
||||||
title={$t('admin.oauth_mobile_redirect_uri_override').toUpperCase()}
|
title={$t('admin.oauth_mobile_redirect_uri_override')}
|
||||||
subtitle={$t('admin.oauth_mobile_redirect_uri_override_description', {
|
subtitle={$t('admin.oauth_mobile_redirect_uri_override_description', {
|
||||||
values: { callback: 'app.immich:///oauth-callback' },
|
values: { callback: 'app.immich:///oauth-callback' },
|
||||||
})}
|
})}
|
||||||
@@ -267,7 +267,7 @@
|
|||||||
{#if config.oauth.mobileOverrideEnabled}
|
{#if config.oauth.mobileOverrideEnabled}
|
||||||
<SettingInputField
|
<SettingInputField
|
||||||
inputType={SettingInputFieldType.TEXT}
|
inputType={SettingInputFieldType.TEXT}
|
||||||
label={$t('admin.oauth_mobile_redirect_uri').toUpperCase()}
|
label={$t('admin.oauth_mobile_redirect_uri')}
|
||||||
bind:value={config.oauth.mobileRedirectUri}
|
bind:value={config.oauth.mobileRedirectUri}
|
||||||
required={true}
|
required={true}
|
||||||
disabled={disabled || !config.oauth.enabled}
|
disabled={disabled || !config.oauth.enabled}
|
||||||
|
|||||||
@@ -184,7 +184,7 @@
|
|||||||
<h3 class="text-base font-medium text-immich-primary dark:text-immich-dark-primary">{$t('template')}</h3>
|
<h3 class="text-base font-medium text-immich-primary dark:text-immich-dark-primary">{$t('template')}</h3>
|
||||||
|
|
||||||
<div class="my-2 text-sm">
|
<div class="my-2 text-sm">
|
||||||
<h4>{$t('preview').toUpperCase()}</h4>
|
<h4 class="uppercase">{$t('preview')}</h4>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p class="text-sm">
|
<p class="text-sm">
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="mt-2 text-sm">
|
<div class="mt-2 text-sm">
|
||||||
<h4>{$t('date_and_time').toUpperCase()}</h4>
|
<h4 class="uppercase">{$t('date_and_time')}</h4>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- eslint-disable svelte/no-useless-mustaches -->
|
<!-- eslint-disable svelte/no-useless-mustaches -->
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="flex gap-[40px]">
|
<div class="flex gap-[40px]">
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-immich-primary dark:text-immich-dark-primary">{$t('year').toUpperCase()}</p>
|
<p class="uppercase font-medium text-immich-primary dark:text-immich-dark-primary">{$t('year')}</p>
|
||||||
<ul>
|
<ul>
|
||||||
{#each options.yearOptions as yearFormat, index (index)}
|
{#each options.yearOptions as yearFormat, index (index)}
|
||||||
<li>{'{{'}{yearFormat}{'}}'} - {getLuxonExample(yearFormat)}</li>
|
<li>{'{{'}{yearFormat}{'}}'} - {getLuxonExample(yearFormat)}</li>
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-immich-primary dark:text-immich-dark-primary">{$t('month').toUpperCase()}</p>
|
<p class="uppercase font-medium text-immich-primary dark:text-immich-dark-primary">{$t('month')}</p>
|
||||||
<ul>
|
<ul>
|
||||||
{#each options.monthOptions as monthFormat, index (index)}
|
{#each options.monthOptions as monthFormat, index (index)}
|
||||||
<li>{'{{'}{monthFormat}{'}}'} - {getLuxonExample(monthFormat)}</li>
|
<li>{'{{'}{monthFormat}{'}}'} - {getLuxonExample(monthFormat)}</li>
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-immich-primary dark:text-immich-dark-primary">{$t('week').toUpperCase()}</p>
|
<p class="uppercase font-medium text-immich-primary dark:text-immich-dark-primary">{$t('week')}</p>
|
||||||
<ul>
|
<ul>
|
||||||
{#each options.weekOptions as weekFormat, index (index)}
|
{#each options.weekOptions as weekFormat, index (index)}
|
||||||
<li>{'{{'}{weekFormat}{'}}'} - {getLuxonExample(weekFormat)}</li>
|
<li>{'{{'}{weekFormat}{'}}'} - {getLuxonExample(weekFormat)}</li>
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-immich-primary dark:text-immich-dark-primary">{$t('day').toUpperCase()}</p>
|
<p class="uppercase font-medium text-immich-primary dark:text-immich-dark-primary">{$t('day')}</p>
|
||||||
<ul>
|
<ul>
|
||||||
{#each options.dayOptions as dayFormat, index (index)}
|
{#each options.dayOptions as dayFormat, index (index)}
|
||||||
<li>{'{{'}{dayFormat}{'}}'} - {getLuxonExample(dayFormat)}</li>
|
<li>{'{{'}{dayFormat}{'}}'} - {getLuxonExample(dayFormat)}</li>
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-immich-primary dark:text-immich-dark-primary">{$t('hour').toUpperCase()}</p>
|
<p class="uppercase font-medium text-immich-primary dark:text-immich-dark-primary">{$t('hour')}</p>
|
||||||
<ul>
|
<ul>
|
||||||
{#each options.hourOptions as dayFormat, index (index)}
|
{#each options.hourOptions as dayFormat, index (index)}
|
||||||
<li>{'{{'}{dayFormat}{'}}'} - {getLuxonExample(dayFormat)}</li>
|
<li>{'{{'}{dayFormat}{'}}'} - {getLuxonExample(dayFormat)}</li>
|
||||||
@@ -72,7 +72,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-immich-primary dark:text-immich-dark-primary">{$t('minute').toUpperCase()}</p>
|
<p class="uppercase font-medium text-immich-primary dark:text-immich-dark-primary">{$t('minute')}</p>
|
||||||
<ul>
|
<ul>
|
||||||
{#each options.minuteOptions as dayFormat, index (index)}
|
{#each options.minuteOptions as dayFormat, index (index)}
|
||||||
<li>{'{{'}{dayFormat}{'}}'} - {getLuxonExample(dayFormat)}</li>
|
<li>{'{{'}{dayFormat}{'}}'} - {getLuxonExample(dayFormat)}</li>
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-immich-primary dark:text-immich-dark-primary">{$t('second').toUpperCase()}</p>
|
<p class="uppercase font-medium text-immich-primary dark:text-immich-dark-primary">{$t('second')}</p>
|
||||||
<ul>
|
<ul>
|
||||||
{#each options.secondOptions as dayFormat, index (index)}
|
{#each options.secondOptions as dayFormat, index (index)}
|
||||||
<li>{'{{'}{dayFormat}{'}}'} - {getLuxonExample(dayFormat)}</li>
|
<li>{'{{'}{dayFormat}{'}}'} - {getLuxonExample(dayFormat)}</li>
|
||||||
|
|||||||
@@ -3,13 +3,13 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="mt-4 text-sm">
|
<div class="mt-4 text-sm">
|
||||||
<h4>{$t('other_variables').toUpperCase()}</h4>
|
<h4 class="uppercase">{$t('other_variables')}</h4>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="p-4 mt-2 text-xs bg-gray-200 rounded-lg dark:bg-gray-700 dark:text-immich-dark-fg">
|
<div class="p-4 mt-2 text-xs bg-gray-200 rounded-lg dark:bg-gray-700 dark:text-immich-dark-fg">
|
||||||
<div class="flex gap-[50px]">
|
<div class="flex gap-[50px]">
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-immich-primary dark:text-immich-dark-primary">{$t('filename').toUpperCase()}</p>
|
<p class="uppercase font-medium text-immich-primary dark:text-immich-dark-primary">{$t('filename')}</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>{`{{filename}}`} - IMG_123</li>
|
<li>{`{{filename}}`} - IMG_123</li>
|
||||||
<li>{`{{ext}}`} - jpg</li>
|
<li>{`{{ext}}`} - jpg</li>
|
||||||
@@ -17,14 +17,14 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-immich-primary dark:text-immich-dark-primary">{$t('filetype').toUpperCase()}</p>
|
<p class="uppercase font-medium text-immich-primary dark:text-immich-dark-primary">{$t('filetype')}</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>{`{{filetype}}`} - VID or IMG</li>
|
<li>{`{{filetype}}`} - VID or IMG</li>
|
||||||
<li>{`{{filetypefull}}`} - VIDEO or IMAGE</li>
|
<li>{`{{filetypefull}}`} - VIDEO or IMAGE</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p class="font-medium text-immich-primary dark:text-immich-dark-primary uppercase">{$t('other').toUpperCase()}</p>
|
<p class="uppercase font-medium text-immich-primary dark:text-immich-dark-primary">{$t('other')}</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>{`{{assetId}}`} - Asset ID</li>
|
<li>{`{{assetId}}`} - Asset ID</li>
|
||||||
<li>{`{{assetIdShort}}`} - Asset ID (last 12 characters)</li>
|
<li>{`{{assetIdShort}}`} - Asset ID (last 12 characters)</li>
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
{#if isOwner && !authManager.isSharedLink}
|
{#if isOwner && !authManager.isSharedLink}
|
||||||
<section class="px-4 mt-4">
|
<section class="px-4 mt-4">
|
||||||
<div class="flex h-10 w-full items-center justify-between text-sm">
|
<div class="flex h-10 w-full items-center justify-between text-sm">
|
||||||
<h2>{$t('tags').toUpperCase()}</h2>
|
<h2 class="uppercase">{$t('tags')}</h2>
|
||||||
</div>
|
</div>
|
||||||
<section class="flex flex-wrap pt-2 gap-1" data-testid="detail-panel-tags">
|
<section class="flex flex-wrap pt-2 gap-1" data-testid="detail-panel-tags">
|
||||||
{#each tags as tag (tag.id)}
|
{#each tags as tag (tag.id)}
|
||||||
|
|||||||
@@ -168,7 +168,7 @@
|
|||||||
{#if !authManager.isSharedLink && isOwner}
|
{#if !authManager.isSharedLink && isOwner}
|
||||||
<section class="px-4 pt-4 text-sm">
|
<section class="px-4 pt-4 text-sm">
|
||||||
<div class="flex h-10 w-full items-center justify-between">
|
<div class="flex h-10 w-full items-center justify-between">
|
||||||
<h2>{$t('people').toUpperCase()}</h2>
|
<h2 class="uppercase">{$t('people')}</h2>
|
||||||
<div class="flex gap-2 items-center">
|
<div class="flex gap-2 items-center">
|
||||||
{#if people.some((person) => person.isHidden)}
|
{#if people.some((person) => person.isHidden)}
|
||||||
<IconButton
|
<IconButton
|
||||||
@@ -269,10 +269,10 @@
|
|||||||
<div class="px-4 py-4">
|
<div class="px-4 py-4">
|
||||||
{#if asset.exifInfo}
|
{#if asset.exifInfo}
|
||||||
<div class="flex h-10 w-full items-center justify-between text-sm">
|
<div class="flex h-10 w-full items-center justify-between text-sm">
|
||||||
<h2>{$t('details').toUpperCase()}</h2>
|
<h2 class="uppercase">{$t('details')}</h2>
|
||||||
</div>
|
</div>
|
||||||
{:else}
|
{:else}
|
||||||
<p class="text-sm">{$t('no_exif_info_available').toUpperCase()}</p>
|
<p class="uppercase text-sm">{$t('no_exif_info_available')}</p>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if dateTime}
|
{#if dateTime}
|
||||||
@@ -503,7 +503,7 @@
|
|||||||
|
|
||||||
{#if currentAlbum && currentAlbum.albumUsers.length > 0 && asset.owner}
|
{#if currentAlbum && currentAlbum.albumUsers.length > 0 && asset.owner}
|
||||||
<section class="px-6 dark:text-immich-dark-fg mt-4">
|
<section class="px-6 dark:text-immich-dark-fg mt-4">
|
||||||
<p class="text-sm">{$t('shared_by').toUpperCase()}</p>
|
<p class="uppercase text-sm">{$t('shared_by')}</p>
|
||||||
<div class="flex gap-4 pt-4">
|
<div class="flex gap-4 pt-4">
|
||||||
<div>
|
<div>
|
||||||
<UserAvatar user={asset.owner} size="md" />
|
<UserAvatar user={asset.owner} size="md" />
|
||||||
@@ -520,7 +520,7 @@
|
|||||||
|
|
||||||
{#if albums.length > 0}
|
{#if albums.length > 0}
|
||||||
<section class="px-6 pt-6 dark:text-immich-dark-fg">
|
<section class="px-6 pt-6 dark:text-immich-dark-fg">
|
||||||
<p class="pb-4 text-sm">{$t('appears_in').toUpperCase()}</p>
|
<p class="uppercase pb-4 text-sm">{$t('appears_in')}</p>
|
||||||
{#each albums as album (album.id)}
|
{#each albums as album (album.id)}
|
||||||
<a href="{AppRoute.ALBUMS}/{album.id}">
|
<a href="{AppRoute.ALBUMS}/{album.id}">
|
||||||
<div class="flex gap-4 pt-2 hover:cursor-pointer items-center">
|
<div class="flex gap-4 pt-2 hover:cursor-pointer items-center">
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
transition:fly={{ x: -100, duration: 350 }}
|
transition:fly={{ x: -100, duration: 350 }}
|
||||||
class="fixed bottom-10 start-2 max-h-[270px] w-[315px] rounded-2xl border p-4 text-sm shadow-sm bg-light"
|
class="fixed bottom-10 start-2 max-h-[270px] w-[315px] rounded-2xl border p-4 text-sm shadow-sm bg-light"
|
||||||
>
|
>
|
||||||
<p class="mb-2 text-xs text-gray-500">{$t('downloading').toUpperCase()}</p>
|
<p class="uppercase mb-2 text-xs text-gray-500">{$t('downloading')}</p>
|
||||||
<div class="my-2 mb-2 flex max-h-[200px] flex-col overflow-y-auto text-sm">
|
<div class="my-2 mb-2 flex max-h-[200px] flex-col overflow-y-auto text-sm">
|
||||||
{#each Object.keys(downloadManager.assets) as downloadKey (downloadKey)}
|
{#each Object.keys(downloadManager.assets) as downloadKey (downloadKey)}
|
||||||
{@const download = downloadManager.assets[downloadKey]}
|
{@const download = downloadManager.assets[downloadKey]}
|
||||||
|
|||||||
@@ -135,7 +135,7 @@
|
|||||||
|
|
||||||
<div class="mt-3 px-4 py-4">
|
<div class="mt-3 px-4 py-4">
|
||||||
<div class="flex h-10 w-full items-center justify-between text-sm">
|
<div class="flex h-10 w-full items-center justify-between text-sm">
|
||||||
<h2>{$t('editor_crop_tool_h2_aspect_ratios').toUpperCase()}</h2>
|
<h2 class="uppercase">{$t('editor_crop_tool_h2_aspect_ratios')}</h2>
|
||||||
</div>
|
</div>
|
||||||
{#each sizesRows as sizesRow, index (index)}
|
{#each sizesRows as sizesRow, index (index)}
|
||||||
<ul class="flex-wrap flex-row flex gap-x-6 py-2 justify-evenly">
|
<ul class="flex-wrap flex-row flex gap-x-6 py-2 justify-evenly">
|
||||||
@@ -145,7 +145,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
{/each}
|
{/each}
|
||||||
<div class="flex h-10 w-full items-center justify-between text-sm">
|
<div class="flex h-10 w-full items-center justify-between text-sm">
|
||||||
<h2>{$t('editor_crop_tool_h2_rotation').toUpperCase()}</h2>
|
<h2 class="uppercase">{$t('editor_crop_tool_h2_rotation')}</h2>
|
||||||
</div>
|
</div>
|
||||||
<ul class="flex-wrap flex-row flex gap-x-6 gap-y-4 justify-center">
|
<ul class="flex-wrap flex-row flex gap-x-6 gap-y-4 justify-center">
|
||||||
<li>
|
<li>
|
||||||
|
|||||||
@@ -469,7 +469,7 @@
|
|||||||
|
|
||||||
{#if current.previousMemory}
|
{#if current.previousMemory}
|
||||||
<div class="absolute bottom-4 end-4 text-start text-white">
|
<div class="absolute bottom-4 end-4 text-start text-white">
|
||||||
<p class="text-xs font-semibold text-gray-200">{$t('previous').toUpperCase()}</p>
|
<p class="uppercase text-xs font-semibold text-gray-200">{$t('previous')}</p>
|
||||||
<p class="text-xl">{$memoryLaneTitle(current.previousMemory)}</p>
|
<p class="text-xl">{$memoryLaneTitle(current.previousMemory)}</p>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
@@ -618,7 +618,7 @@
|
|||||||
|
|
||||||
{#if current.nextMemory}
|
{#if current.nextMemory}
|
||||||
<div class="absolute bottom-4 start-4 text-start text-white">
|
<div class="absolute bottom-4 start-4 text-start text-white">
|
||||||
<p class="text-xs font-semibold text-gray-200">{$t('up_next').toUpperCase()}</p>
|
<p class="uppercase text-xs font-semibold text-gray-200">{$t('up_next')}</p>
|
||||||
<p class="text-xl">{$memoryLaneTitle(current.nextMemory)}</p>
|
<p class="text-xl">{$memoryLaneTitle(current.nextMemory)}</p>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -40,8 +40,8 @@
|
|||||||
<Icon path={icon} size="30" class="text-immich-primary dark:text-immich-dark-primary" />
|
<Icon path={icon} size="30" class="text-immich-primary dark:text-immich-dark-primary" />
|
||||||
{/if}
|
{/if}
|
||||||
{#if title}
|
{#if title}
|
||||||
<p class="text-xl text-immich-primary dark:text-immich-dark-primary">
|
<p class="uppercase text-xl text-immich-primary dark:text-immich-dark-primary">
|
||||||
{title.toUpperCase()}
|
{title}
|
||||||
</p>
|
</p>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
class="flex flex-col place-items-center place-content-center justify-around h-full w-full text-immich-primary"
|
class="flex flex-col place-items-center place-content-center justify-around h-full w-full text-immich-primary"
|
||||||
>
|
>
|
||||||
<Icon path={sunPath} viewBox={sunViewBox} size="96" />
|
<Icon path={sunPath} viewBox={sunViewBox} size="96" />
|
||||||
<p class="font-semibold text-4xl">{$t('light').toUpperCase()}</p>
|
<p class="uppercase font-semibold text-4xl">{$t('light')}</p>
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
class="flex flex-col place-items-center place-content-center justify-around h-full w-full text-immich-dark-primary"
|
class="flex flex-col place-items-center place-content-center justify-around h-full w-full text-immich-dark-primary"
|
||||||
>
|
>
|
||||||
<Icon path={moonPath} viewBox={moonViewBox} size="96" />
|
<Icon path={moonPath} viewBox={moonViewBox} size="96" />
|
||||||
<p class="font-semibold text-4xl">{$t('dark').toUpperCase()}</p>
|
<p class="uppercase font-semibold text-4xl">{$t('dark')}</p>
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,44 +1,12 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { afterNavigate, beforeNavigate, goto } from '$app/navigation';
|
import Timeline from '$lib/components/timeline/timeline.svelte';
|
||||||
import { page } from '$app/stores';
|
import type { AssetAction } from '$lib/constants';
|
||||||
import { resizeObserver, type OnResizeCallback } from '$lib/actions/resize-observer';
|
|
||||||
import { shortcuts, type ShortcutOptions } from '$lib/actions/shortcut';
|
|
||||||
import type { Action } from '$lib/components/asset-viewer/actions/action';
|
|
||||||
import {
|
|
||||||
setFocusToAsset as setFocusAssetInit,
|
|
||||||
setFocusTo as setFocusToInit,
|
|
||||||
} from '$lib/components/photos-page/actions/focus-actions';
|
|
||||||
import Skeleton from '$lib/components/photos-page/skeleton.svelte';
|
|
||||||
import ChangeDate from '$lib/components/shared-components/change-date.svelte';
|
|
||||||
import Scrubber from '$lib/components/shared-components/scrubber/scrubber.svelte';
|
|
||||||
import { AppRoute, AssetAction } from '$lib/constants';
|
|
||||||
import { authManager } from '$lib/managers/auth-manager.svelte';
|
|
||||||
import type { DayGroup } from '$lib/managers/timeline-manager/day-group.svelte';
|
import type { DayGroup } from '$lib/managers/timeline-manager/day-group.svelte';
|
||||||
import type { MonthGroup } from '$lib/managers/timeline-manager/month-group.svelte';
|
import type { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte';
|
||||||
import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte';
|
|
||||||
import type { TimelineAsset } from '$lib/managers/timeline-manager/types';
|
import type { TimelineAsset } from '$lib/managers/timeline-manager/types';
|
||||||
import { assetsSnapshot } from '$lib/managers/timeline-manager/utils.svelte';
|
|
||||||
import ShortcutsModal from '$lib/modals/ShortcutsModal.svelte';
|
|
||||||
import type { AssetInteraction } from '$lib/stores/asset-interaction.svelte';
|
import type { AssetInteraction } from '$lib/stores/asset-interaction.svelte';
|
||||||
import { assetViewingStore } from '$lib/stores/asset-viewing.store';
|
import type { AlbumResponseDto, PersonResponseDto } from '@immich/sdk';
|
||||||
import { isSelectingAllAssets } from '$lib/stores/assets-store.svelte';
|
import type { Snippet } from 'svelte';
|
||||||
import { mobileDevice } from '$lib/stores/mobile-device.svelte';
|
|
||||||
import { showDeleteModal } from '$lib/stores/preferences.store';
|
|
||||||
import { searchStore } from '$lib/stores/search.svelte';
|
|
||||||
import { featureFlags } from '$lib/stores/server-config.store';
|
|
||||||
import { handlePromiseError } from '$lib/utils';
|
|
||||||
import { deleteAssets, updateStackedAssetInTimeline, updateUnstackedAssetInTimeline } from '$lib/utils/actions';
|
|
||||||
import { archiveAssets, cancelMultiselect, selectAllAssets, stackAssets } from '$lib/utils/asset-utils';
|
|
||||||
import { navigate } from '$lib/utils/navigation';
|
|
||||||
import { getTimes, toTimelineAsset, type ScrubberListener, type TimelineYearMonth } from '$lib/utils/timeline-util';
|
|
||||||
import { AssetVisibility, getAssetInfo, type AlbumResponseDto, type PersonResponseDto } from '@immich/sdk';
|
|
||||||
import { modalManager } from '@immich/ui';
|
|
||||||
import { DateTime } from 'luxon';
|
|
||||||
import { onMount, type Snippet } from 'svelte';
|
|
||||||
import type { UpdatePayload } from 'vite';
|
|
||||||
import Portal from '../shared-components/portal/portal.svelte';
|
|
||||||
import AssetDateGroup from './asset-date-group.svelte';
|
|
||||||
import DeleteAssetDialog from './delete-asset-dialog.svelte';
|
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
isSelectionMode?: boolean;
|
isSelectionMode?: boolean;
|
||||||
@@ -86,7 +54,7 @@
|
|||||||
enableRouting,
|
enableRouting,
|
||||||
timelineManager = $bindable(),
|
timelineManager = $bindable(),
|
||||||
assetInteraction,
|
assetInteraction,
|
||||||
removeAction = null,
|
removeAction,
|
||||||
withStacked = false,
|
withStacked = false,
|
||||||
showArchiveIcon = false,
|
showArchiveIcon = false,
|
||||||
isShared = false,
|
isShared = false,
|
||||||
@@ -101,908 +69,34 @@
|
|||||||
onThumbnailClick,
|
onThumbnailClick,
|
||||||
}: Props = $props();
|
}: Props = $props();
|
||||||
|
|
||||||
let { isViewing: showAssetViewer, asset: viewingAsset, preloadAssets, gridScrollTarget, mutex } = assetViewingStore;
|
const onAssetOpen = (dayGroup: DayGroup, asset: TimelineAsset, defaultAssetOpen: () => void) => {
|
||||||
|
if (onThumbnailClick) {
|
||||||
let element: HTMLElement | undefined = $state();
|
onThumbnailClick(asset, timelineManager, dayGroup, () => defaultAssetOpen());
|
||||||
|
|
||||||
let timelineElement: HTMLElement | undefined = $state();
|
|
||||||
let showSkeleton = $state(true);
|
|
||||||
let isShowSelectDate = $state(false);
|
|
||||||
let scrubberMonthPercent = $state(0);
|
|
||||||
let scrubberMonth: { year: number; month: number } | undefined = $state(undefined);
|
|
||||||
let scrubOverallPercent: number = $state(0);
|
|
||||||
let scrubberWidth = $state(0);
|
|
||||||
|
|
||||||
// 60 is the bottom spacer element at 60px
|
|
||||||
let bottomSectionHeight = 60;
|
|
||||||
let leadout = $state(false);
|
|
||||||
|
|
||||||
const maxMd = $derived(mobileDevice.maxMd);
|
|
||||||
const usingMobileDevice = $derived(mobileDevice.pointerCoarse);
|
|
||||||
|
|
||||||
$effect(() => {
|
|
||||||
const layoutOptions = maxMd
|
|
||||||
? {
|
|
||||||
rowHeight: 100,
|
|
||||||
headerHeight: 32,
|
|
||||||
}
|
|
||||||
: {
|
|
||||||
rowHeight: 235,
|
|
||||||
headerHeight: 48,
|
|
||||||
};
|
|
||||||
timelineManager.setLayoutOptions(layoutOptions);
|
|
||||||
});
|
|
||||||
|
|
||||||
const scrollTo = (top: number) => {
|
|
||||||
if (element) {
|
|
||||||
element.scrollTo({ top });
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const scrollTop = (top: number) => {
|
|
||||||
if (element) {
|
|
||||||
element.scrollTop = top;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const scrollBy = (y: number) => {
|
|
||||||
if (element) {
|
|
||||||
element.scrollBy(0, y);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const scrollToTop = () => {
|
|
||||||
scrollTo(0);
|
|
||||||
};
|
|
||||||
|
|
||||||
const getAssetHeight = (assetId: string, monthGroup: MonthGroup) => {
|
|
||||||
// the following method may trigger any layouts, so need to
|
|
||||||
// handle any scroll compensation that may have been set
|
|
||||||
const height = monthGroup!.findAssetAbsolutePosition(assetId);
|
|
||||||
|
|
||||||
while (timelineManager.scrollCompensation.monthGroup) {
|
|
||||||
handleScrollCompensation(timelineManager.scrollCompensation);
|
|
||||||
timelineManager.clearScrollCompensation();
|
|
||||||
}
|
|
||||||
return height;
|
|
||||||
};
|
|
||||||
|
|
||||||
const assetIsVisible = (assetTop: number): boolean => {
|
|
||||||
if (!element) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const { clientHeight, scrollTop } = element;
|
|
||||||
return assetTop >= scrollTop && assetTop < scrollTop + clientHeight;
|
|
||||||
};
|
|
||||||
|
|
||||||
const scrollToAssetId = async (assetId: string) => {
|
|
||||||
const monthGroup = await timelineManager.findMonthGroupForAsset(assetId);
|
|
||||||
if (!monthGroup) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const height = getAssetHeight(assetId, monthGroup);
|
|
||||||
|
|
||||||
// If the asset is already visible, then don't scroll.
|
|
||||||
if (assetIsVisible(height)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
scrollTo(height);
|
|
||||||
updateSlidingWindow();
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
const scrollToAsset = (asset: TimelineAsset) => {
|
|
||||||
const monthGroup = timelineManager.getMonthGroupByAssetId(asset.id);
|
|
||||||
if (!monthGroup) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
const height = getAssetHeight(asset.id, monthGroup);
|
|
||||||
scrollTo(height);
|
|
||||||
updateSlidingWindow();
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
const completeNav = async () => {
|
|
||||||
const scrollTarget = $gridScrollTarget?.at;
|
|
||||||
let scrolled = false;
|
|
||||||
if (scrollTarget) {
|
|
||||||
scrolled = await scrollToAssetId(scrollTarget);
|
|
||||||
}
|
|
||||||
if (!scrolled) {
|
|
||||||
// if the asset is not found, scroll to the top
|
|
||||||
scrollToTop();
|
|
||||||
}
|
|
||||||
showSkeleton = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
beforeNavigate(() => (timelineManager.suspendTransitions = true));
|
|
||||||
|
|
||||||
afterNavigate((nav) => {
|
|
||||||
const { complete } = nav;
|
|
||||||
complete.then(completeNav, completeNav);
|
|
||||||
});
|
|
||||||
|
|
||||||
const hmrSupport = () => {
|
|
||||||
// when hmr happens, skeleton is initialized to true by default
|
|
||||||
// normally, loading asset-grid is part of a navigation event, and the completion of
|
|
||||||
// that event triggers a scroll-to-asset, if necessary, when then clears the skeleton.
|
|
||||||
// this handler will run the navigation/scroll-to-asset handler when hmr is performed,
|
|
||||||
// preventing skeleton from showing after hmr
|
|
||||||
if (import.meta && import.meta.hot) {
|
|
||||||
const afterApdate = (payload: UpdatePayload) => {
|
|
||||||
const assetGridUpdate = payload.updates.some(
|
|
||||||
(update) => update.path.endsWith('asset-grid.svelte') || update.path.endsWith('assets-store.ts'),
|
|
||||||
);
|
|
||||||
|
|
||||||
if (assetGridUpdate) {
|
|
||||||
setTimeout(() => {
|
|
||||||
const asset = $page.url.searchParams.get('at');
|
|
||||||
if (asset) {
|
|
||||||
$gridScrollTarget = { at: asset };
|
|
||||||
void navigate(
|
|
||||||
{ targetRoute: 'current', assetId: null, assetGridRouteSearchParams: $gridScrollTarget },
|
|
||||||
{ replaceState: true, forceNavigate: true },
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
scrollToTop();
|
|
||||||
}
|
|
||||||
showSkeleton = false;
|
|
||||||
}, 500);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
import.meta.hot?.on('vite:afterUpdate', afterApdate);
|
|
||||||
import.meta.hot?.on('vite:beforeUpdate', (payload) => {
|
|
||||||
const assetGridUpdate = payload.updates.some((update) => update.path.endsWith('asset-grid.svelte'));
|
|
||||||
if (assetGridUpdate) {
|
|
||||||
timelineManager.destroy();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return () => import.meta.hot?.off('vite:afterUpdate', afterApdate);
|
|
||||||
}
|
|
||||||
return () => void 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
const updateIsScrolling = () => (timelineManager.scrolling = true);
|
|
||||||
// note: don't throttle, debounch, or otherwise do this function async - it causes flicker
|
|
||||||
const updateSlidingWindow = () => timelineManager.updateSlidingWindow(element?.scrollTop || 0);
|
|
||||||
|
|
||||||
const handleScrollCompensation = ({ heightDelta, scrollTop }: { heightDelta?: number; scrollTop?: number }) => {
|
|
||||||
if (heightDelta !== undefined) {
|
|
||||||
scrollBy(heightDelta);
|
|
||||||
} else if (scrollTop !== undefined) {
|
|
||||||
scrollTo(scrollTop);
|
|
||||||
}
|
|
||||||
// Yes, updateSlideWindow() is called by the onScroll event triggered as a result of
|
|
||||||
// the above calls. However, this delay is enough time to set the intersecting property
|
|
||||||
// of the monthGroup to false, then true, which causes the DOM nodes to be recreated,
|
|
||||||
// causing bad perf, and also, disrupting focus of those elements.
|
|
||||||
updateSlidingWindow();
|
|
||||||
};
|
|
||||||
|
|
||||||
const topSectionResizeObserver: OnResizeCallback = ({ height }) => (timelineManager.topSectionHeight = height);
|
|
||||||
|
|
||||||
onMount(() => {
|
|
||||||
if (!enableRouting) {
|
|
||||||
showSkeleton = false;
|
|
||||||
}
|
|
||||||
const disposeHmr = hmrSupport();
|
|
||||||
return () => {
|
|
||||||
disposeHmr();
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
const getMaxScrollPercent = () => {
|
|
||||||
const totalHeight = timelineManager.timelineHeight + bottomSectionHeight + timelineManager.topSectionHeight;
|
|
||||||
return (totalHeight - timelineManager.viewportHeight) / totalHeight;
|
|
||||||
};
|
|
||||||
|
|
||||||
const getMaxScroll = () => {
|
|
||||||
if (!element || !timelineElement) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return (
|
|
||||||
timelineManager.topSectionHeight + bottomSectionHeight + (timelineElement.clientHeight - element.clientHeight)
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const scrollToMonthGroupAndOffset = (monthGroup: MonthGroup, monthGroupScrollPercent: number) => {
|
|
||||||
const topOffset = monthGroup.top;
|
|
||||||
const maxScrollPercent = getMaxScrollPercent();
|
|
||||||
const delta = monthGroup.height * monthGroupScrollPercent;
|
|
||||||
const scrollToTop = (topOffset + delta) * maxScrollPercent;
|
|
||||||
|
|
||||||
scrollTop(scrollToTop);
|
|
||||||
};
|
|
||||||
|
|
||||||
// note: don't throttle, debounch, or otherwise make this function async - it causes flicker
|
|
||||||
const onScrub: ScrubberListener = (
|
|
||||||
scrubMonth: { year: number; month: number },
|
|
||||||
overallScrollPercent: number,
|
|
||||||
scrubberMonthScrollPercent: number,
|
|
||||||
) => {
|
|
||||||
if (!scrubMonth || timelineManager.timelineHeight < timelineManager.viewportHeight * 2) {
|
|
||||||
// edge case - scroll limited due to size of content, must adjust - use use the overall percent instead
|
|
||||||
const maxScroll = getMaxScroll();
|
|
||||||
const offset = maxScroll * overallScrollPercent;
|
|
||||||
scrollTop(offset);
|
|
||||||
} else {
|
|
||||||
const monthGroup = timelineManager.months.find(
|
|
||||||
({ yearMonth: { year, month } }) => year === scrubMonth.year && month === scrubMonth.month,
|
|
||||||
);
|
|
||||||
if (!monthGroup) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
scrollToMonthGroupAndOffset(monthGroup, scrubberMonthScrollPercent);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// note: don't throttle, debounch, or otherwise make this function async - it causes flicker
|
|
||||||
const handleTimelineScroll = () => {
|
|
||||||
leadout = false;
|
|
||||||
|
|
||||||
if (!element) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
defaultAssetOpen();
|
||||||
if (timelineManager.timelineHeight < timelineManager.viewportHeight * 2) {
|
|
||||||
// edge case - scroll limited due to size of content, must adjust - use the overall percent instead
|
|
||||||
const maxScroll = getMaxScroll();
|
|
||||||
scrubOverallPercent = Math.min(1, element.scrollTop / maxScroll);
|
|
||||||
|
|
||||||
scrubberMonth = undefined;
|
|
||||||
scrubberMonthPercent = 0;
|
|
||||||
} else {
|
|
||||||
let top = element.scrollTop;
|
|
||||||
if (top < timelineManager.topSectionHeight) {
|
|
||||||
// in the lead-in area
|
|
||||||
scrubberMonth = undefined;
|
|
||||||
scrubberMonthPercent = 0;
|
|
||||||
const maxScroll = getMaxScroll();
|
|
||||||
|
|
||||||
scrubOverallPercent = Math.min(1, element.scrollTop / maxScroll);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let maxScrollPercent = getMaxScrollPercent();
|
|
||||||
let found = false;
|
|
||||||
|
|
||||||
const monthsLength = timelineManager.months.length;
|
|
||||||
for (let i = -1; i < monthsLength + 1; i++) {
|
|
||||||
let monthGroup: TimelineYearMonth | undefined;
|
|
||||||
let monthGroupHeight = 0;
|
|
||||||
if (i === -1) {
|
|
||||||
// lead-in
|
|
||||||
monthGroupHeight = timelineManager.topSectionHeight;
|
|
||||||
} else if (i === monthsLength) {
|
|
||||||
// lead-out
|
|
||||||
monthGroupHeight = bottomSectionHeight;
|
|
||||||
} else {
|
|
||||||
monthGroup = timelineManager.months[i].yearMonth;
|
|
||||||
monthGroupHeight = timelineManager.months[i].height;
|
|
||||||
}
|
|
||||||
|
|
||||||
let next = top - monthGroupHeight * maxScrollPercent;
|
|
||||||
// instead of checking for < 0, add a little wiggle room for subpixel resolution
|
|
||||||
if (next < -1 && monthGroup) {
|
|
||||||
scrubberMonth = monthGroup;
|
|
||||||
|
|
||||||
// allowing next to be at least 1 may cause percent to go negative, so ensure positive percentage
|
|
||||||
scrubberMonthPercent = Math.max(0, top / (monthGroupHeight * maxScrollPercent));
|
|
||||||
|
|
||||||
// compensate for lost precision/rounding errors advance to the next bucket, if present
|
|
||||||
if (scrubberMonthPercent > 0.9999 && i + 1 < monthsLength - 1) {
|
|
||||||
scrubberMonth = timelineManager.months[i + 1].yearMonth;
|
|
||||||
scrubberMonthPercent = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
top = next;
|
|
||||||
}
|
|
||||||
if (!found) {
|
|
||||||
leadout = true;
|
|
||||||
scrubberMonth = undefined;
|
|
||||||
scrubberMonthPercent = 0;
|
|
||||||
scrubOverallPercent = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const trashOrDelete = async (force: boolean = false) => {
|
|
||||||
isShowDeleteConfirmation = false;
|
|
||||||
await deleteAssets(
|
|
||||||
!(isTrashEnabled && !force),
|
|
||||||
(assetIds) => timelineManager.removeAssets(assetIds),
|
|
||||||
assetInteraction.selectedAssets,
|
|
||||||
!isTrashEnabled || force ? undefined : (assets) => timelineManager.addAssets(assets),
|
|
||||||
);
|
|
||||||
assetInteraction.clearMultiselect();
|
|
||||||
};
|
|
||||||
|
|
||||||
const onDelete = () => {
|
|
||||||
const hasTrashedAsset = assetInteraction.selectedAssets.some((asset) => asset.isTrashed);
|
|
||||||
|
|
||||||
if ($showDeleteModal && (!isTrashEnabled || hasTrashedAsset)) {
|
|
||||||
isShowDeleteConfirmation = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
handlePromiseError(trashOrDelete(hasTrashedAsset));
|
|
||||||
};
|
|
||||||
|
|
||||||
const onForceDelete = () => {
|
|
||||||
if ($showDeleteModal) {
|
|
||||||
isShowDeleteConfirmation = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
handlePromiseError(trashOrDelete(true));
|
|
||||||
};
|
|
||||||
|
|
||||||
const onStackAssets = async () => {
|
|
||||||
const result = await stackAssets(assetInteraction.selectedAssets);
|
|
||||||
|
|
||||||
updateStackedAssetInTimeline(timelineManager, result);
|
|
||||||
|
|
||||||
onEscape();
|
|
||||||
};
|
|
||||||
|
|
||||||
const toggleArchive = async () => {
|
|
||||||
const visibility = assetInteraction.isAllArchived ? AssetVisibility.Timeline : AssetVisibility.Archive;
|
|
||||||
const ids = await archiveAssets(assetInteraction.selectedAssets, visibility);
|
|
||||||
timelineManager.updateAssetOperation(ids, (asset) => {
|
|
||||||
asset.visibility = visibility;
|
|
||||||
return { remove: false };
|
|
||||||
});
|
|
||||||
deselectAllAssets();
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleSelectAsset = (asset: TimelineAsset) => {
|
|
||||||
if (!timelineManager.albumAssets.has(asset.id)) {
|
|
||||||
assetInteraction.selectAsset(asset);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const handlePrevious = async () => {
|
|
||||||
const release = await mutex.acquire();
|
|
||||||
const laterAsset = await timelineManager.getLaterAsset($viewingAsset);
|
|
||||||
|
|
||||||
if (laterAsset) {
|
|
||||||
const preloadAsset = await timelineManager.getLaterAsset(laterAsset);
|
|
||||||
const asset = await getAssetInfo({ ...authManager.params, id: laterAsset.id });
|
|
||||||
assetViewingStore.setAsset(asset, preloadAsset ? [preloadAsset] : []);
|
|
||||||
await navigate({ targetRoute: 'current', assetId: laterAsset.id });
|
|
||||||
}
|
|
||||||
|
|
||||||
release();
|
|
||||||
return !!laterAsset;
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleNext = async () => {
|
|
||||||
const release = await mutex.acquire();
|
|
||||||
const earlierAsset = await timelineManager.getEarlierAsset($viewingAsset);
|
|
||||||
|
|
||||||
if (earlierAsset) {
|
|
||||||
const preloadAsset = await timelineManager.getEarlierAsset(earlierAsset);
|
|
||||||
const asset = await getAssetInfo({ ...authManager.params, id: earlierAsset.id });
|
|
||||||
assetViewingStore.setAsset(asset, preloadAsset ? [preloadAsset] : []);
|
|
||||||
await navigate({ targetRoute: 'current', assetId: earlierAsset.id });
|
|
||||||
}
|
|
||||||
|
|
||||||
release();
|
|
||||||
return !!earlierAsset;
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleRandom = async () => {
|
|
||||||
const randomAsset = await timelineManager.getRandomAsset();
|
|
||||||
|
|
||||||
if (randomAsset) {
|
|
||||||
const asset = await getAssetInfo({ ...authManager.params, id: randomAsset.id });
|
|
||||||
assetViewingStore.setAsset(asset);
|
|
||||||
await navigate({ targetRoute: 'current', assetId: randomAsset.id });
|
|
||||||
return asset;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleClose = async (asset: { id: string }) => {
|
|
||||||
assetViewingStore.showAssetViewer(false);
|
|
||||||
showSkeleton = true;
|
|
||||||
$gridScrollTarget = { at: asset.id };
|
|
||||||
await navigate({ targetRoute: 'current', assetId: null, assetGridRouteSearchParams: $gridScrollTarget });
|
|
||||||
};
|
|
||||||
|
|
||||||
const handlePreAction = async (action: Action) => {
|
|
||||||
switch (action.type) {
|
|
||||||
case removeAction:
|
|
||||||
case AssetAction.TRASH:
|
|
||||||
case AssetAction.RESTORE:
|
|
||||||
case AssetAction.DELETE:
|
|
||||||
case AssetAction.ARCHIVE:
|
|
||||||
case AssetAction.SET_VISIBILITY_LOCKED:
|
|
||||||
case AssetAction.SET_VISIBILITY_TIMELINE: {
|
|
||||||
// find the next asset to show or close the viewer
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
||||||
(await handleNext()) || (await handlePrevious()) || (await handleClose(action.asset));
|
|
||||||
|
|
||||||
// delete after find the next one
|
|
||||||
timelineManager.removeAssets([action.asset.id]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const handleAction = (action: Action) => {
|
|
||||||
switch (action.type) {
|
|
||||||
case AssetAction.ARCHIVE:
|
|
||||||
case AssetAction.UNARCHIVE:
|
|
||||||
case AssetAction.FAVORITE:
|
|
||||||
case AssetAction.UNFAVORITE: {
|
|
||||||
timelineManager.updateAssets([action.asset]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case AssetAction.ADD: {
|
|
||||||
timelineManager.addAssets([action.asset]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case AssetAction.UNSTACK: {
|
|
||||||
updateUnstackedAssetInTimeline(timelineManager, action.assets);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case AssetAction.REMOVE_ASSET_FROM_STACK: {
|
|
||||||
timelineManager.addAssets([toTimelineAsset(action.asset)]);
|
|
||||||
if (action.stack) {
|
|
||||||
//Have to unstack then restack assets in timeline in order to update the stack count in the timeline.
|
|
||||||
updateUnstackedAssetInTimeline(
|
|
||||||
timelineManager,
|
|
||||||
action.stack.assets.map((asset) => toTimelineAsset(asset)),
|
|
||||||
);
|
|
||||||
updateStackedAssetInTimeline(timelineManager, {
|
|
||||||
stack: action.stack,
|
|
||||||
toDeleteIds: action.stack.assets
|
|
||||||
.filter((asset) => asset.id !== action.stack?.primaryAssetId)
|
|
||||||
.map((asset) => asset.id),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case AssetAction.SET_STACK_PRIMARY_ASSET: {
|
|
||||||
//Have to unstack then restack assets in timeline in order for the currently removed new primary asset to be made visible.
|
|
||||||
updateUnstackedAssetInTimeline(
|
|
||||||
timelineManager,
|
|
||||||
action.stack.assets.map((asset) => toTimelineAsset(asset)),
|
|
||||||
);
|
|
||||||
updateStackedAssetInTimeline(timelineManager, {
|
|
||||||
stack: action.stack,
|
|
||||||
toDeleteIds: action.stack.assets
|
|
||||||
.filter((asset) => asset.id !== action.stack.primaryAssetId)
|
|
||||||
.map((asset) => asset.id),
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
let lastAssetMouseEvent: TimelineAsset | null = $state(null);
|
|
||||||
|
|
||||||
let shiftKeyIsDown = $state(false);
|
|
||||||
|
|
||||||
const deselectAllAssets = () => {
|
|
||||||
cancelMultiselect(assetInteraction);
|
|
||||||
};
|
|
||||||
|
|
||||||
const onKeyDown = (event: KeyboardEvent) => {
|
|
||||||
if (searchStore.isSearchEnabled) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event.key === 'Shift') {
|
|
||||||
event.preventDefault();
|
|
||||||
shiftKeyIsDown = true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const onKeyUp = (event: KeyboardEvent) => {
|
|
||||||
if (searchStore.isSearchEnabled) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event.key === 'Shift') {
|
|
||||||
event.preventDefault();
|
|
||||||
shiftKeyIsDown = false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleSelectAssetCandidates = (asset: TimelineAsset | null) => {
|
|
||||||
if (asset) {
|
|
||||||
void selectAssetCandidates(asset);
|
|
||||||
}
|
|
||||||
lastAssetMouseEvent = asset;
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleGroupSelect = (timelineManager: TimelineManager, group: string, assets: TimelineAsset[]) => {
|
|
||||||
if (assetInteraction.selectedGroup.has(group)) {
|
|
||||||
assetInteraction.removeGroupFromMultiselectGroup(group);
|
|
||||||
for (const asset of assets) {
|
|
||||||
assetInteraction.removeAssetFromMultiselectGroup(asset.id);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
assetInteraction.addGroupToMultiselectGroup(group);
|
|
||||||
for (const asset of assets) {
|
|
||||||
handleSelectAsset(asset);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (timelineManager.assetCount == assetInteraction.selectedAssets.length) {
|
|
||||||
isSelectingAllAssets.set(true);
|
|
||||||
} else {
|
|
||||||
isSelectingAllAssets.set(false);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleSelectAssets = async (asset: TimelineAsset) => {
|
|
||||||
if (!asset) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
onSelect(asset);
|
|
||||||
|
|
||||||
if (singleSelect) {
|
|
||||||
scrollTop(0);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const rangeSelection = assetInteraction.assetSelectionCandidates.length > 0;
|
|
||||||
const deselect = assetInteraction.hasSelectedAsset(asset.id);
|
|
||||||
|
|
||||||
// Select/deselect already loaded assets
|
|
||||||
if (deselect) {
|
|
||||||
for (const candidate of assetInteraction.assetSelectionCandidates) {
|
|
||||||
assetInteraction.removeAssetFromMultiselectGroup(candidate.id);
|
|
||||||
}
|
|
||||||
assetInteraction.removeAssetFromMultiselectGroup(asset.id);
|
|
||||||
} else {
|
|
||||||
for (const candidate of assetInteraction.assetSelectionCandidates) {
|
|
||||||
handleSelectAsset(candidate);
|
|
||||||
}
|
|
||||||
handleSelectAsset(asset);
|
|
||||||
}
|
|
||||||
|
|
||||||
assetInteraction.clearAssetSelectionCandidates();
|
|
||||||
|
|
||||||
if (assetInteraction.assetSelectionStart && rangeSelection) {
|
|
||||||
let startBucket = timelineManager.getMonthGroupByAssetId(assetInteraction.assetSelectionStart.id);
|
|
||||||
let endBucket = timelineManager.getMonthGroupByAssetId(asset.id);
|
|
||||||
|
|
||||||
if (startBucket === null || endBucket === null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Select/deselect assets in range (start,end)
|
|
||||||
let started = false;
|
|
||||||
for (const monthGroup of timelineManager.months) {
|
|
||||||
if (monthGroup === endBucket) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (started) {
|
|
||||||
await timelineManager.loadMonthGroup(monthGroup.yearMonth);
|
|
||||||
for (const asset of monthGroup.assetsIterator()) {
|
|
||||||
if (deselect) {
|
|
||||||
assetInteraction.removeAssetFromMultiselectGroup(asset.id);
|
|
||||||
} else {
|
|
||||||
handleSelectAsset(asset);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (monthGroup === startBucket) {
|
|
||||||
started = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update date group selection in range [start,end]
|
|
||||||
started = false;
|
|
||||||
for (const monthGroup of timelineManager.months) {
|
|
||||||
if (monthGroup === startBucket) {
|
|
||||||
started = true;
|
|
||||||
}
|
|
||||||
if (started) {
|
|
||||||
// Split month group into day groups and check each group
|
|
||||||
for (const dayGroup of monthGroup.dayGroups) {
|
|
||||||
const dayGroupTitle = dayGroup.groupTitle;
|
|
||||||
if (dayGroup.getAssets().every((a) => assetInteraction.hasSelectedAsset(a.id))) {
|
|
||||||
assetInteraction.addGroupToMultiselectGroup(dayGroupTitle);
|
|
||||||
} else {
|
|
||||||
assetInteraction.removeGroupFromMultiselectGroup(dayGroupTitle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (monthGroup === endBucket) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
assetInteraction.setAssetSelectionStart(deselect ? null : asset);
|
|
||||||
};
|
|
||||||
|
|
||||||
const selectAssetCandidates = async (endAsset: TimelineAsset) => {
|
|
||||||
if (!shiftKeyIsDown) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const startAsset = assetInteraction.assetSelectionStart;
|
|
||||||
if (!startAsset) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const assets = assetsSnapshot(await timelineManager.retrieveRange(startAsset, endAsset));
|
|
||||||
assetInteraction.setAssetSelectionCandidates(assets);
|
|
||||||
};
|
|
||||||
|
|
||||||
const onSelectStart = (e: Event) => {
|
|
||||||
if (assetInteraction.selectionActive && shiftKeyIsDown) {
|
|
||||||
e.preventDefault();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
let isTrashEnabled = $derived($featureFlags.loaded && $featureFlags.trash);
|
|
||||||
let isEmpty = $derived(timelineManager.isInitialized && timelineManager.months.length === 0);
|
|
||||||
let idsSelectedAssets = $derived(assetInteraction.selectedAssets.map(({ id }) => id));
|
|
||||||
let isShortcutModalOpen = false;
|
|
||||||
|
|
||||||
const handleOpenShortcutModal = async () => {
|
|
||||||
if (isShortcutModalOpen) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
isShortcutModalOpen = true;
|
|
||||||
await modalManager.show(ShortcutsModal, {});
|
|
||||||
isShortcutModalOpen = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
$effect(() => {
|
|
||||||
if (isEmpty) {
|
|
||||||
assetInteraction.clearMultiselect();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const setFocusTo = setFocusToInit.bind(undefined, scrollToAsset, timelineManager);
|
|
||||||
const setFocusAsset = setFocusAssetInit.bind(undefined, scrollToAsset);
|
|
||||||
|
|
||||||
let shortcutList = $derived(
|
|
||||||
(() => {
|
|
||||||
if (searchStore.isSearchEnabled || $showAssetViewer) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
const shortcuts: ShortcutOptions[] = [
|
|
||||||
{ shortcut: { key: 'Escape' }, onShortcut: onEscape },
|
|
||||||
{ shortcut: { key: '?', shift: true }, onShortcut: handleOpenShortcutModal },
|
|
||||||
{ shortcut: { key: '/' }, onShortcut: () => goto(AppRoute.EXPLORE) },
|
|
||||||
{ shortcut: { key: 'A', ctrl: true }, onShortcut: () => selectAllAssets(timelineManager, assetInteraction) },
|
|
||||||
{ shortcut: { key: 'ArrowRight' }, onShortcut: () => setFocusTo('earlier', 'asset') },
|
|
||||||
{ shortcut: { key: 'ArrowLeft' }, onShortcut: () => setFocusTo('later', 'asset') },
|
|
||||||
{ shortcut: { key: 'D' }, onShortcut: () => setFocusTo('earlier', 'day') },
|
|
||||||
{ shortcut: { key: 'D', shift: true }, onShortcut: () => setFocusTo('later', 'day') },
|
|
||||||
{ shortcut: { key: 'M' }, onShortcut: () => setFocusTo('earlier', 'month') },
|
|
||||||
{ shortcut: { key: 'M', shift: true }, onShortcut: () => setFocusTo('later', 'month') },
|
|
||||||
{ shortcut: { key: 'Y' }, onShortcut: () => setFocusTo('earlier', 'year') },
|
|
||||||
{ shortcut: { key: 'Y', shift: true }, onShortcut: () => setFocusTo('later', 'year') },
|
|
||||||
{ shortcut: { key: 'G' }, onShortcut: () => (isShowSelectDate = true) },
|
|
||||||
];
|
|
||||||
|
|
||||||
if (assetInteraction.selectionActive) {
|
|
||||||
shortcuts.push(
|
|
||||||
{ shortcut: { key: 'Delete' }, onShortcut: onDelete },
|
|
||||||
{ shortcut: { key: 'Delete', shift: true }, onShortcut: onForceDelete },
|
|
||||||
{ shortcut: { key: 'D', ctrl: true }, onShortcut: () => deselectAllAssets() },
|
|
||||||
{ shortcut: { key: 's' }, onShortcut: () => onStackAssets() },
|
|
||||||
{ shortcut: { key: 'a', shift: true }, onShortcut: toggleArchive },
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return shortcuts;
|
|
||||||
})(),
|
|
||||||
);
|
|
||||||
|
|
||||||
$effect(() => {
|
|
||||||
if (!lastAssetMouseEvent) {
|
|
||||||
assetInteraction.clearAssetSelectionCandidates();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$effect(() => {
|
|
||||||
if (!shiftKeyIsDown) {
|
|
||||||
assetInteraction.clearAssetSelectionCandidates();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$effect(() => {
|
|
||||||
if (shiftKeyIsDown && lastAssetMouseEvent) {
|
|
||||||
void selectAssetCandidates(lastAssetMouseEvent);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$effect(() => {
|
|
||||||
if ($showAssetViewer) {
|
|
||||||
const { localDateTime } = getTimes($viewingAsset.fileCreatedAt, DateTime.local().offset / 60);
|
|
||||||
void timelineManager.loadMonthGroup({ year: localDateTime.year, month: localDateTime.month });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:document onkeydown={onKeyDown} onkeyup={onKeyUp} onselectstart={onSelectStart} use:shortcuts={shortcutList} />
|
<!-- AssetGrid Adapter: This is a compatibility layer that wraps the new Timeline component -->
|
||||||
|
<!-- It maintains the old AssetGrid API while using the new Timeline implementation underneath -->
|
||||||
{#if isShowDeleteConfirmation}
|
<Timeline
|
||||||
<DeleteAssetDialog
|
{isSelectionMode}
|
||||||
size={idsSelectedAssets.length}
|
{singleSelect}
|
||||||
onCancel={() => (isShowDeleteConfirmation = false)}
|
{enableRouting}
|
||||||
onConfirm={() => handlePromiseError(trashOrDelete(true))}
|
bind:timelineManager
|
||||||
/>
|
{assetInteraction}
|
||||||
{/if}
|
{removeAction}
|
||||||
|
{withStacked}
|
||||||
{#if isShowSelectDate}
|
{showArchiveIcon}
|
||||||
<ChangeDate
|
{isShared}
|
||||||
title="Navigate to Time"
|
{album}
|
||||||
initialDate={DateTime.now()}
|
{person}
|
||||||
timezoneInput={false}
|
bind:isShowDeleteConfirmation
|
||||||
onConfirm={async (dateString: string) => {
|
{onAssetOpen}
|
||||||
isShowSelectDate = false;
|
{onSelect}
|
||||||
const asset = await timelineManager.getClosestAssetToDate(
|
{onEscape}
|
||||||
(DateTime.fromISO(dateString) as DateTime<true>).toObject(),
|
{children}
|
||||||
);
|
{empty}
|
||||||
if (asset) {
|
customThumbnailLayout={customLayout}
|
||||||
setFocusAsset(asset);
|
/>
|
||||||
}
|
|
||||||
}}
|
|
||||||
onCancel={() => (isShowSelectDate = false)}
|
|
||||||
/>
|
|
||||||
{/if}
|
|
||||||
|
|
||||||
{#if timelineManager.months.length > 0}
|
|
||||||
<Scrubber
|
|
||||||
{timelineManager}
|
|
||||||
height={timelineManager.viewportHeight}
|
|
||||||
timelineTopOffset={timelineManager.topSectionHeight}
|
|
||||||
timelineBottomOffset={bottomSectionHeight}
|
|
||||||
{leadout}
|
|
||||||
{scrubOverallPercent}
|
|
||||||
{scrubberMonthPercent}
|
|
||||||
{scrubberMonth}
|
|
||||||
{onScrub}
|
|
||||||
bind:scrubberWidth
|
|
||||||
onScrubKeyDown={(evt) => {
|
|
||||||
evt.preventDefault();
|
|
||||||
let amount = 50;
|
|
||||||
if (shiftKeyIsDown) {
|
|
||||||
amount = 500;
|
|
||||||
}
|
|
||||||
if (evt.key === 'ArrowUp') {
|
|
||||||
amount = -amount;
|
|
||||||
if (shiftKeyIsDown) {
|
|
||||||
element?.scrollBy({ top: amount, behavior: 'smooth' });
|
|
||||||
}
|
|
||||||
} else if (evt.key === 'ArrowDown') {
|
|
||||||
element?.scrollBy({ top: amount, behavior: 'smooth' });
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
{/if}
|
|
||||||
|
|
||||||
<!-- Right margin MUST be equal to the width of scrubber -->
|
|
||||||
<section
|
|
||||||
id="asset-grid"
|
|
||||||
class={['scrollbar-hidden h-full overflow-y-auto outline-none', { 'm-0': isEmpty }, { 'ms-0': !isEmpty }]}
|
|
||||||
style:margin-right={(usingMobileDevice ? 0 : scrubberWidth) + 'px'}
|
|
||||||
tabindex="-1"
|
|
||||||
bind:clientHeight={timelineManager.viewportHeight}
|
|
||||||
bind:clientWidth={null, (v: number) => ((timelineManager.viewportWidth = v), updateSlidingWindow())}
|
|
||||||
bind:this={element}
|
|
||||||
onscroll={() => (handleTimelineScroll(), updateSlidingWindow(), updateIsScrolling())}
|
|
||||||
>
|
|
||||||
<section
|
|
||||||
bind:this={timelineElement}
|
|
||||||
id="virtual-timeline"
|
|
||||||
class:invisible={showSkeleton}
|
|
||||||
style:height={timelineManager.timelineHeight + 'px'}
|
|
||||||
>
|
|
||||||
<section
|
|
||||||
use:resizeObserver={topSectionResizeObserver}
|
|
||||||
class:invisible={showSkeleton}
|
|
||||||
style:position="absolute"
|
|
||||||
style:left="0"
|
|
||||||
style:right="0"
|
|
||||||
>
|
|
||||||
{@render children?.()}
|
|
||||||
{#if isEmpty}
|
|
||||||
<!-- (optional) empty placeholder -->
|
|
||||||
{@render empty?.()}
|
|
||||||
{/if}
|
|
||||||
</section>
|
|
||||||
|
|
||||||
{#each timelineManager.months as monthGroup (monthGroup.viewId)}
|
|
||||||
{@const display = monthGroup.intersecting}
|
|
||||||
{@const absoluteHeight = monthGroup.top}
|
|
||||||
|
|
||||||
{#if !monthGroup.isLoaded}
|
|
||||||
<div
|
|
||||||
style:height={monthGroup.height + 'px'}
|
|
||||||
style:position="absolute"
|
|
||||||
style:transform={`translate3d(0,${absoluteHeight}px,0)`}
|
|
||||||
style:width="100%"
|
|
||||||
>
|
|
||||||
<Skeleton
|
|
||||||
height={monthGroup.height - monthGroup.timelineManager.headerHeight}
|
|
||||||
title={monthGroup.monthGroupTitle}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
{:else if display}
|
|
||||||
<div
|
|
||||||
class="month-group"
|
|
||||||
style:height={monthGroup.height + 'px'}
|
|
||||||
style:position="absolute"
|
|
||||||
style:transform={`translate3d(0,${absoluteHeight}px,0)`}
|
|
||||||
style:width="100%"
|
|
||||||
>
|
|
||||||
<AssetDateGroup
|
|
||||||
{withStacked}
|
|
||||||
{showArchiveIcon}
|
|
||||||
{assetInteraction}
|
|
||||||
{timelineManager}
|
|
||||||
{isSelectionMode}
|
|
||||||
{singleSelect}
|
|
||||||
{monthGroup}
|
|
||||||
onSelect={({ title, assets }) => handleGroupSelect(timelineManager, title, assets)}
|
|
||||||
onSelectAssetCandidates={handleSelectAssetCandidates}
|
|
||||||
onSelectAssets={handleSelectAssets}
|
|
||||||
onScrollCompensation={handleScrollCompensation}
|
|
||||||
{customLayout}
|
|
||||||
{onThumbnailClick}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
{/if}
|
|
||||||
{/each}
|
|
||||||
<!-- spacer for leadout -->
|
|
||||||
<div
|
|
||||||
class="h-[60px]"
|
|
||||||
style:position="absolute"
|
|
||||||
style:left="0"
|
|
||||||
style:right="0"
|
|
||||||
style:transform={`translate3d(0,${timelineManager.timelineHeight}px,0)`}
|
|
||||||
></div>
|
|
||||||
</section>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<Portal target="body">
|
|
||||||
{#if $showAssetViewer}
|
|
||||||
{#await import('../asset-viewer/asset-viewer.svelte') then { default: AssetViewer }}
|
|
||||||
<AssetViewer
|
|
||||||
{withStacked}
|
|
||||||
asset={$viewingAsset}
|
|
||||||
preloadAssets={$preloadAssets}
|
|
||||||
{isShared}
|
|
||||||
{album}
|
|
||||||
{person}
|
|
||||||
preAction={handlePreAction}
|
|
||||||
onAction={handleAction}
|
|
||||||
onPrevious={handlePrevious}
|
|
||||||
onNext={handleNext}
|
|
||||||
onRandom={handleRandom}
|
|
||||||
onClose={handleClose}
|
|
||||||
/>
|
|
||||||
{/await}
|
|
||||||
{/if}
|
|
||||||
</Portal>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
#asset-grid {
|
|
||||||
contain: strict;
|
|
||||||
scrollbar-width: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.month-group {
|
|
||||||
contain: layout size paint;
|
|
||||||
transform-style: flat;
|
|
||||||
backface-visibility: hidden;
|
|
||||||
transform-origin: center center;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|||||||
162
web/src/lib/components/photos-page/asset-viewer-actions.svelte
Normal file
162
web/src/lib/components/photos-page/asset-viewer-actions.svelte
Normal file
@@ -0,0 +1,162 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import type { Action } from '$lib/components/asset-viewer/actions/action';
|
||||||
|
import { AssetAction } from '$lib/constants';
|
||||||
|
import { authManager } from '$lib/managers/auth-manager.svelte';
|
||||||
|
import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte';
|
||||||
|
import { assetViewingStore } from '$lib/stores/asset-viewing.store';
|
||||||
|
import { updateStackedAssetInTimeline, updateUnstackedAssetInTimeline } from '$lib/utils/actions';
|
||||||
|
import { navigate } from '$lib/utils/navigation';
|
||||||
|
import { toTimelineAsset } from '$lib/utils/timeline-util';
|
||||||
|
import { getAssetInfo, type AssetResponseDto } from '@immich/sdk';
|
||||||
|
|
||||||
|
let { asset: viewingAsset, gridScrollTarget, mutex } = assetViewingStore;
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
timelineManager: TimelineManager;
|
||||||
|
showSkeleton: boolean;
|
||||||
|
removeAction?:
|
||||||
|
| AssetAction.UNARCHIVE
|
||||||
|
| AssetAction.ARCHIVE
|
||||||
|
| AssetAction.FAVORITE
|
||||||
|
| AssetAction.UNFAVORITE
|
||||||
|
| AssetAction.SET_VISIBILITY_TIMELINE;
|
||||||
|
handlePreAction?: (action: Action) => Promise<void>;
|
||||||
|
handleAction?: (action: Action) => void;
|
||||||
|
handleNext?: () => Promise<boolean>;
|
||||||
|
handlePrevious?: () => Promise<boolean>;
|
||||||
|
handleRandom?: () => Promise<AssetResponseDto | undefined>;
|
||||||
|
handleClose?: (asset: { id: string }) => Promise<void>;
|
||||||
|
}
|
||||||
|
|
||||||
|
let {
|
||||||
|
timelineManager = $bindable(),
|
||||||
|
showSkeleton = $bindable(false),
|
||||||
|
removeAction,
|
||||||
|
handlePreAction = $bindable(),
|
||||||
|
handleAction = $bindable(),
|
||||||
|
handleNext = $bindable(),
|
||||||
|
handlePrevious = $bindable(),
|
||||||
|
handleRandom = $bindable(),
|
||||||
|
handleClose = $bindable(),
|
||||||
|
}: Props = $props();
|
||||||
|
|
||||||
|
handlePrevious = async () => {
|
||||||
|
const release = await mutex.acquire();
|
||||||
|
const laterAsset = await timelineManager.getLaterAsset($viewingAsset);
|
||||||
|
|
||||||
|
if (laterAsset) {
|
||||||
|
const preloadAsset = await timelineManager.getLaterAsset(laterAsset);
|
||||||
|
const asset = await getAssetInfo({ ...authManager.params, id: laterAsset.id });
|
||||||
|
assetViewingStore.setAsset(asset, preloadAsset ? [preloadAsset] : []);
|
||||||
|
await navigate({ targetRoute: 'current', assetId: laterAsset.id });
|
||||||
|
}
|
||||||
|
|
||||||
|
release();
|
||||||
|
return !!laterAsset;
|
||||||
|
};
|
||||||
|
|
||||||
|
handleNext = async () => {
|
||||||
|
const release = await mutex.acquire();
|
||||||
|
const earlierAsset = await timelineManager.getEarlierAsset($viewingAsset);
|
||||||
|
|
||||||
|
if (earlierAsset) {
|
||||||
|
const preloadAsset = await timelineManager.getEarlierAsset(earlierAsset);
|
||||||
|
const asset = await getAssetInfo({ ...authManager.params, id: earlierAsset.id });
|
||||||
|
assetViewingStore.setAsset(asset, preloadAsset ? [preloadAsset] : []);
|
||||||
|
await navigate({ targetRoute: 'current', assetId: earlierAsset.id });
|
||||||
|
}
|
||||||
|
|
||||||
|
release();
|
||||||
|
return !!earlierAsset;
|
||||||
|
};
|
||||||
|
|
||||||
|
handleRandom = async () => {
|
||||||
|
const randomAsset = await timelineManager.getRandomAsset();
|
||||||
|
|
||||||
|
if (randomAsset) {
|
||||||
|
const asset = await getAssetInfo({ ...authManager.params, id: randomAsset.id });
|
||||||
|
assetViewingStore.setAsset(asset);
|
||||||
|
await navigate({ targetRoute: 'current', assetId: randomAsset.id });
|
||||||
|
return asset;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
handleClose = async (asset: { id: string }) => {
|
||||||
|
assetViewingStore.showAssetViewer(false);
|
||||||
|
showSkeleton = true;
|
||||||
|
$gridScrollTarget = { at: asset.id };
|
||||||
|
await navigate({ targetRoute: 'current', assetId: null, assetGridRouteSearchParams: $gridScrollTarget });
|
||||||
|
};
|
||||||
|
|
||||||
|
handlePreAction = async (action: Action) => {
|
||||||
|
switch (action.type) {
|
||||||
|
case removeAction:
|
||||||
|
case AssetAction.TRASH:
|
||||||
|
case AssetAction.RESTORE:
|
||||||
|
case AssetAction.DELETE:
|
||||||
|
case AssetAction.ARCHIVE:
|
||||||
|
case AssetAction.SET_VISIBILITY_LOCKED:
|
||||||
|
case AssetAction.SET_VISIBILITY_TIMELINE: {
|
||||||
|
// find the next asset to show or close the viewer
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
||||||
|
(await handleNext()) || (await handlePrevious()) || (await handleClose(action.asset));
|
||||||
|
|
||||||
|
// delete after find the next one
|
||||||
|
timelineManager.removeAssets([action.asset.id]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
handleAction = (action: Action) => {
|
||||||
|
switch (action.type) {
|
||||||
|
case AssetAction.ARCHIVE:
|
||||||
|
case AssetAction.UNARCHIVE:
|
||||||
|
case AssetAction.FAVORITE:
|
||||||
|
case AssetAction.UNFAVORITE: {
|
||||||
|
timelineManager.updateAssets([action.asset]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case AssetAction.ADD: {
|
||||||
|
timelineManager.addAssets([action.asset]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case AssetAction.UNSTACK: {
|
||||||
|
updateUnstackedAssetInTimeline(timelineManager, action.assets);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case AssetAction.REMOVE_ASSET_FROM_STACK: {
|
||||||
|
timelineManager.addAssets([toTimelineAsset(action.asset)]);
|
||||||
|
if (action.stack) {
|
||||||
|
//Have to unstack then restack assets in timeline in order to update the stack count in the timeline.
|
||||||
|
updateUnstackedAssetInTimeline(
|
||||||
|
timelineManager,
|
||||||
|
action.stack.assets.map((asset) => toTimelineAsset(asset)),
|
||||||
|
);
|
||||||
|
updateStackedAssetInTimeline(timelineManager, {
|
||||||
|
stack: action.stack,
|
||||||
|
toDeleteIds: action.stack.assets
|
||||||
|
.filter((asset) => asset.id !== action.stack?.primaryAssetId)
|
||||||
|
.map((asset) => asset.id),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case AssetAction.SET_STACK_PRIMARY_ASSET: {
|
||||||
|
//Have to unstack then restack assets in timeline in order for the currently removed new primary asset to be made visible.
|
||||||
|
updateUnstackedAssetInTimeline(
|
||||||
|
timelineManager,
|
||||||
|
action.stack.assets.map((asset) => toTimelineAsset(asset)),
|
||||||
|
);
|
||||||
|
updateStackedAssetInTimeline(timelineManager, {
|
||||||
|
stack: action.stack,
|
||||||
|
toDeleteIds: action.stack.assets
|
||||||
|
.filter((asset) => asset.id !== action.stack.primaryAssetId)
|
||||||
|
.map((asset) => asset.id),
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import type { Action } from '$lib/components/asset-viewer/actions/action';
|
||||||
|
import AssetViewerActions from '$lib/components/photos-page/asset-viewer-actions.svelte';
|
||||||
|
import { AssetAction } from '$lib/constants';
|
||||||
|
import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte';
|
||||||
|
import { assetViewingStore } from '$lib/stores/asset-viewing.store';
|
||||||
|
import { type AlbumResponseDto, type AssetResponseDto, type PersonResponseDto } from '@immich/sdk';
|
||||||
|
|
||||||
|
let { asset: viewingAsset, preloadAssets } = assetViewingStore;
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
timelineManager: TimelineManager;
|
||||||
|
showSkeleton: boolean;
|
||||||
|
removeAction?:
|
||||||
|
| AssetAction.UNARCHIVE
|
||||||
|
| AssetAction.ARCHIVE
|
||||||
|
| AssetAction.FAVORITE
|
||||||
|
| AssetAction.UNFAVORITE
|
||||||
|
| AssetAction.SET_VISIBILITY_TIMELINE;
|
||||||
|
withStacked?: boolean;
|
||||||
|
isShared?: boolean;
|
||||||
|
album?: AlbumResponseDto | null;
|
||||||
|
person?: PersonResponseDto | null;
|
||||||
|
isShowDeleteConfirmation?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
let {
|
||||||
|
timelineManager = $bindable(),
|
||||||
|
showSkeleton = $bindable(false),
|
||||||
|
removeAction,
|
||||||
|
withStacked = false,
|
||||||
|
isShared = false,
|
||||||
|
album = null,
|
||||||
|
person = null,
|
||||||
|
isShowDeleteConfirmation = $bindable(false),
|
||||||
|
}: Props = $props();
|
||||||
|
|
||||||
|
let handlePreAction = <(action: Action) => Promise<void>>$state();
|
||||||
|
let handleAction = <(action: Action) => void>$state();
|
||||||
|
let handleNext = <() => Promise<boolean>>$state();
|
||||||
|
let handlePrevious = <() => Promise<boolean>>$state();
|
||||||
|
let handleRandom = <() => Promise<AssetResponseDto | undefined>>$state();
|
||||||
|
let handleClose = <(asset: { id: string }) => Promise<void>>$state();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<AssetViewerActions
|
||||||
|
{timelineManager}
|
||||||
|
{removeAction}
|
||||||
|
bind:showSkeleton
|
||||||
|
bind:handlePreAction
|
||||||
|
bind:handleAction
|
||||||
|
bind:handleNext
|
||||||
|
bind:handlePrevious
|
||||||
|
bind:handleRandom
|
||||||
|
bind:handleClose
|
||||||
|
></AssetViewerActions>
|
||||||
|
|
||||||
|
{#await import('../asset-viewer/asset-viewer.svelte') then { default: AssetViewer }}
|
||||||
|
<AssetViewer
|
||||||
|
{withStacked}
|
||||||
|
asset={$viewingAsset}
|
||||||
|
preloadAssets={$preloadAssets}
|
||||||
|
{isShared}
|
||||||
|
{album}
|
||||||
|
{person}
|
||||||
|
preAction={handlePreAction}
|
||||||
|
onAction={handleAction}
|
||||||
|
onPrevious={handlePrevious}
|
||||||
|
onNext={handleNext}
|
||||||
|
onRandom={handleRandom}
|
||||||
|
onClose={handleClose}
|
||||||
|
/>
|
||||||
|
{/await}
|
||||||
@@ -8,6 +8,9 @@ import ChangeDate from './change-date.svelte';
|
|||||||
describe('ChangeDate component', () => {
|
describe('ChangeDate component', () => {
|
||||||
const initialDate = DateTime.fromISO('2024-01-01');
|
const initialDate = DateTime.fromISO('2024-01-01');
|
||||||
const initialTimeZone = 'Europe/Berlin';
|
const initialTimeZone = 'Europe/Berlin';
|
||||||
|
const targetDate = DateTime.fromISO('2024-01-01').setZone('UTC+1', {
|
||||||
|
keepLocalTime: true,
|
||||||
|
});
|
||||||
const currentInterval = {
|
const currentInterval = {
|
||||||
start: DateTime.fromISO('2000-02-01T14:00:00+01:00'),
|
start: DateTime.fromISO('2000-02-01T14:00:00+01:00'),
|
||||||
end: DateTime.fromISO('2001-02-01T14:00:00+01:00'),
|
end: DateTime.fromISO('2001-02-01T14:00:00+01:00'),
|
||||||
@@ -43,7 +46,11 @@ describe('ChangeDate component', () => {
|
|||||||
|
|
||||||
await fireEvent.click(getConfirmButton());
|
await fireEvent.click(getConfirmButton());
|
||||||
|
|
||||||
expect(onConfirm).toHaveBeenCalledWith({ mode: 'absolute', date: '2024-01-01T00:00:00.000+01:00' });
|
expect(onConfirm).toHaveBeenCalledWith({
|
||||||
|
mode: 'absolute',
|
||||||
|
date: '2024-01-01T00:00:00.000+01:00',
|
||||||
|
dateTime: targetDate,
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('calls onCancel on cancel', async () => {
|
test('calls onCancel on cancel', async () => {
|
||||||
@@ -58,7 +65,9 @@ describe('ChangeDate component', () => {
|
|||||||
|
|
||||||
describe('when date is in daylight saving time', () => {
|
describe('when date is in daylight saving time', () => {
|
||||||
const dstDate = DateTime.fromISO('2024-07-01');
|
const dstDate = DateTime.fromISO('2024-07-01');
|
||||||
|
const targetDate = DateTime.fromISO('2024-07-01').setZone('UTC+2', {
|
||||||
|
keepLocalTime: true,
|
||||||
|
});
|
||||||
test('should render correct timezone with offset', () => {
|
test('should render correct timezone with offset', () => {
|
||||||
render(ChangeDate, { initialDate: dstDate, initialTimeZone, onCancel, onConfirm });
|
render(ChangeDate, { initialDate: dstDate, initialTimeZone, onCancel, onConfirm });
|
||||||
|
|
||||||
@@ -72,7 +81,11 @@ describe('ChangeDate component', () => {
|
|||||||
|
|
||||||
await fireEvent.click(getConfirmButton());
|
await fireEvent.click(getConfirmButton());
|
||||||
|
|
||||||
expect(onConfirm).toHaveBeenCalledWith({ mode: 'absolute', date: '2024-07-01T00:00:00.000+02:00' });
|
expect(onConfirm).toHaveBeenCalledWith({
|
||||||
|
mode: 'absolute',
|
||||||
|
date: '2024-07-01T00:00:00.000+02:00',
|
||||||
|
dateTime: targetDate,
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { ConfirmModal } from '@immich/ui';
|
import { locale } from '$lib/stores/preferences.store';
|
||||||
import { mdiCalendarEditOutline } from '@mdi/js';
|
import { getDateTimeOffsetLocaleString } from '$lib/utils/timeline-util.js';
|
||||||
|
import { ConfirmModal, Field, Switch } from '@immich/ui';
|
||||||
|
import { mdiCalendarEdit } from '@mdi/js';
|
||||||
import { DateTime, Duration } from 'luxon';
|
import { DateTime, Duration } from 'luxon';
|
||||||
import { t } from 'svelte-i18n';
|
import { t } from 'svelte-i18n';
|
||||||
import DateInput from '../elements/date-input.svelte';
|
|
||||||
import Combobox, { type ComboBoxOption } from './combobox.svelte';
|
|
||||||
import DurationInput from '../elements/duration-input.svelte';
|
|
||||||
import { Field, Switch } from '@immich/ui';
|
|
||||||
import { getDateTimeOffsetLocaleString } from '$lib/utils/timeline-util.js';
|
|
||||||
import { locale } from '$lib/stores/preferences.store';
|
|
||||||
import { get } from 'svelte/store';
|
import { get } from 'svelte/store';
|
||||||
|
import DateInput from '../elements/date-input.svelte';
|
||||||
|
import DurationInput from '../elements/duration-input.svelte';
|
||||||
|
import Combobox, { type ComboBoxOption } from './combobox.svelte';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
title?: string;
|
title?: string;
|
||||||
@@ -18,6 +17,8 @@
|
|||||||
timezoneInput?: boolean;
|
timezoneInput?: boolean;
|
||||||
withDuration?: boolean;
|
withDuration?: boolean;
|
||||||
currentInterval?: { start: DateTime; end: DateTime };
|
currentInterval?: { start: DateTime; end: DateTime };
|
||||||
|
icon?: string;
|
||||||
|
confirmText?: string;
|
||||||
onCancel: () => void;
|
onCancel: () => void;
|
||||||
onConfirm: (result: AbsoluteResult | RelativeResult) => void;
|
onConfirm: (result: AbsoluteResult | RelativeResult) => void;
|
||||||
}
|
}
|
||||||
@@ -29,6 +30,8 @@
|
|||||||
timezoneInput = true,
|
timezoneInput = true,
|
||||||
withDuration = true,
|
withDuration = true,
|
||||||
currentInterval = undefined,
|
currentInterval = undefined,
|
||||||
|
icon = mdiCalendarEdit,
|
||||||
|
confirmText,
|
||||||
onCancel,
|
onCancel,
|
||||||
onConfirm,
|
onConfirm,
|
||||||
}: Props = $props();
|
}: Props = $props();
|
||||||
@@ -36,6 +39,7 @@
|
|||||||
export type AbsoluteResult = {
|
export type AbsoluteResult = {
|
||||||
mode: 'absolute';
|
mode: 'absolute';
|
||||||
date: string;
|
date: string;
|
||||||
|
dateTime: DateTime<true>;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type RelativeResult = {
|
export type RelativeResult = {
|
||||||
@@ -192,9 +196,13 @@
|
|||||||
const fixedOffsetZone = `UTC${offsetMinutes >= 0 ? '+' : ''}${Duration.fromObject({ minutes: offsetMinutes }).toFormat('hh:mm')}`;
|
const fixedOffsetZone = `UTC${offsetMinutes >= 0 ? '+' : ''}${Duration.fromObject({ minutes: offsetMinutes }).toFormat('hh:mm')}`;
|
||||||
|
|
||||||
// Create a DateTime object in this fixed-offset zone, preserving the local time.
|
// Create a DateTime object in this fixed-offset zone, preserving the local time.
|
||||||
const finalDateTime = DateTime.fromObject(dtComponents.toObject(), { zone: fixedOffsetZone });
|
const finalDateTime = DateTime.fromObject(dtComponents.toObject(), { zone: fixedOffsetZone }) as DateTime<true>;
|
||||||
|
|
||||||
onConfirm({ mode: 'absolute', date: finalDateTime.toISO({ includeOffset: true })! });
|
onConfirm({
|
||||||
|
mode: 'absolute',
|
||||||
|
date: finalDateTime.toISO({ includeOffset: true }),
|
||||||
|
dateTime: finalDateTime,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (showRelative && (selectedDuration || selectedRelativeOption)) {
|
if (showRelative && (selectedDuration || selectedRelativeOption)) {
|
||||||
@@ -238,7 +246,8 @@
|
|||||||
<ConfirmModal
|
<ConfirmModal
|
||||||
confirmColor="primary"
|
confirmColor="primary"
|
||||||
{title}
|
{title}
|
||||||
icon={mdiCalendarEditOutline}
|
{icon}
|
||||||
|
{confirmText}
|
||||||
prompt="Please select a new date:"
|
prompt="Please select a new date:"
|
||||||
disabled={!date.isValid}
|
disabled={!date.isValid}
|
||||||
onClose={(confirmed) => (confirmed ? handleConfirm() : onCancel())}
|
onClose={(confirmed) => (confirmed ? handleConfirm() : onCancel())}
|
||||||
|
|||||||
@@ -4,25 +4,38 @@
|
|||||||
import type { ScrubberMonth } from '$lib/managers/timeline-manager/types';
|
import type { ScrubberMonth } from '$lib/managers/timeline-manager/types';
|
||||||
import { mobileDevice } from '$lib/stores/mobile-device.svelte';
|
import { mobileDevice } from '$lib/stores/mobile-device.svelte';
|
||||||
import { getTabbable } from '$lib/utils/focus-util';
|
import { getTabbable } from '$lib/utils/focus-util';
|
||||||
import { type ScrubberListener } from '$lib/utils/timeline-util';
|
import { type ScrubberListener, type TimelineYearMonth } from '$lib/utils/timeline-util';
|
||||||
import { mdiPlay } from '@mdi/js';
|
import { mdiPlay } from '@mdi/js';
|
||||||
import { clamp } from 'lodash-es';
|
import { clamp } from 'lodash-es';
|
||||||
import { onMount } from 'svelte';
|
import { onMount } from 'svelte';
|
||||||
import { fade, fly } from 'svelte/transition';
|
import { fade, fly } from 'svelte/transition';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
|
/** Offset from the top of the timeline (e.g., for headers) */
|
||||||
timelineTopOffset?: number;
|
timelineTopOffset?: number;
|
||||||
|
/** Offset from the bottom of the timeline (e.g., for footers) */
|
||||||
timelineBottomOffset?: number;
|
timelineBottomOffset?: number;
|
||||||
|
/** Total height of the scrubber component */
|
||||||
height?: number;
|
height?: number;
|
||||||
|
/** Timeline manager instance that controls the timeline state */
|
||||||
timelineManager: TimelineManager;
|
timelineManager: TimelineManager;
|
||||||
scrubOverallPercent?: number;
|
/** Overall scroll percentage through the entire timeline (0-1), used when no specific month is targeted */
|
||||||
scrubberMonthPercent?: number;
|
timelineScrollPercent?: number;
|
||||||
scrubberMonth?: { year: number; month: number };
|
/** The percentage of scroll through the month that is currently intersecting the top boundary of the viewport */
|
||||||
leadout?: boolean;
|
viewportTopMonthScrollPercent?: number;
|
||||||
|
/** The year/month of the timeline month at the top of the viewport */
|
||||||
|
viewportTopMonth?: TimelineYearMonth;
|
||||||
|
/** Indicates whether the viewport is currently in the lead-out section (after all months) */
|
||||||
|
isInLeadOutSection?: boolean;
|
||||||
|
/** Width of the scrubber component in pixels (bindable for parent component margin adjustments) */
|
||||||
scrubberWidth?: number;
|
scrubberWidth?: number;
|
||||||
|
/** Callback fired when user interacts with the scrubber to navigate */
|
||||||
onScrub?: ScrubberListener;
|
onScrub?: ScrubberListener;
|
||||||
|
/** Callback fired when keyboard events occur on the scrubber */
|
||||||
onScrubKeyDown?: (event: KeyboardEvent, element: HTMLElement) => void;
|
onScrubKeyDown?: (event: KeyboardEvent, element: HTMLElement) => void;
|
||||||
|
/** Callback fired when scrubbing starts */
|
||||||
startScrub?: ScrubberListener;
|
startScrub?: ScrubberListener;
|
||||||
|
/** Callback fired when scrubbing stops */
|
||||||
stopScrub?: ScrubberListener;
|
stopScrub?: ScrubberListener;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -31,10 +44,10 @@
|
|||||||
timelineBottomOffset = 0,
|
timelineBottomOffset = 0,
|
||||||
height = 0,
|
height = 0,
|
||||||
timelineManager,
|
timelineManager,
|
||||||
scrubOverallPercent = 0,
|
timelineScrollPercent = 0,
|
||||||
scrubberMonthPercent = 0,
|
viewportTopMonthScrollPercent = 0,
|
||||||
scrubberMonth = undefined,
|
viewportTopMonth = undefined,
|
||||||
leadout = false,
|
isInLeadOutSection = false,
|
||||||
onScrub = undefined,
|
onScrub = undefined,
|
||||||
onScrubKeyDown = undefined,
|
onScrubKeyDown = undefined,
|
||||||
startScrub = undefined,
|
startScrub = undefined,
|
||||||
@@ -100,7 +113,7 @@
|
|||||||
offset += scrubberMonthPercent * relativeBottomOffset;
|
offset += scrubberMonthPercent * relativeBottomOffset;
|
||||||
}
|
}
|
||||||
return offset;
|
return offset;
|
||||||
} else if (leadout) {
|
} else if (isInLeadOutSection) {
|
||||||
let offset = relativeTopOffset;
|
let offset = relativeTopOffset;
|
||||||
for (const segment of segments) {
|
for (const segment of segments) {
|
||||||
offset += segment.height;
|
offset += segment.height;
|
||||||
@@ -111,7 +124,9 @@
|
|||||||
return scrubOverallPercent * (height - (PADDING_TOP + PADDING_BOTTOM));
|
return scrubOverallPercent * (height - (PADDING_TOP + PADDING_BOTTOM));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let scrollY = $derived(toScrollFromMonthGroupPercentage(scrubberMonth, scrubberMonthPercent, scrubOverallPercent));
|
let scrollY = $derived(
|
||||||
|
toScrollFromMonthGroupPercentage(viewportTopMonth, viewportTopMonthScrollPercent, timelineScrollPercent),
|
||||||
|
);
|
||||||
let timelineFullHeight = $derived(timelineManager.scrubberTimelineHeight + timelineTopOffset + timelineBottomOffset);
|
let timelineFullHeight = $derived(timelineManager.scrubberTimelineHeight + timelineTopOffset + timelineBottomOffset);
|
||||||
let relativeTopOffset = $derived(toScrollY(timelineTopOffset / timelineFullHeight));
|
let relativeTopOffset = $derived(toScrollY(timelineTopOffset / timelineFullHeight));
|
||||||
let relativeBottomOffset = $derived(toScrollY(timelineBottomOffset / timelineFullHeight));
|
let relativeBottomOffset = $derived(toScrollY(timelineBottomOffset / timelineFullHeight));
|
||||||
@@ -295,12 +310,24 @@
|
|||||||
|
|
||||||
const scrollPercent = toTimelineY(hoverY);
|
const scrollPercent = toTimelineY(hoverY);
|
||||||
if (wasDragging === false && isDragging) {
|
if (wasDragging === false && isDragging) {
|
||||||
void startScrub?.(segmentDate!, scrollPercent, monthGroupPercentY);
|
void startScrub?.({
|
||||||
void onScrub?.(segmentDate!, scrollPercent, monthGroupPercentY);
|
scrubberMonth: segmentDate!,
|
||||||
|
overallScrollPercent: scrollPercent,
|
||||||
|
scrubberMonthScrollPercent: monthGroupPercentY,
|
||||||
|
});
|
||||||
|
void onScrub?.({
|
||||||
|
scrubberMonth: segmentDate!,
|
||||||
|
overallScrollPercent: scrollPercent,
|
||||||
|
scrubberMonthScrollPercent: monthGroupPercentY,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wasDragging && !isDragging) {
|
if (wasDragging && !isDragging) {
|
||||||
void stopScrub?.(segmentDate!, scrollPercent, monthGroupPercentY);
|
void stopScrub?.({
|
||||||
|
scrubberMonth: segmentDate!,
|
||||||
|
overallScrollPercent: scrollPercent,
|
||||||
|
scrubberMonthScrollPercent: monthGroupPercentY,
|
||||||
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -308,7 +335,11 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void onScrub?.(segmentDate!, scrollPercent, monthGroupPercentY);
|
void onScrub?.({
|
||||||
|
scrubberMonth: segmentDate!,
|
||||||
|
overallScrollPercent: scrollPercent,
|
||||||
|
scrubberMonthScrollPercent: monthGroupPercentY,
|
||||||
|
});
|
||||||
};
|
};
|
||||||
/* eslint-disable tscompat/tscompat */
|
/* eslint-disable tscompat/tscompat */
|
||||||
const getTouch = (event: TouchEvent) => {
|
const getTouch = (event: TouchEvent) => {
|
||||||
@@ -412,7 +443,11 @@
|
|||||||
}
|
}
|
||||||
if (next) {
|
if (next) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
void onScrub?.({ year: next.year, month: next.month }, -1, 0);
|
void onScrub?.({
|
||||||
|
scrubberMonth: { year: next.year, month: next.month },
|
||||||
|
overallScrollPercent: -1,
|
||||||
|
scrubberMonthScrollPercent: 0,
|
||||||
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -422,7 +457,11 @@
|
|||||||
const next = segments[idx + 1];
|
const next = segments[idx + 1];
|
||||||
if (next) {
|
if (next) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
void onScrub?.({ year: next.year, month: next.month }, -1, 0);
|
void onScrub?.({
|
||||||
|
scrubberMonth: { year: next.year, month: next.month },
|
||||||
|
overallScrollPercent: -1,
|
||||||
|
scrubberMonthScrollPercent: 0,
|
||||||
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,7 +59,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div id="camera-selection">
|
<div id="camera-selection">
|
||||||
<p class="immich-form-label">{$t('camera').toUpperCase()}</p>
|
<p class="uppercase immich-form-label">{$t('camera')}</p>
|
||||||
|
|
||||||
<div class="grid grid-auto-fit-40 gap-5 mt-1">
|
<div class="grid grid-auto-fit-40 gap-5 mt-1">
|
||||||
<div class="w-full">
|
<div class="w-full">
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
<div id="date-range-selection" class="grid grid-auto-fit-40 gap-5">
|
<div id="date-range-selection" class="grid grid-auto-fit-40 gap-5">
|
||||||
<label class="immich-form-label" for="start-date">
|
<label class="immich-form-label" for="start-date">
|
||||||
<span>{$t('start_date').toUpperCase()}</span>
|
<span class="uppercase">{$t('start_date')}</span>
|
||||||
<DateInput
|
<DateInput
|
||||||
class="immich-form-input w-full mt-1 hover:cursor-pointer"
|
class="immich-form-input w-full mt-1 hover:cursor-pointer"
|
||||||
type="date"
|
type="date"
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
</label>
|
</label>
|
||||||
|
|
||||||
<label class="immich-form-label" for="end-date">
|
<label class="immich-form-label" for="end-date">
|
||||||
<span>{$t('end_date').toUpperCase()}</span>
|
<span class="uppercase">{$t('end_date')}</span>
|
||||||
<DateInput
|
<DateInput
|
||||||
class="immich-form-input w-full mt-1 hover:cursor-pointer"
|
class="immich-form-input w-full mt-1 hover:cursor-pointer"
|
||||||
type="date"
|
type="date"
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
<div id="display-options-selection">
|
<div id="display-options-selection">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend class="immich-form-label">{$t('display_options').toUpperCase()}</legend>
|
<legend class="uppercase immich-form-label">{$t('display_options')}</legend>
|
||||||
<div class="flex flex-wrap gap-x-5 gap-y-2 mt-1">
|
<div class="flex flex-wrap gap-x-5 gap-y-2 mt-1">
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<Checkbox id="not-in-album-checkbox" size="tiny" bind:checked={filters.isNotInAlbum} />
|
<Checkbox id="not-in-album-checkbox" size="tiny" bind:checked={filters.isNotInAlbum} />
|
||||||
|
|||||||
@@ -98,7 +98,7 @@
|
|||||||
class="absolute w-full rounded-b-3xl border-2 border-t-0 border-gray-200 bg-white pb-5 shadow-2xl transition-all dark:border-gray-700 dark:bg-immich-dark-gray dark:text-gray-300 z-1"
|
class="absolute w-full rounded-b-3xl border-2 border-t-0 border-gray-200 bg-white pb-5 shadow-2xl transition-all dark:border-gray-700 dark:bg-immich-dark-gray dark:text-gray-300 z-1"
|
||||||
>
|
>
|
||||||
<div class="flex items-center justify-between px-5 pt-5 text-xs">
|
<div class="flex items-center justify-between px-5 pt-5 text-xs">
|
||||||
<p class="py-2" aria-hidden={true}>{$t('recent_searches').toUpperCase()}</p>
|
<p class="uppercase py-2" aria-hidden={true}>{$t('recent_searches')}</p>
|
||||||
{#if showClearAll}
|
{#if showClearAll}
|
||||||
<button
|
<button
|
||||||
id={getId(0)}
|
id={getId(0)}
|
||||||
|
|||||||
@@ -78,7 +78,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div id="location-selection">
|
<div id="location-selection">
|
||||||
<p class="immich-form-label">{$t('place').toUpperCase()}</p>
|
<p class="uppercase immich-form-label">{$t('place')}</p>
|
||||||
|
|
||||||
<div class="grid grid-auto-fit-40 gap-5 mt-1">
|
<div class="grid grid-auto-fit-40 gap-5 mt-1">
|
||||||
<div class="w-full">
|
<div class="w-full">
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user