Compare commits
36
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
83738bfebf | ||
|
|
5089a2ae6b | ||
|
|
b83c8b6546 | ||
|
|
0e4189f693 | ||
|
|
1cf010e9fb | ||
|
|
7e58858353 | ||
|
|
9ed55d57dd | ||
|
|
8cac0b11c1 | ||
|
|
5f011e8456 | ||
|
|
9e1b529288 | ||
|
|
4ad115dd2d | ||
|
|
27209a5dde | ||
|
|
ed33748a49 | ||
|
|
7a21e2a9c3 | ||
|
|
f66469d797 | ||
|
|
c4a0c818d0 | ||
|
|
ef016061ae | ||
|
|
3492700e6b | ||
|
|
590d316671 | ||
|
|
6e9d20e651 | ||
|
|
ed829fddfa | ||
|
|
ed8b8a40eb | ||
|
|
7bc3bbb8c0 | ||
|
|
74943ef9bc | ||
|
|
5dd7f839ee | ||
|
|
d8c6c0f978 | ||
|
|
75b2d1bd1b | ||
|
|
7c12a9ce48 | ||
|
|
9033acc66c | ||
|
|
a42dc34d34 | ||
|
|
db3d58821e | ||
|
|
076526293d | ||
|
|
2443f1cd3f | ||
|
|
3864727502 | ||
|
|
f3608b26a0 | ||
|
|
73bed51df8 |
No files matched your search
@@ -33,6 +33,7 @@ body:
|
|||||||
options:
|
options:
|
||||||
# The below comment is used to insert a new version with on-release.yml
|
# The below comment is used to insert a new version with on-release.yml
|
||||||
#NEXT_VERSION#
|
#NEXT_VERSION#
|
||||||
|
- 1.68.0
|
||||||
- 1.67.0
|
- 1.67.0
|
||||||
- 1.66.1
|
- 1.66.1
|
||||||
- 1.66.0
|
- 1.66.0
|
||||||
|
|||||||
@@ -163,3 +163,65 @@ jobs:
|
|||||||
run: cp .env.example .env
|
run: cp .env.example .env
|
||||||
- name: Build
|
- name: Build
|
||||||
run: pnpm turbo build --affected
|
run: pnpm turbo build --affected
|
||||||
|
|
||||||
|
memory-regression:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 15
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v4
|
||||||
|
- name: Build Docker image
|
||||||
|
uses: docker/build-push-action@v7
|
||||||
|
with:
|
||||||
|
platforms: linux/amd64
|
||||||
|
context: .
|
||||||
|
push: false
|
||||||
|
load: true
|
||||||
|
tags: homarr-memory-test
|
||||||
|
network: host
|
||||||
|
cache-from: type=gha
|
||||||
|
cache-to: type=gha,mode=max
|
||||||
|
env:
|
||||||
|
SKIP_ENV_VALIDATION: true
|
||||||
|
- name: Start container and measure memory
|
||||||
|
run: |
|
||||||
|
docker run -d --name homarr-mem-test -p 17575:7575 homarr-memory-test
|
||||||
|
# Wait for container to be healthy (up to 60s)
|
||||||
|
healthy=false
|
||||||
|
for i in $(seq 1 30); do
|
||||||
|
if curl -sf http://localhost:17575/api/health 2>/dev/null; then
|
||||||
|
echo "Container healthy after $((i * 2))s"
|
||||||
|
healthy=true
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 2
|
||||||
|
done
|
||||||
|
if [ "$healthy" != "true" ]; then
|
||||||
|
echo "ERROR: Container never became healthy"
|
||||||
|
docker logs homarr-mem-test --tail 50
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
# Warm up: hit the dashboard page a few times
|
||||||
|
for i in $(seq 1 5); do
|
||||||
|
curl -sf http://localhost:17575/ > /dev/null 2>&1 || true
|
||||||
|
sleep 2
|
||||||
|
done
|
||||||
|
# Measure RSS after warmup
|
||||||
|
MEM_KB=$(docker stats --no-stream --format '{{.MemUsage}}' homarr-mem-test | sed 's| /.*||')
|
||||||
|
echo "Raw memory: $MEM_KB"
|
||||||
|
# Convert to numeric MB (handles GiB and MiB suffixes)
|
||||||
|
MEM_NUM=$(echo "$MEM_KB" | awk '{
|
||||||
|
if ($0 ~ /GiB/) { gsub(/GiB/,""); print $1 * 1024 }
|
||||||
|
else if ($0 ~ /MiB/) { gsub(/MiB/,""); print $1 }
|
||||||
|
else if ($0 ~ /KiB/) { gsub(/KiB/,""); print $1 / 1024 }
|
||||||
|
else { print $1 / 1048576 }
|
||||||
|
}')
|
||||||
|
echo "Memory usage: ${MEM_NUM} MB"
|
||||||
|
MAX_MB=700
|
||||||
|
if awk "BEGIN {exit !($MEM_NUM > $MAX_MB)}"; then
|
||||||
|
echo "ERROR: Memory usage ${MEM_NUM} MB exceeds ${MAX_MB} MB threshold"
|
||||||
|
docker logs homarr-mem-test --tail 50
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "Memory check passed: ${MEM_NUM} MB <= ${MAX_MB} MB"
|
||||||
@@ -66,7 +66,7 @@ jobs:
|
|||||||
- uses: actions/setup-node@v6
|
- uses: actions/setup-node@v6
|
||||||
if: env.SKIP_RELEASE == 'false'
|
if: env.SKIP_RELEASE == 'false'
|
||||||
with:
|
with:
|
||||||
node-version: 24.17.0
|
node-version: 24.18.0
|
||||||
package-manager-cache: false
|
package-manager-cache: false
|
||||||
- run: npm i -g pnpm
|
- run: npm i -g pnpm
|
||||||
if: env.SKIP_RELEASE == 'false'
|
if: env.SKIP_RELEASE == 'false'
|
||||||
|
|||||||
+1
-1
@@ -1,2 +1,2 @@
|
|||||||
[tools]
|
[tools]
|
||||||
node = "24.17.0"
|
node = "24.18.0"
|
||||||
@@ -1,3 +1,10 @@
|
|||||||
|
## [1.68.1](https://github.com/homarr-labs/homarr/compare/v1.68.0...v1.68.1) (2026-06-30)
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* make source maps opt-in to restore v1.67.0 memory baseline ([57ef0af](https://github.com/homarr-labs/homarr/commit/57ef0af4a252ea39727caeba7e13587dabc6254e)), closes [#6123](https://github.com/homarr-labs/homarr/issues/6123)
|
||||||
|
* revert production source maps to restore v1.67.0 memory baseline ([60a69e3](https://github.com/homarr-labs/homarr/commit/60a69e31efc7168b8f4309daf75954d7730d883b)), closes [#6123](https://github.com/homarr-labs/homarr/issues/6123)
|
||||||
|
|
||||||
## [1.68.0](https://github.com/homarr-labs/homarr/compare/v1.67.0...v1.68.0) (2026-06-26)
|
## [1.68.0](https://github.com/homarr-labs/homarr/compare/v1.67.0...v1.68.0) (2026-06-26)
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|||||||
+185
-4
@@ -1,12 +1,193 @@
|
|||||||
# ── CODEOWNERS ───────────────────────────────────────
|
# ── CODEOWNERS ───────────────────────────────────────
|
||||||
* @homarr-labs/maintainers
|
* @homarr-labs/maintainers
|
||||||
|
|
||||||
# Specific features / integrations
|
# Specific features / integrations
|
||||||
# Glueten
|
# These owners come from the PR that introduced each integration implementation.
|
||||||
apps/docs/docs/integrations/glueten @Lok3sh-kumar
|
# Specific rules override the global fallback because CODEOWNERS uses the last
|
||||||
|
# matching pattern; do not include @homarr-labs/maintainers here unless they
|
||||||
|
# should also be requested for that integration.
|
||||||
|
|
||||||
|
# AdGuard Home - introduced in https://github.com/homarr-labs/homarr/pull/929 by @hillaliy
|
||||||
|
apps/docs/docs/integrations/adguard-home @hillaliy
|
||||||
|
packages/integrations/src/adguard-home @hillaliy
|
||||||
|
|
||||||
|
# Anchor - introduced in https://github.com/homarr-labs/homarr/pull/5040 by @ohmzi
|
||||||
|
apps/docs/docs/integrations/anchor @ohmzi
|
||||||
|
packages/integrations/src/anchor @ohmzi
|
||||||
|
|
||||||
|
# ArchiveTeam Warrior - introduced in https://github.com/homarr-labs/homarr/pull/5784 by @darbyjack
|
||||||
|
apps/docs/docs/integrations/archive-team-warrior @darbyjack
|
||||||
|
packages/integrations/src/archive-team-warrior @darbyjack
|
||||||
|
|
||||||
|
# Audiobookshelf - introduced in https://github.com/homarr-labs/homarr/pull/5910 by @ajnart
|
||||||
|
apps/docs/docs/integrations/audiobookshelf @ajnart
|
||||||
|
packages/integrations/src/audiobookshelf @ajnart
|
||||||
|
|
||||||
|
# Beszel - introduced in https://github.com/homarr-labs/homarr/pull/5900 by @ajnart
|
||||||
|
apps/docs/docs/integrations/beszel @ajnart
|
||||||
|
packages/integrations/src/beszel @ajnart
|
||||||
|
|
||||||
|
# Codeberg - introduced in https://github.com/homarr-labs/homarr/pull/3253 by @Aandree5
|
||||||
|
apps/docs/docs/integrations/codeberg @Aandree5
|
||||||
|
packages/integrations/src/codeberg @Aandree5
|
||||||
|
|
||||||
|
# Coolify - introduced in https://github.com/homarr-labs/homarr/pull/4789 by @Rhiz3K
|
||||||
|
apps/docs/docs/integrations/coolify @Rhiz3K
|
||||||
|
packages/integrations/src/coolify @Rhiz3K
|
||||||
|
|
||||||
|
# Dash. - introduced in https://github.com/homarr-labs/homarr/pull/1541 by @manuel-rw
|
||||||
|
apps/docs/docs/integrations/dash-dot @manuel-rw
|
||||||
|
packages/integrations/src/dashdot @manuel-rw
|
||||||
|
|
||||||
|
# Docker Hub - introduced in https://github.com/homarr-labs/homarr/pull/3253 by @Aandree5
|
||||||
|
apps/docs/docs/integrations/docker-hub @Aandree5
|
||||||
|
packages/integrations/src/docker-hub @Aandree5
|
||||||
|
|
||||||
|
# Emby - introduced in https://github.com/homarr-labs/homarr/pull/2466 by @Meierschlumpf
|
||||||
|
apps/docs/docs/integrations/emby @Meierschlumpf
|
||||||
|
packages/integrations/src/emby @Meierschlumpf
|
||||||
|
|
||||||
|
# GitHub - introduced in https://github.com/homarr-labs/homarr/pull/3253 by @Aandree5
|
||||||
|
apps/docs/docs/integrations/github @Aandree5
|
||||||
|
packages/integrations/src/github @Aandree5
|
||||||
|
|
||||||
|
# GitHub Container Registry - introduced in https://github.com/homarr-labs/homarr/pull/3727 by @Aandree5
|
||||||
|
apps/docs/docs/integrations/github-containerregistry @Aandree5
|
||||||
|
packages/integrations/src/github-container-registry @Aandree5
|
||||||
|
|
||||||
|
# GitLab - introduced in https://github.com/homarr-labs/homarr/pull/3253 by @Aandree5
|
||||||
|
apps/docs/docs/integrations/gitlab @Aandree5
|
||||||
|
packages/integrations/src/gitlab @Aandree5
|
||||||
|
|
||||||
|
# Glances - introduced in https://github.com/homarr-labs/homarr/pull/5102 by @manuel-rw
|
||||||
|
apps/docs/docs/integrations/glances @manuel-rw
|
||||||
|
packages/integrations/src/glances @manuel-rw
|
||||||
|
|
||||||
|
# Gluetun - introduced in https://github.com/homarr-labs/homarr/pull/5812 by @Lok3sh-kumar
|
||||||
|
apps/docs/docs/integrations/gluetun @Lok3sh-kumar
|
||||||
packages/integrations/src/gluetun @Lok3sh-kumar
|
packages/integrations/src/gluetun @Lok3sh-kumar
|
||||||
|
|
||||||
# Exempt Renovate‑managed files (no owners)
|
# Gotify - introduced in https://github.com/homarr-labs/homarr/pull/5847 by @Nerdy-Technician
|
||||||
|
apps/docs/docs/integrations/gotify @Nerdy-Technician
|
||||||
|
packages/integrations/src/gotify @Nerdy-Technician
|
||||||
|
|
||||||
|
# Home Assistant - introduced in https://github.com/homarr-labs/homarr/pull/578 by @manuel-rw
|
||||||
|
apps/docs/docs/integrations/home-assistant @manuel-rw
|
||||||
|
packages/integrations/src/homeassistant @manuel-rw
|
||||||
|
|
||||||
|
# ICal - introduced in https://github.com/homarr-labs/homarr/pull/3980 by @NicolasNewman
|
||||||
|
apps/docs/docs/integrations/ical @NicolasNewman
|
||||||
|
packages/integrations/src/ical @NicolasNewman
|
||||||
|
|
||||||
|
# Immich - introduced in https://github.com/homarr-labs/homarr/pull/5165 by @manuel-rw
|
||||||
|
apps/docs/docs/integrations/immich @manuel-rw
|
||||||
|
packages/integrations/src/immich @manuel-rw
|
||||||
|
|
||||||
|
# Jellyfin - introduced in https://github.com/homarr-labs/homarr/pull/672 by @manuel-rw
|
||||||
|
apps/docs/docs/integrations/jellyfin @manuel-rw
|
||||||
|
packages/integrations/src/jellyfin @manuel-rw
|
||||||
|
|
||||||
|
# Jellyseerr - introduced in https://github.com/homarr-labs/homarr/pull/774 by @manuel-rw
|
||||||
|
apps/docs/docs/integrations/jellyseerr @manuel-rw
|
||||||
|
packages/integrations/src/jellyseerr @manuel-rw
|
||||||
|
|
||||||
|
# LinuxServer.io - introduced in https://github.com/homarr-labs/homarr/pull/3607 by @Aandree5
|
||||||
|
apps/docs/docs/integrations/linux-server-io @Aandree5
|
||||||
|
packages/integrations/src/linuxserverio @Aandree5
|
||||||
|
|
||||||
|
# Navidrome - introduced in https://github.com/homarr-labs/homarr/pull/5910 by @ajnart
|
||||||
|
apps/docs/docs/integrations/navidrome @ajnart
|
||||||
|
packages/integrations/src/navidrome @ajnart
|
||||||
|
|
||||||
|
# Nextcloud - introduced in https://github.com/homarr-labs/homarr/pull/2501 by @manuel-rw
|
||||||
|
apps/docs/docs/integrations/nextcloud @manuel-rw
|
||||||
|
packages/integrations/src/nextcloud @manuel-rw
|
||||||
|
|
||||||
|
# npm - introduced in https://github.com/homarr-labs/homarr/pull/3253 by @Aandree5
|
||||||
|
apps/docs/docs/integrations/npm @Aandree5
|
||||||
|
packages/integrations/src/npm @Aandree5
|
||||||
|
|
||||||
|
# ntfy - introduced in https://github.com/homarr-labs/homarr/pull/2900 by @itzTheMeow
|
||||||
|
apps/docs/docs/integrations/ntfy @ajnart @manuel-rw
|
||||||
|
packages/integrations/src/ntfy @ajnart @manuel-rw
|
||||||
|
|
||||||
|
# OpenMediaVault - introduced in https://github.com/homarr-labs/homarr/pull/1142 by @hillaliy
|
||||||
|
apps/docs/docs/integrations/open-media-vault @hillaliy
|
||||||
|
packages/integrations/src/openmediavault @hillaliy
|
||||||
|
|
||||||
|
# OPNsense - introduced in https://github.com/homarr-labs/homarr/pull/3424 by @Oupsman
|
||||||
|
apps/docs/docs/integrations/opnsense @Oupsman
|
||||||
|
packages/integrations/src/opnsense @Oupsman
|
||||||
|
|
||||||
|
# Overseerr - introduced in https://github.com/homarr-labs/homarr/pull/774 by @manuel-rw
|
||||||
|
apps/docs/docs/integrations/overseerr @manuel-rw
|
||||||
|
packages/integrations/src/overseerr @manuel-rw
|
||||||
|
|
||||||
|
# Paperless-ngx - introduced in https://github.com/homarr-labs/homarr/pull/5910 by @ajnart
|
||||||
|
apps/docs/docs/integrations/paperless-ngx @ajnart
|
||||||
|
packages/integrations/src/paperless-ngx @ajnart
|
||||||
|
|
||||||
|
# PeaNUT - introduced in https://github.com/homarr-labs/homarr/pull/5862 by @afonsojramos
|
||||||
|
apps/docs/docs/integrations/peanut @afonsojramos
|
||||||
|
packages/integrations/src/peanut @afonsojramos
|
||||||
|
|
||||||
|
# Pi-hole - introduced in https://github.com/homarr-labs/homarr/pull/521 by @Meierschlumpf
|
||||||
|
apps/docs/docs/integrations/pi-hole @Meierschlumpf
|
||||||
|
packages/integrations/src/pi-hole @Meierschlumpf
|
||||||
|
|
||||||
|
# Plex - introduced in https://github.com/homarr-labs/homarr/pull/1342 by @hillaliy
|
||||||
|
apps/docs/docs/integrations/plex @hillaliy
|
||||||
|
packages/integrations/src/plex @hillaliy
|
||||||
|
|
||||||
|
# Prowlarr - introduced in https://github.com/homarr-labs/homarr/pull/965 by @hillaliy
|
||||||
|
apps/docs/docs/integrations/prowlarr @hillaliy
|
||||||
|
packages/integrations/src/prowlarr @hillaliy
|
||||||
|
|
||||||
|
# Proxmox - introduced in https://github.com/homarr-labs/homarr/pull/1969 by @Meierschlumpf
|
||||||
|
apps/docs/docs/integrations/proxmox @Meierschlumpf
|
||||||
|
packages/integrations/src/proxmox @Meierschlumpf
|
||||||
|
|
||||||
|
# Quay - introduced in https://github.com/homarr-labs/homarr/pull/3607 by @Aandree5
|
||||||
|
apps/docs/docs/integrations/quay @Aandree5
|
||||||
|
packages/integrations/src/quay @Aandree5
|
||||||
|
|
||||||
|
# search.ch - introduced in https://github.com/homarr-labs/homarr/pull/5180 by @Meierschlumpf
|
||||||
|
apps/docs/docs/integrations/search-ch @Meierschlumpf
|
||||||
|
packages/integrations/src/search-ch @Meierschlumpf
|
||||||
|
|
||||||
|
# Speedtest Tracker - introduced in https://github.com/homarr-labs/homarr/pull/5363 by @kylegrieder
|
||||||
|
apps/docs/docs/integrations/speedtest-tracker @kylegrieder
|
||||||
|
packages/integrations/src/speedtest-tracker @kylegrieder
|
||||||
|
|
||||||
|
# Technitium DNS - introduced in https://github.com/homarr-labs/homarr/pull/5832 by @lopsch
|
||||||
|
apps/docs/docs/integrations/technitium-dns @lopsch
|
||||||
|
packages/integrations/src/technitium @lopsch
|
||||||
|
|
||||||
|
# Tracearr - introduced in https://github.com/homarr-labs/homarr/pull/5060 by @StrandedTurtle
|
||||||
|
apps/docs/docs/integrations/tracearr @StrandedTurtle
|
||||||
|
packages/integrations/src/tracearr @StrandedTurtle
|
||||||
|
|
||||||
|
# TrueNAS - introduced in https://github.com/homarr-labs/homarr/pull/3745 by @manuel-rw
|
||||||
|
apps/docs/docs/integrations/truenas @manuel-rw @afonsojramos
|
||||||
|
packages/integrations/src/truenas @manuel-rw @afonsojramos
|
||||||
|
|
||||||
|
# Umami - introduced in https://github.com/homarr-labs/homarr/pull/5362 by @febrile42
|
||||||
|
apps/docs/docs/integrations/umami @febrile42
|
||||||
|
packages/integrations/src/umami @febrile42
|
||||||
|
|
||||||
|
# UniFi Controller - introduced in https://github.com/homarr-labs/homarr/pull/2236 by @pitschi
|
||||||
|
apps/docs/docs/integrations/unifi-controller @pitschi
|
||||||
|
packages/integrations/src/unifi-controller @pitschi
|
||||||
|
|
||||||
|
# Unraid - introduced in https://github.com/homarr-labs/homarr/pull/4439 by @manuel-rw
|
||||||
|
apps/docs/docs/integrations/unraid @manuel-rw
|
||||||
|
packages/integrations/src/unraid @manuel-rw
|
||||||
|
|
||||||
|
# Uptime Kuma - introduced in https://github.com/homarr-labs/homarr/pull/5910 by @ajnart
|
||||||
|
apps/docs/docs/integrations/uptime-kuma @ajnart
|
||||||
|
packages/integrations/src/uptime-kuma @ajnart
|
||||||
|
|
||||||
|
# Exempt Renovate-managed files (no owners)
|
||||||
package.json
|
package.json
|
||||||
**/package.json
|
**/package.json
|
||||||
package-lock.json
|
package-lock.json
|
||||||
|
|||||||
+1
-15
@@ -1,4 +1,4 @@
|
|||||||
FROM node:24.17.0-alpine AS base
|
FROM node:24.18.0-alpine AS base
|
||||||
|
|
||||||
FROM base AS builder
|
FROM base AS builder
|
||||||
RUN apk add --no-cache libc6-compat
|
RUN apk add --no-cache libc6-compat
|
||||||
@@ -20,17 +20,6 @@ ARG DISABLE_REDIS_LOGS='true'
|
|||||||
|
|
||||||
RUN corepack enable pnpm && pnpm build
|
RUN corepack enable pnpm && pnpm build
|
||||||
|
|
||||||
# The standalone output tracing omits server chunk source maps (.next/server/**/*.map), which is
|
|
||||||
# where production Node stack frames point. Copy the .map files into the standalone tree (preserving
|
|
||||||
# directory structure) so the existing standalone COPY ships them, keeping traces readable.
|
|
||||||
# See https://github.com/homarr-labs/homarr/issues/5891
|
|
||||||
RUN cd apps/nextjs/.next/server && \
|
|
||||||
find . -name '*.map' | while IFS= read -r map; do \
|
|
||||||
dest="../standalone/apps/nextjs/.next/server/$map"; \
|
|
||||||
mkdir -p "$(dirname "$dest")"; \
|
|
||||||
cp "$map" "$dest"; \
|
|
||||||
done
|
|
||||||
|
|
||||||
FROM base AS runner
|
FROM base AS runner
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
@@ -75,9 +64,6 @@ ENV DB_DRIVER='better-sqlite3'
|
|||||||
ENV AUTH_PROVIDERS='credentials'
|
ENV AUTH_PROVIDERS='credentials'
|
||||||
ENV REDIS_IS_EXTERNAL='false'
|
ENV REDIS_IS_EXTERNAL='false'
|
||||||
ENV NODE_ENV='production'
|
ENV NODE_ENV='production'
|
||||||
# Tell Node to symbolicate stack traces using the shipped .map files so production logs
|
|
||||||
# show original source locations instead of minified frames, see https://github.com/homarr-labs/homarr/issues/5891
|
|
||||||
ENV NODE_OPTIONS='--enable-source-maps'
|
|
||||||
|
|
||||||
ENTRYPOINT [ "/app/entrypoint.sh" ]
|
ENTRYPOINT [ "/app/entrypoint.sh" ]
|
||||||
CMD ["sh", "run.sh"]
|
CMD ["sh", "run.sh"]
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
<img src="https://raw.githubusercontent.com/homarr-labs/charts/refs/heads/main/charts/homarr/icon.svg" align="right" width="92" alt="homarr logo">
|
<img src="https://raw.githubusercontent.com/homarr-labs/charts/refs/heads/main/charts/homarr/icon.svg" align="right" width="92" alt="homarr logo">
|
||||||
|
|
||||||

|

|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
A Helm chart to deploy homarr for Kubernetes
|
A Helm chart to deploy homarr for Kubernetes
|
||||||
|
|
||||||
@@ -383,6 +383,7 @@ All available values are listed on the [artifacthub](https://artifacthub.io/pack
|
|||||||
| containerPorts | object | `{"http":{"port":7575,"protocol":"TCP"}}` | containerPorts defines the ports to open on the container. It is a map where each entry specifies: - `port` (int) (required): The port number to expose inside the container. - `protocol` (string) (required): The network protocol (TCP or UDP) used for the port. - `disabled` (bool) : Optional flag to disable this port (defaults to false). Can be overridden via Helm values. By default, this configuration exposes TCP port 7575 with the name `http`. |
|
| containerPorts | object | `{"http":{"port":7575,"protocol":"TCP"}}` | containerPorts defines the ports to open on the container. It is a map where each entry specifies: - `port` (int) (required): The port number to expose inside the container. - `protocol` (string) (required): The network protocol (TCP or UDP) used for the port. - `disabled` (bool) : Optional flag to disable this port (defaults to false). Can be overridden via Helm values. By default, this configuration exposes TCP port 7575 with the name `http`. |
|
||||||
| database.migrationEnabled | bool | `true` | Database migration configuration. DB_MIGRATIONS_DISABLED Set to `true` to disable database migrations. Migrations are enabled by default (`false`). |
|
| database.migrationEnabled | bool | `true` | Database migration configuration. DB_MIGRATIONS_DISABLED Set to `true` to disable database migrations. Migrations are enabled by default (`false`). |
|
||||||
| database.type | string | `"sqlite"` | Database type: sqlite, mysql or postgresql |
|
| database.type | string | `"sqlite"` | Database type: sqlite, mysql or postgresql |
|
||||||
|
| env.AUTH_COOKIE_PREFIX | string | `"homarr"` | Prefix used for all authentication cookies. Change if you run another Auth.js/NextAuth app on the same hostname to avoid cookie name collisions. Only letters, numbers, hyphens and underscores. |
|
||||||
| env.AUTH_LDAP_BASE | string | `nil` | Base dn of your LDAP server |
|
| env.AUTH_LDAP_BASE | string | `nil` | Base dn of your LDAP server |
|
||||||
| env.AUTH_LDAP_BIND_DN | string | `nil` | User used for finding users and groups |
|
| env.AUTH_LDAP_BIND_DN | string | `nil` | User used for finding users and groups |
|
||||||
| env.AUTH_LDAP_GROUP_CLASS | string | `"groupOfUniqueNames"` | Class used for querying groups |
|
| env.AUTH_LDAP_GROUP_CLASS | string | `"groupOfUniqueNames"` | Class used for querying groups |
|
||||||
@@ -395,7 +396,6 @@ All available values are listed on the [artifacthub](https://artifacthub.io/pack
|
|||||||
| env.AUTH_LDAP_USERNAME_FILTER_EXTRA_ARG | string | `nil` | Extra arguments for user search filter (& based) |
|
| env.AUTH_LDAP_USERNAME_FILTER_EXTRA_ARG | string | `nil` | Extra arguments for user search filter (& based) |
|
||||||
| env.AUTH_LDAP_USER_MAIL_ATTRIBUTE | string | `"mail"` | Attribute used for mail field |
|
| env.AUTH_LDAP_USER_MAIL_ATTRIBUTE | string | `"mail"` | Attribute used for mail field |
|
||||||
| env.AUTH_LOGOUT_REDIRECT_URL | string | `nil` | URL to redirect to after clicking logging out. |
|
| env.AUTH_LOGOUT_REDIRECT_URL | string | `nil` | URL to redirect to after clicking logging out. |
|
||||||
| env.AUTH_COOKIE_PREFIX | string | `"homarr"` | Prefix used for all authentication cookies. Change if you run another Auth.js/NextAuth app on the same hostname to avoid cookie name collisions. Only letters, numbers, hyphens and underscores. |
|
|
||||||
| env.AUTH_OIDC_AUTO_LOGIN | string | `"false"` | Automatically redirect to OIDC login |
|
| env.AUTH_OIDC_AUTO_LOGIN | string | `"false"` | Automatically redirect to OIDC login |
|
||||||
| env.AUTH_OIDC_CLIENT_NAME | string | `"OIDC"` | Display name of provider (in login screen) |
|
| env.AUTH_OIDC_CLIENT_NAME | string | `"OIDC"` | Display name of provider (in login screen) |
|
||||||
| env.AUTH_OIDC_GROUPS_ATTRIBUTE | string | `"groups"` | Attribute used for groups (roles) claim |
|
| env.AUTH_OIDC_GROUPS_ATTRIBUTE | string | `"groups"` | Attribute used for groups (roles) claim |
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
---
|
||||||
|
title: "ArchiveTeam Warrior"
|
||||||
|
description: "ArchiveTeam Warrior is an easy-to-run virtual machine that helps preserve websites by using some of your bandwidth and disk space to download and upload content to ArchiveTeam’s archive."
|
||||||
|
hide_title: true
|
||||||
|
---
|
||||||
|
|
||||||
|
import { IntegrationHeader } from "@site/src/components/integrations/header";
|
||||||
|
import { AddingIntegration } from "@site/src/components/integrations/adding";
|
||||||
|
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
|
||||||
|
import { archiveTeamWarriorIntegration } from ".";
|
||||||
|
|
||||||
|
<IntegrationHeader integration={archiveTeamWarriorIntegration} categories={["archiving"]} />
|
||||||
|
|
||||||
|
The ArchiveTeam Warrior integration lets Homarr connect to your ArchiveTeam Warrior instance so you can manage and monitor your archiving tasks directly from your dashboard.
|
||||||
|
|
||||||
|
### Adding the integration
|
||||||
|
|
||||||
|
<AddingIntegration />
|
||||||
|
|
||||||
|
### Secrets
|
||||||
|
|
||||||
|
ArchiveTeam Warrior does not require authentication by default. If your instance is protected with basic authentication, you can provide a username and password.
|
||||||
|
|
||||||
|
<IntegrationSecrets
|
||||||
|
secrets={[
|
||||||
|
{
|
||||||
|
credentials: [],
|
||||||
|
steps: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
credentials: ["username", "password"],
|
||||||
|
steps: [],
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
/>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
import { IntegrationDefinition } from "@site/src/types";
|
||||||
|
|
||||||
|
export const archiveTeamWarriorIntegration: IntegrationDefinition = {
|
||||||
|
name: "ArchiveTeam Warrior",
|
||||||
|
description:
|
||||||
|
"ArchiveTeam Warrior is an easy-to-run virtual machine that helps preserve websites by using some of your bandwidth and disk space to download and upload content to ArchiveTeam’s archive.",
|
||||||
|
iconUrl: "https://cdn.jsdelivr.net/gh/selfhst/icons/png/archiveteam-warrior.png",
|
||||||
|
path: "../../integrations/archiveteam-warrior",
|
||||||
|
};
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
---
|
||||||
|
title: 'FileFlows'
|
||||||
|
description: "FileFlows is a distributed media processing system that allows you to encode, compress and process your media files across multiple nodes."
|
||||||
|
hide_title: true
|
||||||
|
---
|
||||||
|
|
||||||
|
import { IntegrationHeader } from '@site/src/components/integrations/header';
|
||||||
|
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
|
||||||
|
import { AddingIntegration } from '@site/src/components/integrations/adding';
|
||||||
|
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
|
||||||
|
import { IconTransform } from "@tabler/icons-react";
|
||||||
|
import { fileFlowsIntegration } from '.';
|
||||||
|
import { mediaTranscodingWidget } from '@site/docs/widgets/media-transcoding';
|
||||||
|
|
||||||
|
|
||||||
|
<IntegrationHeader
|
||||||
|
integration={fileFlowsIntegration}
|
||||||
|
categories={['Media Transcoding']}
|
||||||
|
/>
|
||||||
|
|
||||||
|
### Widgets & Capabilities
|
||||||
|
<IntegrationCapabilites
|
||||||
|
items={[{ widget: mediaTranscodingWidget }]}
|
||||||
|
/>
|
||||||
|
|
||||||
|
### Adding the integration
|
||||||
|
<AddingIntegration />
|
||||||
|
|
||||||
|
### Secrets
|
||||||
|
<IntegrationSecrets secrets={[{
|
||||||
|
credentials: ['apiKey'],
|
||||||
|
steps: []
|
||||||
|
}, {
|
||||||
|
credentials: [],
|
||||||
|
steps: []
|
||||||
|
}]} />
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
import { IntegrationDefinition } from "@site/src/types";
|
||||||
|
export const fileFlowsIntegration: IntegrationDefinition = {
|
||||||
|
name: "FileFlows",
|
||||||
|
description:
|
||||||
|
"FileFlows is a distributed media processing system that allows you to encode, compress and process your media files across multiple nodes.",
|
||||||
|
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/fileflows.png",
|
||||||
|
path: "../../integrations/fileflows",
|
||||||
|
};
|
||||||
@@ -63,7 +63,9 @@ import withoutIntegrations from './img/without-integrations.png';
|
|||||||
|
|
||||||
### Interactions
|
### Interactions
|
||||||
|
|
||||||
- View calendar events by clicking on the marked dates.
|
- Hover over a marked date to preview its events in a popover.
|
||||||
|
- Click on a marked date to pin the popover open (it will stay visible even after moving the mouse away).
|
||||||
|
- Click the date again or click outside to close the pinned popover.
|
||||||
|
|
||||||
### Adding the widget
|
### Adding the widget
|
||||||
|
|
||||||
|
|||||||
@@ -31,8 +31,6 @@ const nextConfig: NextConfig = {
|
|||||||
},
|
},
|
||||||
output: "standalone",
|
output: "standalone",
|
||||||
reactStrictMode: true,
|
reactStrictMode: true,
|
||||||
// Ship browser source maps so production client stack traces are readable, see https://github.com/homarr-labs/homarr/issues/5891
|
|
||||||
productionBrowserSourceMaps: true,
|
|
||||||
// react compiler breaks mantine-react-table, so disabled for now
|
// react compiler breaks mantine-react-table, so disabled for now
|
||||||
//reactCompiler: true,
|
//reactCompiler: true,
|
||||||
/** We already do typechecking as separate tasks in CI */
|
/** We already do typechecking as separate tasks in CI */
|
||||||
@@ -43,8 +41,6 @@ const nextConfig: NextConfig = {
|
|||||||
*/
|
*/
|
||||||
serverExternalPackages: ["dockerode", "isomorphic-dompurify", "jsdom", "better-sqlite3"],
|
serverExternalPackages: ["dockerode", "isomorphic-dompurify", "jsdom", "better-sqlite3"],
|
||||||
experimental: {
|
experimental: {
|
||||||
// Ship server source maps so production Node stack traces in logs reference original source, see https://github.com/homarr-labs/homarr/issues/5891
|
|
||||||
serverSourceMaps: true,
|
|
||||||
optimizePackageImports: ["@mantine/core", "@mantine/hooks", "@tabler/icons-react"],
|
optimizePackageImports: ["@mantine/core", "@mantine/hooks", "@tabler/icons-react"],
|
||||||
turbopackFileSystemCacheForDev: true,
|
turbopackFileSystemCacheForDev: true,
|
||||||
preloadEntriesOnStart: false,
|
preloadEntriesOnStart: false,
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import type { MutableRefObject } from "react";
|
||||||
|
import { useRef } from "react";
|
||||||
import { Badge, Card } from "@mantine/core";
|
import { Badge, Card } from "@mantine/core";
|
||||||
import { useElementSize } from "@mantine/hooks";
|
import { useElementSize } from "@mantine/hooks";
|
||||||
import { QueryErrorResetBoundary } from "@tanstack/react-query";
|
import { QueryErrorResetBoundary } from "@tanstack/react-query";
|
||||||
@@ -16,6 +18,7 @@ import classes from "../sections/item.module.css";
|
|||||||
import { useItemActions } from "./item-actions";
|
import { useItemActions } from "./item-actions";
|
||||||
import itemContentClasses from "./item-content.module.css";
|
import itemContentClasses from "./item-content.module.css";
|
||||||
import { BoardItemMenu } from "./item-menu";
|
import { BoardItemMenu } from "./item-menu";
|
||||||
|
import { WidgetContextMenu } from "./widget-context-menu";
|
||||||
|
|
||||||
interface BoardItemContentProps {
|
interface BoardItemContentProps {
|
||||||
item: SectionItem;
|
item: SectionItem;
|
||||||
@@ -30,30 +33,33 @@ const getOverflowFromKind = (kind: SectionItem["kind"]) => {
|
|||||||
export const BoardItemContent = ({ item }: BoardItemContentProps) => {
|
export const BoardItemContent = ({ item }: BoardItemContentProps) => {
|
||||||
const { ref, width, height } = useElementSize<HTMLDivElement>();
|
const { ref, width, height } = useElementSize<HTMLDivElement>();
|
||||||
const board = useRequiredBoard();
|
const board = useRequiredBoard();
|
||||||
|
const widgetStateRef = useRef<Record<string, unknown> | null>(null);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Card
|
<WidgetContextMenu item={item} widgetStateRef={widgetStateRef}>
|
||||||
ref={ref}
|
<Card
|
||||||
className={combineClasses(
|
ref={ref}
|
||||||
classes.itemCard,
|
className={combineClasses(
|
||||||
`${item.kind}-wrapper`,
|
classes.itemCard,
|
||||||
"grid-stack-item-content",
|
`${item.kind}-wrapper`,
|
||||||
item.advancedOptions.customCssClasses.join(" "),
|
"grid-stack-item-content",
|
||||||
)}
|
item.advancedOptions.customCssClasses.join(" "),
|
||||||
radius={board.itemRadius}
|
)}
|
||||||
styles={{
|
radius={board.itemRadius}
|
||||||
root: {
|
styles={{
|
||||||
"--opacity": board.opacity / 100,
|
root: {
|
||||||
containerType: "size",
|
"--opacity": board.opacity / 100,
|
||||||
overflow: getOverflowFromKind(item.kind),
|
containerType: "size",
|
||||||
"--border-color": item.advancedOptions.borderColor !== "" ? item.advancedOptions.borderColor : undefined,
|
overflow: getOverflowFromKind(item.kind),
|
||||||
},
|
"--border-color": item.advancedOptions.borderColor !== "" ? item.advancedOptions.borderColor : undefined,
|
||||||
}}
|
},
|
||||||
p={0}
|
}}
|
||||||
>
|
p={0}
|
||||||
<InnerContent item={item} width={width} height={height} />
|
>
|
||||||
</Card>
|
<InnerContent item={item} width={width} height={height} widgetStateRef={widgetStateRef} />
|
||||||
|
</Card>
|
||||||
|
</WidgetContextMenu>
|
||||||
{item.advancedOptions.title?.trim() && (
|
{item.advancedOptions.title?.trim() && (
|
||||||
<Badge
|
<Badge
|
||||||
pos="absolute"
|
pos="absolute"
|
||||||
@@ -83,6 +89,7 @@ interface InnerContentProps {
|
|||||||
item: SectionItem;
|
item: SectionItem;
|
||||||
width: number;
|
width: number;
|
||||||
height: number;
|
height: number;
|
||||||
|
widgetStateRef: MutableRefObject<Record<string, unknown> | null>;
|
||||||
}
|
}
|
||||||
|
|
||||||
const InnerContent = ({ item, ...dimensions }: InnerContentProps) => {
|
const InnerContent = ({ item, ...dimensions }: InnerContentProps) => {
|
||||||
|
|||||||
@@ -0,0 +1,250 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import type { MutableRefObject, ReactNode } from "react";
|
||||||
|
import { useCallback, useMemo } from "react";
|
||||||
|
import { Group, Menu, Switch } from "@mantine/core";
|
||||||
|
import { IconCopy, IconLayoutKanban, IconSettings, IconTrash } from "@tabler/icons-react";
|
||||||
|
|
||||||
|
import { clientApi } from "@homarr/api/client";
|
||||||
|
import { useSession } from "@homarr/auth/client";
|
||||||
|
import { useRequiredBoard } from "@homarr/boards/context";
|
||||||
|
import { useEditMode } from "@homarr/boards/edit-mode";
|
||||||
|
import { useConfirmModal, useModalAction } from "@homarr/modals";
|
||||||
|
import { useSettings } from "@homarr/settings";
|
||||||
|
import { translateIfNecessary } from "@homarr/translation";
|
||||||
|
import { useI18n, useScopedI18n } from "@homarr/translation/client";
|
||||||
|
import type { WidgetContextMenuAction } from "@homarr/widgets";
|
||||||
|
import { reduceWidgetOptionsWithDefaultValues, widgetImports } from "@homarr/widgets";
|
||||||
|
import { WidgetEditModal } from "@homarr/widgets/modals";
|
||||||
|
|
||||||
|
import type { SectionItem } from "~/app/[locale]/boards/_types";
|
||||||
|
import { useSectionContext } from "../sections/section-context";
|
||||||
|
import { useItemActions } from "./item-actions";
|
||||||
|
import { ItemMoveModal } from "./item-move-modal";
|
||||||
|
|
||||||
|
interface WidgetContextMenuProps {
|
||||||
|
item: SectionItem;
|
||||||
|
widgetStateRef: MutableRefObject<Record<string, unknown> | null>;
|
||||||
|
children: ReactNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const WidgetContextMenu = ({ item, widgetStateRef, children }: WidgetContextMenuProps) => {
|
||||||
|
const { data: session } = useSession();
|
||||||
|
const [isEditMode] = useEditMode();
|
||||||
|
const board = useRequiredBoard();
|
||||||
|
const tItem = useScopedI18n("item");
|
||||||
|
const tMenu = useScopedI18n("item.menu.label");
|
||||||
|
const t = useI18n();
|
||||||
|
const settings = useSettings();
|
||||||
|
const { openModal } = useModalAction(WidgetEditModal);
|
||||||
|
const { openModal: openMoveModal } = useModalAction(ItemMoveModal);
|
||||||
|
const { openConfirmModal } = useConfirmModal();
|
||||||
|
const { updateItemOptions, updateItemAdvancedOptions, updateItemIntegrations, duplicateItem, removeItem } =
|
||||||
|
useItemActions();
|
||||||
|
const { data: integrationData, isPending } = clientApi.integration.all.useQuery();
|
||||||
|
const { mutate: saveBoard } = clientApi.board.saveBoard.useMutation();
|
||||||
|
const currentDefinition = useMemo(() => widgetImports[item.kind].definition, [item.kind]);
|
||||||
|
const { gridstack } = useSectionContext().refs;
|
||||||
|
|
||||||
|
const options = useMemo(
|
||||||
|
() => reduceWidgetOptionsWithDefaultValues(item.kind, settings, item.options) as Record<string, unknown>,
|
||||||
|
[item.kind, settings, item.options],
|
||||||
|
);
|
||||||
|
|
||||||
|
type OptionDef = { type: string; skipContextMenu?: boolean };
|
||||||
|
const toggleOptions = useMemo(() => {
|
||||||
|
const rawOptions = currentDefinition.createOptions(settings) as unknown as Record<string, OptionDef>;
|
||||||
|
return Object.entries(rawOptions).filter(([, def]) => def.type === "switch" && !def.skipContextMenu);
|
||||||
|
}, [currentDefinition, settings]);
|
||||||
|
|
||||||
|
const widgetContextActions = useMemo(() => {
|
||||||
|
const def = currentDefinition as Record<string, unknown>;
|
||||||
|
if (typeof def.contextActions !== "function") return [];
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
const actions = (def.contextActions as any)({
|
||||||
|
options,
|
||||||
|
setOptions: (partial: Record<string, unknown>) => {
|
||||||
|
updateItemOptions({ itemId: item.id, newOptions: { ...options, ...partial } });
|
||||||
|
},
|
||||||
|
integrationIds: item.integrationIds,
|
||||||
|
context: { isEditMode, boardId: board.id, itemId: item.id },
|
||||||
|
widgetStateRef,
|
||||||
|
});
|
||||||
|
return (Array.isArray(actions) ? actions : []) as WidgetContextMenuAction[];
|
||||||
|
}, [currentDefinition, options, item, updateItemOptions, isEditMode, board.id, widgetStateRef]);
|
||||||
|
|
||||||
|
const persistBoard = useCallback(
|
||||||
|
(updatedItems: typeof board.items) => {
|
||||||
|
saveBoard({ ...board, items: updatedItems });
|
||||||
|
},
|
||||||
|
[board, saveBoard],
|
||||||
|
);
|
||||||
|
|
||||||
|
const openEditModal = useCallback(() => {
|
||||||
|
openModal(
|
||||||
|
{
|
||||||
|
kind: item.kind,
|
||||||
|
value: {
|
||||||
|
advancedOptions: item.advancedOptions,
|
||||||
|
options: item.options,
|
||||||
|
integrationIds: item.integrationIds,
|
||||||
|
},
|
||||||
|
onSuccessfulEdit: (editResult) => {
|
||||||
|
updateItemOptions({ itemId: item.id, newOptions: editResult.options });
|
||||||
|
updateItemAdvancedOptions({ itemId: item.id, newAdvancedOptions: editResult.advancedOptions });
|
||||||
|
updateItemIntegrations({ itemId: item.id, newIntegrations: editResult.integrationIds });
|
||||||
|
if (!isEditMode) {
|
||||||
|
persistBoard(
|
||||||
|
board.items.map((boardItem) =>
|
||||||
|
boardItem.id !== item.id
|
||||||
|
? boardItem
|
||||||
|
: {
|
||||||
|
...boardItem,
|
||||||
|
options: editResult.options,
|
||||||
|
advancedOptions: editResult.advancedOptions,
|
||||||
|
integrationIds: editResult.integrationIds,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
integrationData: (integrationData ?? []).filter(
|
||||||
|
(integration) =>
|
||||||
|
"supportedIntegrations" in currentDefinition &&
|
||||||
|
(currentDefinition.supportedIntegrations as string[]).some((kind) => kind === integration.kind),
|
||||||
|
),
|
||||||
|
integrationSupport: "supportedIntegrations" in currentDefinition,
|
||||||
|
settings,
|
||||||
|
appId: item.kind === "app" ? (item.options.appId as string | undefined) : undefined,
|
||||||
|
},
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
{ title: (fn: any) => `${fn("item.edit.title")} - ${fn(`widget.${item.kind}.name`)}` },
|
||||||
|
);
|
||||||
|
}, [
|
||||||
|
openModal,
|
||||||
|
item,
|
||||||
|
updateItemOptions,
|
||||||
|
updateItemAdvancedOptions,
|
||||||
|
updateItemIntegrations,
|
||||||
|
integrationData,
|
||||||
|
currentDefinition,
|
||||||
|
settings,
|
||||||
|
isEditMode,
|
||||||
|
persistBoard,
|
||||||
|
board,
|
||||||
|
]);
|
||||||
|
|
||||||
|
const handleToggle = useCallback(
|
||||||
|
(key: string) => (checked: boolean) => {
|
||||||
|
const newOptions = { ...options, [key]: checked };
|
||||||
|
updateItemOptions({ itemId: item.id, newOptions });
|
||||||
|
persistBoard(
|
||||||
|
board.items.map((boardItem) => (boardItem.id !== item.id ? boardItem : { ...boardItem, options: newOptions })),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
[options, item.id, updateItemOptions, persistBoard, board],
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!session) return <>{children}</>;
|
||||||
|
|
||||||
|
const visibleWidgetActions = widgetContextActions.filter((a) => !a.hidden);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Menu shadow="md" width={300} closeOnItemClick={false} position="right-start" offset={4}>
|
||||||
|
<Menu.ContextMenu>{children}</Menu.ContextMenu>
|
||||||
|
<Menu.Dropdown>
|
||||||
|
{toggleOptions.length > 0 && (
|
||||||
|
<>
|
||||||
|
<Menu.Label>{tMenu("options")}</Menu.Label>
|
||||||
|
{toggleOptions.map(([key]) => (
|
||||||
|
<Menu.Item key={key} onClick={() => handleToggle(key)(!options[key])}>
|
||||||
|
{/* eslint-disable-next-line @typescript-eslint/no-explicit-any */}
|
||||||
|
<Group wrap="nowrap">
|
||||||
|
{String(translateIfNecessary(t, ((fn: any) => fn(`widget.${item.kind}.option.${key}.label`)) as any))}
|
||||||
|
<Switch size="xs" checked={Boolean(options[key])} readOnly tabIndex={-1} ml="auto" />
|
||||||
|
</Group>
|
||||||
|
</Menu.Item>
|
||||||
|
))}
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{visibleWidgetActions.length > 0 && (
|
||||||
|
<>
|
||||||
|
{toggleOptions.length > 0 && <Menu.Divider />}
|
||||||
|
<Menu.Label>{tMenu("actions")}</Menu.Label>
|
||||||
|
{visibleWidgetActions.map((action) => {
|
||||||
|
const Icon = action.icon;
|
||||||
|
return (
|
||||||
|
<Menu.Item
|
||||||
|
key={action.key}
|
||||||
|
closeMenuOnClick
|
||||||
|
leftSection={Icon ? <Icon size={16} /> : undefined}
|
||||||
|
onClick={action.onClick}
|
||||||
|
disabled={action.disabled}
|
||||||
|
color={action.color}
|
||||||
|
>
|
||||||
|
{String(translateIfNecessary(t, action.label))}
|
||||||
|
</Menu.Item>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{isEditMode && (
|
||||||
|
<>
|
||||||
|
{(toggleOptions.length > 0 || visibleWidgetActions.length > 0) && <Menu.Divider />}
|
||||||
|
<Menu.Item
|
||||||
|
closeMenuOnClick
|
||||||
|
leftSection={<IconLayoutKanban size={16} />}
|
||||||
|
onClick={() => {
|
||||||
|
if (!gridstack.current) return;
|
||||||
|
openMoveModal({ item, columnCount: gridstack.current.getColumn(), gridStack: gridstack.current });
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{tItem("action.moveResize")}
|
||||||
|
</Menu.Item>
|
||||||
|
<Menu.Item
|
||||||
|
closeMenuOnClick
|
||||||
|
leftSection={<IconCopy size={16} />}
|
||||||
|
onClick={() => duplicateItem({ itemId: item.id })}
|
||||||
|
>
|
||||||
|
{tItem("action.duplicate")}
|
||||||
|
</Menu.Item>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
|
||||||
|
<>
|
||||||
|
{!isEditMode && (toggleOptions.length > 0 || visibleWidgetActions.length > 0) && <Menu.Divider />}
|
||||||
|
<Menu.Item
|
||||||
|
closeMenuOnClick
|
||||||
|
leftSection={<IconSettings size={16} />}
|
||||||
|
onClick={openEditModal}
|
||||||
|
disabled={isPending}
|
||||||
|
>
|
||||||
|
{tMenu("settings")}
|
||||||
|
</Menu.Item>
|
||||||
|
</>
|
||||||
|
|
||||||
|
{isEditMode && (
|
||||||
|
<>
|
||||||
|
<Menu.Divider />
|
||||||
|
<Menu.Item
|
||||||
|
closeMenuOnClick
|
||||||
|
color="red"
|
||||||
|
leftSection={<IconTrash size={16} />}
|
||||||
|
onClick={() => {
|
||||||
|
openConfirmModal({
|
||||||
|
title: tItem("remove.title"),
|
||||||
|
children: tItem("remove.message"),
|
||||||
|
onConfirm: () => removeItem({ itemId: item.id }),
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{tItem("action.remove")}
|
||||||
|
</Menu.Item>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</Menu.Dropdown>
|
||||||
|
</Menu>
|
||||||
|
);
|
||||||
|
};
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM node:24.17.0-trixie AS base
|
FROM node:24.18.0-trixie AS base
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY package.json .
|
COPY package.json .
|
||||||
COPY pnpm-lock.yaml .
|
COPY pnpm-lock.yaml .
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
"better-sqlite3": "^12.10.0"
|
"better-sqlite3": "^12.10.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=24.17.0",
|
"node": ">=24.18.0",
|
||||||
"pnpm": ">=11.8.0"
|
"pnpm": ">=11.9.0"
|
||||||
},
|
},
|
||||||
"packageManager": "pnpm@11.8.0"
|
"packageManager": "pnpm@11.9.0"
|
||||||
}
|
}
|
||||||
+4
-4
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "homarr",
|
"name": "homarr",
|
||||||
"version": "1.68.0",
|
"version": "1.68.1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "cross-env CI=true turbo build",
|
"build": "cross-env CI=true turbo build",
|
||||||
@@ -61,10 +61,10 @@
|
|||||||
"vitest": "catalog:"
|
"vitest": "catalog:"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=24.17.0",
|
"node": ">=24.18.0",
|
||||||
"pnpm": ">=11.8.0"
|
"pnpm": ">=11.9.0"
|
||||||
},
|
},
|
||||||
"packageManager": "pnpm@11.8.0",
|
"packageManager": "pnpm@11.9.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"jsonpath-plus": "catalog:"
|
"jsonpath-plus": "catalog:"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ const integrationAliases: Partial<Record<IntegrationKind, readonly string[]>> =
|
|||||||
linuxServerIO: ["linuxserver"],
|
linuxServerIO: ["linuxserver"],
|
||||||
coolify: ["coolify"],
|
coolify: ["coolify"],
|
||||||
truenas: ["truenas"],
|
truenas: ["truenas"],
|
||||||
|
fileFlows: ["fileflows"],
|
||||||
};
|
};
|
||||||
|
|
||||||
export const matchIntegrationKind = (search: string): IntegrationKind | null => {
|
export const matchIntegrationKind = (search: string): IntegrationKind | null => {
|
||||||
|
|||||||
@@ -165,6 +165,7 @@ export type HomarrDocumentationPath =
|
|||||||
| "/docs/getting-started/installation/unraid"
|
| "/docs/getting-started/installation/unraid"
|
||||||
| "/docs/integrations/adguard-home"
|
| "/docs/integrations/adguard-home"
|
||||||
| "/docs/integrations/anchor"
|
| "/docs/integrations/anchor"
|
||||||
|
| "/docs/integrations/archiveteam-warrior"
|
||||||
| "/docs/integrations/aria2"
|
| "/docs/integrations/aria2"
|
||||||
| "/docs/integrations/audiobookshelf"
|
| "/docs/integrations/audiobookshelf"
|
||||||
| "/docs/integrations/beszel"
|
| "/docs/integrations/beszel"
|
||||||
@@ -311,6 +312,7 @@ export type HomarrDocumentationPath =
|
|||||||
| "/docs/integrations/dash-dot"
|
| "/docs/integrations/dash-dot"
|
||||||
| "/docs/integrations/glances"
|
| "/docs/integrations/glances"
|
||||||
| "/docs/integrations/tdarr"
|
| "/docs/integrations/tdarr"
|
||||||
|
| "/docs/integrations/fileflows"
|
||||||
| "/docs/integrations/proxmox"
|
| "/docs/integrations/proxmox"
|
||||||
| "/docs/integrations/nextcloud"
|
| "/docs/integrations/nextcloud"
|
||||||
| "/docs/integrations/unifi-controller"
|
| "/docs/integrations/unifi-controller"
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ export const integrationDocSlugs: Record<IntegrationKind, string | null> = {
|
|||||||
dashDot: "dash-dot",
|
dashDot: "dash-dot",
|
||||||
glances: "glances",
|
glances: "glances",
|
||||||
tdarr: "tdarr",
|
tdarr: "tdarr",
|
||||||
|
fileFlows: "fileflows",
|
||||||
proxmox: "proxmox",
|
proxmox: "proxmox",
|
||||||
nextcloud: "nextcloud",
|
nextcloud: "nextcloud",
|
||||||
unifiController: "unifi-controller",
|
unifiController: "unifi-controller",
|
||||||
|
|||||||
@@ -251,6 +251,14 @@ export const integrationDefs = {
|
|||||||
documentationUrl: createDocumentationLink("/docs/integrations/tdarr"),
|
documentationUrl: createDocumentationLink("/docs/integrations/tdarr"),
|
||||||
defaultPort: 8265,
|
defaultPort: 8265,
|
||||||
},
|
},
|
||||||
|
fileFlows: {
|
||||||
|
name: "FileFlows",
|
||||||
|
secretKinds: [[], ["apiKey"]],
|
||||||
|
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/png/fileflows.png",
|
||||||
|
category: ["mediaTranscoding"],
|
||||||
|
documentationUrl: createDocumentationLink("/docs/integrations/fileflows"),
|
||||||
|
defaultPort: 5000,
|
||||||
|
},
|
||||||
proxmox: {
|
proxmox: {
|
||||||
name: "Proxmox",
|
name: "Proxmox",
|
||||||
secretKinds: [["username", "tokenId", "apiKey", "realm"]],
|
secretKinds: [["username", "tokenId", "apiKey", "realm"]],
|
||||||
@@ -502,7 +510,7 @@ export const integrationDefs = {
|
|||||||
iconUrl: "https://cdn.jsdelivr.net/gh/selfhst/icons/png/archiveteam-warrior.png",
|
iconUrl: "https://cdn.jsdelivr.net/gh/selfhst/icons/png/archiveteam-warrior.png",
|
||||||
category: ["archiving"],
|
category: ["archiving"],
|
||||||
defaultUrl: "http://localhost:8001",
|
defaultUrl: "http://localhost:8001",
|
||||||
documentationUrl: null,
|
documentationUrl: createDocumentationLink("/docs/integrations/archiveteam-warrior"),
|
||||||
},
|
},
|
||||||
// This integration only returns mock data, it is used during development (but can also be used in production by directly going to the create page)
|
// This integration only returns mock data, it is used during development (but can also be used in production by directly going to the create page)
|
||||||
mock: {
|
mock: {
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import { RadarrIntegration } from "../media-organizer/radarr/radarr-integration"
|
|||||||
import { ReadarrIntegration } from "../media-organizer/readarr/readarr-integration";
|
import { ReadarrIntegration } from "../media-organizer/readarr/readarr-integration";
|
||||||
import { SonarrIntegration } from "../media-organizer/sonarr/sonarr-integration";
|
import { SonarrIntegration } from "../media-organizer/sonarr/sonarr-integration";
|
||||||
import { TdarrIntegration } from "../media-transcoding/tdarr-integration";
|
import { TdarrIntegration } from "../media-transcoding/tdarr-integration";
|
||||||
|
import { FileFlowsIntegration } from "../media-transcoding/fileflows-integration";
|
||||||
import { MockIntegration } from "../mock/mock-integration";
|
import { MockIntegration } from "../mock/mock-integration";
|
||||||
import { NavidromeIntegration } from "../navidrome/navidrome-integration";
|
import { NavidromeIntegration } from "../navidrome/navidrome-integration";
|
||||||
import { NextcloudIntegration } from "../nextcloud/nextcloud.integration";
|
import { NextcloudIntegration } from "../nextcloud/nextcloud.integration";
|
||||||
@@ -109,6 +110,7 @@ export const integrationCreators = {
|
|||||||
readarr: ReadarrIntegration,
|
readarr: ReadarrIntegration,
|
||||||
dashDot: DashDotIntegration,
|
dashDot: DashDotIntegration,
|
||||||
tdarr: TdarrIntegration,
|
tdarr: TdarrIntegration,
|
||||||
|
fileFlows: FileFlowsIntegration,
|
||||||
proxmox: ProxmoxIntegration,
|
proxmox: ProxmoxIntegration,
|
||||||
emby: EmbyIntegration,
|
emby: EmbyIntegration,
|
||||||
nextcloud: NextcloudIntegration,
|
nextcloud: NextcloudIntegration,
|
||||||
|
|||||||
@@ -0,0 +1,200 @@
|
|||||||
|
import { fetchWithTrustedCertificatesAsync } from "@homarr/core/infrastructure/http";
|
||||||
|
|
||||||
|
import type { IntegrationTestingInput } from "../base/integration";
|
||||||
|
import { Integration } from "../base/integration";
|
||||||
|
import { TestConnectionError } from "../base/test-connection/test-connection-error";
|
||||||
|
import type { TestingResult } from "../base/test-connection/test-connection-service";
|
||||||
|
import type { IMediaTranscodingIntegration } from "../interfaces/media-transcoding/media-transcoding-integration";
|
||||||
|
import type { TdarrQueue, TdarrStatistics, TdarrWorker } from "../interfaces/media-transcoding/media-transcoding-types";
|
||||||
|
import {
|
||||||
|
libraryStatusSchema,
|
||||||
|
recentlyFinishedSchema,
|
||||||
|
shrinkageGroupsSchema,
|
||||||
|
statusResponseSchema,
|
||||||
|
upcomingFilesSchema,
|
||||||
|
workersResponseSchema,
|
||||||
|
} from "./fileflows-validation-schemas";
|
||||||
|
|
||||||
|
export class FileFlowsIntegration extends Integration implements IMediaTranscodingIntegration {
|
||||||
|
protected async testingAsync(input: IntegrationTestingInput): Promise<TestingResult> {
|
||||||
|
const response = await input.fetchAsync(this.url("/api/system/version"), {
|
||||||
|
method: "GET",
|
||||||
|
headers: {
|
||||||
|
accept: "application/json",
|
||||||
|
...(super.hasSecretValue("apiKey") ? { "X-Api-Key": super.getSecretValue("apiKey") } : {}),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!response.ok) return TestConnectionError.StatusResult(response);
|
||||||
|
|
||||||
|
return { success: true };
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getStatisticsAsync(): Promise<TdarrStatistics> {
|
||||||
|
const headerParams = {
|
||||||
|
accept: "application/json",
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
...(super.hasSecretValue("apiKey") ? { "X-Api-Key": super.getSecretValue("apiKey") } : {}),
|
||||||
|
};
|
||||||
|
|
||||||
|
const [statusData, libraryStatusData, shrinkageData] = await Promise.all([
|
||||||
|
this.fetchStatusAsync(headerParams),
|
||||||
|
this.fetchLibraryStatusAsync(headerParams),
|
||||||
|
this.fetchShrinkageAsync(headerParams),
|
||||||
|
]);
|
||||||
|
|
||||||
|
const failedCount = libraryStatusData
|
||||||
|
.filter((item) => item.Status === 4)
|
||||||
|
.reduce((sum, item) => sum + item.Count, 0);
|
||||||
|
const processedCount = libraryStatusData
|
||||||
|
.filter((item) => item.Status === 3)
|
||||||
|
.reduce((sum, item) => sum + item.Count, 0);
|
||||||
|
const queuedCount = libraryStatusData
|
||||||
|
.filter((item) => item.Status === 1 || item.Status === 5)
|
||||||
|
.reduce((sum, item) => sum + item.Count, 0);
|
||||||
|
|
||||||
|
const totalSavedSpace = Object.values(shrinkageData).reduce(
|
||||||
|
(sum, group) => sum + Math.max(0, group.OriginalSize - group.FinalSize),
|
||||||
|
0,
|
||||||
|
);
|
||||||
|
|
||||||
|
const transcodeStatus = [
|
||||||
|
{ name: "Processed", value: statusData.processed },
|
||||||
|
{ name: "Queued", value: statusData.queue },
|
||||||
|
{ name: "Processing", value: statusData.processing },
|
||||||
|
{ name: "Failed", value: failedCount },
|
||||||
|
];
|
||||||
|
|
||||||
|
return {
|
||||||
|
libraryName: "All",
|
||||||
|
totalFileCount: processedCount + queuedCount + statusData.processing + failedCount,
|
||||||
|
totalTranscodeCount: statusData.processed,
|
||||||
|
totalHealthCheckCount: 0,
|
||||||
|
failedTranscodeCount: failedCount,
|
||||||
|
failedHealthCheckCount: 0,
|
||||||
|
stagedTranscodeCount: statusData.queue,
|
||||||
|
stagedHealthCheckCount: 0,
|
||||||
|
totalSavedSpace,
|
||||||
|
transcodeStatus,
|
||||||
|
healthCheckStatus: [],
|
||||||
|
videoCodecs: [],
|
||||||
|
videoContainers: [],
|
||||||
|
videoResolutions: [],
|
||||||
|
audioCodecs: [],
|
||||||
|
audioContainers: [],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getWorkersAsync(): Promise<TdarrWorker[]> {
|
||||||
|
const headerParams = {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
...(super.hasSecretValue("apiKey") ? { "X-Api-Key": super.getSecretValue("apiKey") } : {}),
|
||||||
|
};
|
||||||
|
|
||||||
|
const url = this.url("/api/worker");
|
||||||
|
const response = await fetchWithTrustedCertificatesAsync(url, {
|
||||||
|
method: "GET",
|
||||||
|
headers: headerParams,
|
||||||
|
});
|
||||||
|
|
||||||
|
const workersData = await workersResponseSchema.parseAsync(await response.json());
|
||||||
|
|
||||||
|
return workersData.map((worker) => ({
|
||||||
|
id: worker.Uid,
|
||||||
|
filePath: worker.RelativeFile ?? "",
|
||||||
|
fps: 0,
|
||||||
|
percentage: worker.CurrentPartPercent,
|
||||||
|
ETA: worker.ProcessingTime?.TotalSeconds ? `${Math.round(worker.ProcessingTime.TotalSeconds)}s` : "",
|
||||||
|
jobType: worker.CurrentPartName ?? "Processing",
|
||||||
|
status: "Processing",
|
||||||
|
step: worker.CurrentPartName ?? "",
|
||||||
|
originalSize: worker.LibraryFile?.OriginalSize ?? 0,
|
||||||
|
estimatedSize: null,
|
||||||
|
outputSize: null,
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getQueueAsync(firstItemIndex: number, pageSize: number): Promise<TdarrQueue> {
|
||||||
|
const headerParams = {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
...(super.hasSecretValue("apiKey") ? { "X-Api-Key": super.getSecretValue("apiKey") } : {}),
|
||||||
|
};
|
||||||
|
|
||||||
|
const [upcomingItems, recentlyFinishedItems] = await Promise.all([
|
||||||
|
this.fetchUpcomingAsync(headerParams),
|
||||||
|
this.fetchRecentlyFinishedAsync(headerParams),
|
||||||
|
]);
|
||||||
|
|
||||||
|
const queueArray = [
|
||||||
|
...upcomingItems.map((item) => ({
|
||||||
|
id: item.Uid,
|
||||||
|
healthCheck: "",
|
||||||
|
transcode: item.Flow ?? "Default",
|
||||||
|
filePath: item.RelativePath ?? item.Name ?? "",
|
||||||
|
fileSize: item.OriginalSize ?? 0,
|
||||||
|
container: "",
|
||||||
|
codec: "",
|
||||||
|
resolution: "",
|
||||||
|
type: "transcode" as const,
|
||||||
|
})),
|
||||||
|
...recentlyFinishedItems.map((item) => ({
|
||||||
|
id: item.Uid,
|
||||||
|
healthCheck: "",
|
||||||
|
transcode: item.Flow ?? "Default",
|
||||||
|
filePath: item.RelativePath ?? item.Name ?? "",
|
||||||
|
fileSize: item.FinalSize ?? item.OriginalSize ?? 0,
|
||||||
|
container: "",
|
||||||
|
codec: "",
|
||||||
|
resolution: "",
|
||||||
|
type: "health-check" as const,
|
||||||
|
})),
|
||||||
|
].slice(0, pageSize);
|
||||||
|
|
||||||
|
return {
|
||||||
|
array: queueArray,
|
||||||
|
totalCount: upcomingItems.length + recentlyFinishedItems.length,
|
||||||
|
startIndex: firstItemIndex,
|
||||||
|
endIndex: firstItemIndex + queueArray.length - 1,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private async fetchStatusAsync(headerParams: Record<string, string>) {
|
||||||
|
const response = await fetchWithTrustedCertificatesAsync(this.url("/api/status"), {
|
||||||
|
method: "GET",
|
||||||
|
headers: headerParams,
|
||||||
|
});
|
||||||
|
return statusResponseSchema.parseAsync(await response.json());
|
||||||
|
}
|
||||||
|
|
||||||
|
private async fetchLibraryStatusAsync(headerParams: Record<string, string>) {
|
||||||
|
const response = await fetchWithTrustedCertificatesAsync(this.url("/api/library-file/status"), {
|
||||||
|
method: "GET",
|
||||||
|
headers: headerParams,
|
||||||
|
});
|
||||||
|
return libraryStatusSchema.parseAsync(await response.json());
|
||||||
|
}
|
||||||
|
|
||||||
|
private async fetchShrinkageAsync(headerParams: Record<string, string>) {
|
||||||
|
const response = await fetchWithTrustedCertificatesAsync(this.url("/api/library-file/shrinkage-groups"), {
|
||||||
|
method: "GET",
|
||||||
|
headers: headerParams,
|
||||||
|
});
|
||||||
|
return shrinkageGroupsSchema.parseAsync(await response.json());
|
||||||
|
}
|
||||||
|
|
||||||
|
private async fetchUpcomingAsync(headerParams: Record<string, string>) {
|
||||||
|
const response = await fetchWithTrustedCertificatesAsync(this.url("/api/library-file/upcoming"), {
|
||||||
|
method: "GET",
|
||||||
|
headers: headerParams,
|
||||||
|
});
|
||||||
|
return upcomingFilesSchema.parseAsync(await response.json());
|
||||||
|
}
|
||||||
|
|
||||||
|
private async fetchRecentlyFinishedAsync(headerParams: Record<string, string>) {
|
||||||
|
const response = await fetchWithTrustedCertificatesAsync(this.url("/api/library-file/recently-finished"), {
|
||||||
|
method: "GET",
|
||||||
|
headers: headerParams,
|
||||||
|
});
|
||||||
|
return recentlyFinishedSchema.parseAsync(await response.json());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
import { z } from "zod/v4";
|
||||||
|
|
||||||
|
export const statusResponseSchema = z.object({
|
||||||
|
queue: z.number(),
|
||||||
|
processing: z.number(),
|
||||||
|
processed: z.number(),
|
||||||
|
processingFiles: z
|
||||||
|
.array(
|
||||||
|
z.object({
|
||||||
|
name: z.string().nullable(),
|
||||||
|
relativePath: z.string().nullable(),
|
||||||
|
library: z.string().nullable(),
|
||||||
|
step: z.string().nullable(),
|
||||||
|
stepPercent: z.number(),
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.optional()
|
||||||
|
.transform((arr) => arr ?? []),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const libraryStatusSchema = z.array(
|
||||||
|
z.object({
|
||||||
|
Name: z.string().nullable(),
|
||||||
|
Status: z.number(),
|
||||||
|
Count: z.number(),
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
export const shrinkageGroupsSchema = z.record(
|
||||||
|
z.string(),
|
||||||
|
z.object({
|
||||||
|
Library: z.string().nullable(),
|
||||||
|
OriginalSize: z.number(),
|
||||||
|
FinalSize: z.number(),
|
||||||
|
Items: z.number(),
|
||||||
|
Difference: z.number().optional(),
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
export const workersResponseSchema = z.array(
|
||||||
|
z.object({
|
||||||
|
Uid: z.string(),
|
||||||
|
NodeName: z.string().nullable(),
|
||||||
|
RelativeFile: z.string().nullable(),
|
||||||
|
CurrentPart: z.number(),
|
||||||
|
CurrentPartName: z.string().nullable(),
|
||||||
|
CurrentPartPercent: z.number(),
|
||||||
|
StartedAt: z.string(),
|
||||||
|
LastUpdate: z.string(),
|
||||||
|
ProcessingTime: z
|
||||||
|
.object({
|
||||||
|
TotalSeconds: z.number().optional(),
|
||||||
|
})
|
||||||
|
.optional(),
|
||||||
|
LibraryFile: z
|
||||||
|
.object({
|
||||||
|
OriginalSize: z.number(),
|
||||||
|
})
|
||||||
|
.optional(),
|
||||||
|
Library: z
|
||||||
|
.object({
|
||||||
|
Name: z.string().nullable(),
|
||||||
|
})
|
||||||
|
.optional(),
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
export const upcomingFilesSchema = z.array(
|
||||||
|
z.object({
|
||||||
|
Uid: z.string(),
|
||||||
|
Name: z.string().nullable(),
|
||||||
|
RelativePath: z.string().nullable(),
|
||||||
|
OriginalSize: z.number().nullable(),
|
||||||
|
FinalSize: z.number().nullable(),
|
||||||
|
Status: z.number(),
|
||||||
|
Library: z.string().nullable(),
|
||||||
|
Flow: z.string().nullable(),
|
||||||
|
Node: z.string().nullable(),
|
||||||
|
ProcessingTime: z
|
||||||
|
.object({
|
||||||
|
TotalSeconds: z.number().optional(),
|
||||||
|
})
|
||||||
|
.optional(),
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
export const recentlyFinishedSchema = z.array(
|
||||||
|
z.object({
|
||||||
|
Uid: z.string(),
|
||||||
|
Name: z.string().nullable(),
|
||||||
|
RelativePath: z.string().nullable(),
|
||||||
|
OriginalSize: z.number().nullable(),
|
||||||
|
FinalSize: z.number().nullable(),
|
||||||
|
Status: z.number(),
|
||||||
|
Library: z.string().nullable(),
|
||||||
|
Flow: z.string().nullable(),
|
||||||
|
}),
|
||||||
|
);
|
||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "",
|
"here": "",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"header": ""
|
"header": "",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "",
|
"switchToDarkMode": "",
|
||||||
"switchToLightMode": "",
|
"switchToLightMode": "",
|
||||||
"management": "",
|
"management": "",
|
||||||
|
"docker": "",
|
||||||
"preferences": "",
|
"preferences": "",
|
||||||
"logout": "",
|
"logout": "",
|
||||||
"login": "",
|
"login": "",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": ""
|
"title": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"text": ""
|
"text": ""
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "",
|
"home": "",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": "",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "这里",
|
"here": "这里",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "图标 URL",
|
"label": "图标 URL",
|
||||||
"header": "输入名称或对象来筛选图标… Homarr 将为您搜索 {countIcons} 图标。"
|
"header": "输入名称或对象来筛选图标… Homarr 将为您搜索 {countIcons} 图标。",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "切换到暗黑模式",
|
"switchToDarkMode": "切换到暗黑模式",
|
||||||
"switchToLightMode": "切换到日间模式",
|
"switchToLightMode": "切换到日间模式",
|
||||||
"management": "管理中心",
|
"management": "管理中心",
|
||||||
|
"docker": "",
|
||||||
"preferences": "偏好设置",
|
"preferences": "偏好设置",
|
||||||
"logout": "退出登录",
|
"logout": "退出登录",
|
||||||
"login": "登录",
|
"login": "登录",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "Docker 状态",
|
"name": "Docker 状态",
|
||||||
"description": "您的容器状态 (这个小部件只能用管理员权限添加)",
|
"description": "您的容器状态 (这个小部件只能用管理员权限添加)",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": "启用项目排序"
|
"label": "启用项目排序"
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": "实例"
|
"title": "实例"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "未找到",
|
"title": "未找到",
|
||||||
"text": "找不到请求的资源"
|
"text": "找不到请求的资源"
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "首页",
|
"home": "首页",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": "Umami 活跃访客"
|
"label": "Umami 活跃访客"
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "获取 Docker 容器失败"
|
"internalServerError": "获取 Docker 容器失败",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "crwdns4473:0crwdne4473:0",
|
"mediaMonitoring": "crwdns4473:0crwdne4473:0",
|
||||||
"speedtest": "crwdns4475:0crwdne4475:0",
|
"speedtest": "crwdns4475:0crwdne4475:0",
|
||||||
"analytics": "crwdns4477:0crwdne4477:0",
|
"analytics": "crwdns4477:0crwdne4477:0",
|
||||||
|
"vpn": "crwdns5687:0crwdne5687:0",
|
||||||
"mediaLibrary": "crwdns4979:0crwdne4979:0",
|
"mediaLibrary": "crwdns4979:0crwdne4979:0",
|
||||||
"uptimeMonitoring": "crwdns4981:0crwdne4981:0"
|
"uptimeMonitoring": "crwdns4981:0crwdne4981:0"
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "crwdns552:0crwdne552:0",
|
"here": "crwdns552:0crwdne552:0",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "crwdns554:0crwdne554:0",
|
"label": "crwdns554:0crwdne554:0",
|
||||||
"header": "crwdns556:0{countIcons}crwdne556:0"
|
"header": "crwdns556:0{countIcons}crwdne556:0",
|
||||||
|
"headerLoading": "crwdns5681:0crwdne5681:0",
|
||||||
|
"noResults": "crwdns5683:0{search}crwdne5683:0",
|
||||||
|
"error": "crwdns5685:0crwdne5685:0"
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "crwdns594:0crwdne594:0",
|
"switchToDarkMode": "crwdns594:0crwdne594:0",
|
||||||
"switchToLightMode": "crwdns596:0crwdne596:0",
|
"switchToLightMode": "crwdns596:0crwdne596:0",
|
||||||
"management": "crwdns598:0crwdne598:0",
|
"management": "crwdns598:0crwdne598:0",
|
||||||
|
"docker": "crwdns5703:0crwdne5703:0",
|
||||||
"preferences": "crwdns600:0crwdne600:0",
|
"preferences": "crwdns600:0crwdne600:0",
|
||||||
"logout": "crwdns602:0crwdne602:0",
|
"logout": "crwdns602:0crwdne602:0",
|
||||||
"login": "crwdns604:0crwdne604:0",
|
"login": "crwdns604:0crwdne604:0",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "crwdns3424:0crwdne3424:0",
|
"name": "crwdns3424:0crwdne3424:0",
|
||||||
"description": "crwdns3426:0crwdne3426:0",
|
"description": "crwdns3426:0crwdne3426:0",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": "crwdns5705:0crwdne5705:0"
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": "crwdns3808:0crwdne3808:0"
|
"label": "crwdns3808:0crwdne3808:0"
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": "crwdns3876:0crwdne3876:0"
|
"title": "crwdns3876:0crwdne3876:0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "crwdns5689:0crwdne5689:0",
|
||||||
|
"description": "crwdns5691:0crwdne5691:0",
|
||||||
|
"serviceUnavailable": "crwdns5693:0crwdne5693:0",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "crwdns4481:0crwdne4481:0",
|
"name": "crwdns4481:0crwdne4481:0",
|
||||||
"description": "crwdns4483:0crwdne4483:0",
|
"description": "crwdns4483:0crwdne4483:0",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "crwdns5653:0crwdne5653:0"
|
"internalServerError": "crwdns5653:0crwdne5653:0"
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": "crwdns5677:0crwdne5677:0"
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "crwdns4865:0crwdne4865:0",
|
"cpu": "crwdns4865:0crwdne4865:0",
|
||||||
"memory": "crwdns4867:0crwdne4867:0",
|
"memory": "crwdns4867:0crwdne4867:0",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "crwdns4927:0crwdne4927:0",
|
"selectSystem": "crwdns4927:0crwdne4927:0",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": "crwdns5679:0crwdne5679:0"
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "crwdns5661:0crwdne5661:0",
|
"internalServerError": "crwdns5661:0crwdne5661:0",
|
||||||
"liveConnectionFailed": "crwdns5663:0crwdne5663:0",
|
"liveConnectionFailed": "crwdns5663:0crwdne5663:0",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "crwdns1568:0crwdne1568:0",
|
"title": "crwdns1568:0crwdne1568:0",
|
||||||
"text": "crwdns1570:0crwdne1570:0"
|
"text": "crwdns1570:0crwdne1570:0"
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "crwdns5697:0crwdne5697:0",
|
||||||
|
"text": "crwdns5699:0crwdne5699:0",
|
||||||
|
"digest": "crwdns5701:0{digest}crwdne5701:0"
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "crwdns1572:0crwdne1572:0",
|
"home": "crwdns1572:0crwdne1572:0",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": "crwdns4223:0crwdne4223:0"
|
"label": "crwdns4223:0crwdne4223:0"
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": "crwdns5695:0crwdne5695:0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "crwdns2262:0crwdne2262:0"
|
"internalServerError": "crwdns2262:0crwdne2262:0",
|
||||||
|
"noColumns": "crwdns5707:0crwdne5707:0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "zde",
|
"here": "zde",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "URL ikony",
|
"label": "URL ikony",
|
||||||
"header": ""
|
"header": "",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "Přepnout do tmavého režimu",
|
"switchToDarkMode": "Přepnout do tmavého režimu",
|
||||||
"switchToLightMode": "Přepnout do světlého režimu",
|
"switchToLightMode": "Přepnout do světlého režimu",
|
||||||
"management": "Správa",
|
"management": "Správa",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Vaše předvolby",
|
"preferences": "Vaše předvolby",
|
||||||
"logout": "Odhlásit se",
|
"logout": "Odhlásit se",
|
||||||
"login": "Přihlásit se",
|
"login": "Přihlásit se",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": ""
|
"title": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"text": "Nepodařilo se nalézt požadovaný zdroj"
|
"text": "Nepodařilo se nalézt požadovaný zdroj"
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Domovská stránka",
|
"home": "Domovská stránka",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": "",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "her",
|
"here": "her",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "Ikon-URL",
|
"label": "Ikon-URL",
|
||||||
"header": "Indtast navn eller objekter for at filtrere for ikoner... Homarr vil søge gennem {countIcons} ikoner for dig."
|
"header": "Indtast navn eller objekter for at filtrere for ikoner... Homarr vil søge gennem {countIcons} ikoner for dig.",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "Skift til mørk tilstand",
|
"switchToDarkMode": "Skift til mørk tilstand",
|
||||||
"switchToLightMode": "Skift til lys tilstand",
|
"switchToLightMode": "Skift til lys tilstand",
|
||||||
"management": "Håndtering",
|
"management": "Håndtering",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Dine indstillinger",
|
"preferences": "Dine indstillinger",
|
||||||
"logout": "Log ud",
|
"logout": "Log ud",
|
||||||
"login": "Log ind",
|
"login": "Log ind",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "Docker statistik",
|
"name": "Docker statistik",
|
||||||
"description": "Statistik for dine containere (Denne widget kan kun tilføjes med administratorrettigheder)",
|
"description": "Statistik for dine containere (Denne widget kan kun tilføjes med administratorrettigheder)",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": "Aktiver sortering"
|
"label": "Aktiver sortering"
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": "Instanser"
|
"title": "Instanser"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "Ikke Fundet",
|
"title": "Ikke Fundet",
|
||||||
"text": "Kunne ikke finde den anmodede ressource"
|
"text": "Kunne ikke finde den anmodede ressource"
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Hjem",
|
"home": "Hjem",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "Kunne ikke hente Docker-containere"
|
"internalServerError": "Kunne ikke hente Docker-containere",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "Hier",
|
"here": "Hier",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"header": "Geben Sie Namen oder Objekte ein, um nach Symbolen zu filtern... Homarr sucht nach {countIcons} Icons für Sie."
|
"header": "Geben Sie Namen oder Objekte ein, um nach Symbolen zu filtern... Homarr sucht nach {countIcons} Icons für Sie.",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "Zum dunklen Design wechseln",
|
"switchToDarkMode": "Zum dunklen Design wechseln",
|
||||||
"switchToLightMode": "Zum hellen Design wechseln",
|
"switchToLightMode": "Zum hellen Design wechseln",
|
||||||
"management": "Verwaltung",
|
"management": "Verwaltung",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Ihre Einstellungen",
|
"preferences": "Ihre Einstellungen",
|
||||||
"logout": "Abmelden",
|
"logout": "Abmelden",
|
||||||
"login": "Anmelden",
|
"login": "Anmelden",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": ""
|
"title": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "Nicht gefunden",
|
"title": "Nicht gefunden",
|
||||||
"text": "Konnte die angeforderte Ressource nicht finden"
|
"text": "Konnte die angeforderte Ressource nicht finden"
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Startseite",
|
"home": "Startseite",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "Fehler beim Abrufen der Docker Container"
|
"internalServerError": "Fehler beim Abrufen der Docker Container",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "Überwachung",
|
"mediaMonitoring": "Überwachung",
|
||||||
"speedtest": "Geschwindigkeitstest",
|
"speedtest": "Geschwindigkeitstest",
|
||||||
"analytics": "Nutzungsdaten",
|
"analytics": "Nutzungsdaten",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "Medienbibliothek",
|
"mediaLibrary": "Medienbibliothek",
|
||||||
"uptimeMonitoring": "Überwachung der Betriebszeit"
|
"uptimeMonitoring": "Überwachung der Betriebszeit"
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "Hier",
|
"here": "Hier",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "Icon URL",
|
"label": "Icon URL",
|
||||||
"header": "Geben Sie Namen oder Objekte ein, um nach Symbolen zu filtern... Homarr sucht nach {countIcons} Icons für Sie."
|
"header": "Geben Sie Namen oder Objekte ein, um nach Symbolen zu filtern... Homarr sucht nach {countIcons} Icons für Sie.",
|
||||||
|
"headerLoading": "Tippe um die Symbole zu durchsuchen…",
|
||||||
|
"noResults": "Keine Symbole stimmen mit \"{search}\" überein.",
|
||||||
|
"error": "Konnte Symbole nicht laden."
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "Zum dunklen Design wechseln",
|
"switchToDarkMode": "Zum dunklen Design wechseln",
|
||||||
"switchToLightMode": "Zum hellen Design wechseln",
|
"switchToLightMode": "Zum hellen Design wechseln",
|
||||||
"management": "Verwaltung",
|
"management": "Verwaltung",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Ihre Einstellungen",
|
"preferences": "Ihre Einstellungen",
|
||||||
"logout": "Abmelden",
|
"logout": "Abmelden",
|
||||||
"login": "Anmelden",
|
"login": "Anmelden",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "Docker Statistiken",
|
"name": "Docker Statistiken",
|
||||||
"description": "Statistiken Ihrer Container (Dieses Widget kann nur mit Administratorrechten hinzugefügt werden)",
|
"description": "Statistiken Ihrer Container (Dieses Widget kann nur mit Administratorrechten hinzugefügt werden)",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": "Sortierung von Elementen aktivieren"
|
"label": "Sortierung von Elementen aktivieren"
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": "Instanzen"
|
"title": "Instanzen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "UPS",
|
"name": "UPS",
|
||||||
"description": "Überwachen Sie den Status Ihrer UPS Geräte über einen NUT Server",
|
"description": "Überwachen Sie den Status Ihrer UPS Geräte über einen NUT Server",
|
||||||
@@ -3395,53 +3409,53 @@
|
|||||||
},
|
},
|
||||||
"showNowPlaying": {
|
"showNowPlaying": {
|
||||||
"label": "\"Sie hören\" anzeigen",
|
"label": "\"Sie hören\" anzeigen",
|
||||||
"description": ""
|
"description": "Zeige aktuell gespielte Titel an (Navidrome)"
|
||||||
},
|
},
|
||||||
"showNowPlayingList": {
|
"showNowPlayingList": {
|
||||||
"label": "",
|
"label": "\"Sie hören jetzt\" Wiedergabeliste anzeigen",
|
||||||
"description": ""
|
"description": "Einzelne Tracks anstelle der aktiven Streamanzahl anzeigen (Navidrome)"
|
||||||
},
|
},
|
||||||
"maxNowPlayingItems": {
|
"maxNowPlayingItems": {
|
||||||
"label": "",
|
"label": "Maximale jetzt abgespielte Elemente",
|
||||||
"description": ""
|
"description": "Maximale Anzahl an Titeln, die in der \"Sie hören jetzt\" Wiedergabeliste angezeigt werden (Navidrome)"
|
||||||
},
|
},
|
||||||
"showLibraryCount": {
|
"showLibraryCount": {
|
||||||
"label": "",
|
"label": "Anzahl der Bibliotheken anzeigen",
|
||||||
"description": ""
|
"description": "Zeige die Anzahl der Bibliotheken in deiner Instanz (Hörbücherregal)"
|
||||||
},
|
},
|
||||||
"showAudiobooks": {
|
"showAudiobooks": {
|
||||||
"label": "",
|
"label": "Hörbücher anzeigen",
|
||||||
"description": ""
|
"description": "Zeige die Gesamtzahl der Hörbücher in allen Bibliotheken (Hörbücherregal)"
|
||||||
},
|
},
|
||||||
"showPodcasts": {
|
"showPodcasts": {
|
||||||
"label": "",
|
"label": "Podcasts anzeigen",
|
||||||
"description": ""
|
"description": "Zeige die Gesamtzahl der Podcasts in allen Bibliotheken (Hörbücherregal)"
|
||||||
},
|
},
|
||||||
"showListeningTime": {
|
"showListeningTime": {
|
||||||
"label": "",
|
"label": "Hördauer anzeigen",
|
||||||
"description": "Zeigt deine gesamte Hörzeit (Audiobookshelf)"
|
"description": "Zeigt deine gesamte Hörzeit (Audiobookshelf)"
|
||||||
},
|
},
|
||||||
"showActiveSessions": {
|
"showActiveSessions": {
|
||||||
"label": "Aktive Streams anzeigen",
|
"label": "Aktive Streams anzeigen",
|
||||||
"description": ""
|
"description": "Zeige die Anzahl der aktuell aktiven Wiedergabesitzungen (Hörbücherregal)"
|
||||||
},
|
},
|
||||||
"compactMode": {
|
"compactMode": {
|
||||||
"label": "",
|
"label": "Kompakter Modus",
|
||||||
"description": ""
|
"description": "Verwenden Sie ein dichteres Layout mit kleineren Kacheln, ideal für kleine Widget-Größen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"artists": "",
|
"artists": "Künstler",
|
||||||
"albums": "",
|
"albums": "Alben",
|
||||||
"songs": "",
|
"songs": "Musik",
|
||||||
"libraryCount": "",
|
"libraryCount": "Bibliotheken",
|
||||||
"audiobooks": "",
|
"audiobooks": "Hörbücher",
|
||||||
"podcasts": "",
|
"podcasts": "Podcasts",
|
||||||
"listeningTime": "",
|
"listeningTime": "Hördauer",
|
||||||
"activeSessions": "",
|
"activeSessions": "Aktive Sitzungen",
|
||||||
"nowPlaying": "",
|
"nowPlaying": "Aktuelle Wiedergabe",
|
||||||
"nowPlayingCount": "",
|
"nowPlayingCount": "{count, plural, one {# stream} other {# streams}}",
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": "Fehler beim Abrufen der Audio-Statistikdaten"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"systemResources": {
|
"systemResources": {
|
||||||
@@ -3457,7 +3471,7 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"cpu": "CPU",
|
"cpu": "CPU",
|
||||||
"memory": "Speicher",
|
"memory": "Speicher",
|
||||||
"gpu": "",
|
"gpu": "GPU",
|
||||||
"network": "Netzwerk"
|
"network": "Netzwerk"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -3474,7 +3488,7 @@
|
|||||||
"card": {
|
"card": {
|
||||||
"cpu": "CPU",
|
"cpu": "CPU",
|
||||||
"memory": "Arbeitsspeicher",
|
"memory": "Arbeitsspeicher",
|
||||||
"gpu": "",
|
"gpu": "GPU",
|
||||||
"network": "Netzwerk",
|
"network": "Netzwerk",
|
||||||
"up": "OBEN",
|
"up": "OBEN",
|
||||||
"down": "UNTEN"
|
"down": "UNTEN"
|
||||||
@@ -3510,93 +3524,93 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"customApi": {
|
"customApi": {
|
||||||
"name": "",
|
"name": "Benutzerdefinierte API",
|
||||||
"description": "",
|
"description": "Zeigt Daten von jeder externen API mit benutzerdefinierter Konfiguration an.",
|
||||||
"option": {
|
"option": {
|
||||||
"definitionId": {
|
"definitionId": {
|
||||||
"label": ""
|
"label": "Definitions ID"
|
||||||
},
|
},
|
||||||
"refreshInterval": {
|
"refreshInterval": {
|
||||||
"label": "",
|
"label": "Aktualisierungsintervall",
|
||||||
"description": ""
|
"description": "Wie oft Daten von der API neu geladen werden sollen (in Sekunden)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"noDefinition": "",
|
"noDefinition": "Keine Definition ausgewählt",
|
||||||
"definitionNotFound": "",
|
"definitionNotFound": "Widget-Definition nicht gefunden. Möglicherweise wurde sie gelöscht.",
|
||||||
"noDisplayOutput": "",
|
"noDisplayOutput": "Keine Anzeige-Ausgabe",
|
||||||
"executeConfirm": "",
|
"executeConfirm": "Bist du dir sicher, dass du diese Aktion ausführen möchtest?",
|
||||||
"executing": "",
|
"executing": "Wird ausgeführt...",
|
||||||
"executeSuccess": "",
|
"executeSuccess": "Aktion erfolgreich ausgeführt",
|
||||||
"executeFailed": ""
|
"executeFailed": "Aktion fehlgeschlagen. Überprüfen Sie die Widget-Konfiguration."
|
||||||
},
|
},
|
||||||
"beszelSystemTable": {
|
"beszelSystemTable": {
|
||||||
"name": "",
|
"name": "Beszel Systeme (Tabelle)",
|
||||||
"description": "",
|
"description": "Tabellenansicht aller Beszel-überwachten Systeme mit sortierbaren Spalten und Statusindikatoren",
|
||||||
"option": {
|
"option": {
|
||||||
"statusFilter": {
|
"statusFilter": {
|
||||||
"label": ""
|
"label": "Status Filter"
|
||||||
},
|
},
|
||||||
"sortBy": {
|
"sortBy": {
|
||||||
"label": ""
|
"label": "Sortieren nach"
|
||||||
},
|
},
|
||||||
"sortDirection": {
|
"sortDirection": {
|
||||||
"label": ""
|
"label": "Sortierreihenfolge"
|
||||||
},
|
},
|
||||||
"showCpu": {
|
"showCpu": {
|
||||||
"label": ""
|
"label": "CPU anzeigen"
|
||||||
},
|
},
|
||||||
"showMemory": {
|
"showMemory": {
|
||||||
"label": ""
|
"label": "Arbeitsspeicher anzeigen"
|
||||||
},
|
},
|
||||||
"showDisk": {
|
"showDisk": {
|
||||||
"label": ""
|
"label": "Datenträger anzeigen"
|
||||||
},
|
},
|
||||||
"showGpu": {
|
"showGpu": {
|
||||||
"label": ""
|
"label": "GPU anzeigen"
|
||||||
},
|
},
|
||||||
"showLoadAvg": {
|
"showLoadAvg": {
|
||||||
"label": ""
|
"label": "Zeige Belastungsdurchschnitt"
|
||||||
},
|
},
|
||||||
"showNet": {
|
"showNet": {
|
||||||
"label": ""
|
"label": "Netzwerk anzeigen"
|
||||||
},
|
},
|
||||||
"showTemp": {
|
"showTemp": {
|
||||||
"label": ""
|
"label": "Temperatur anzeigen"
|
||||||
},
|
},
|
||||||
"showBattery": {
|
"showBattery": {
|
||||||
"label": ""
|
"label": "Akkustand anzeigen"
|
||||||
},
|
},
|
||||||
"showServices": {
|
"showServices": {
|
||||||
"label": ""
|
"label": "Dienste anzeigen"
|
||||||
},
|
},
|
||||||
"showUptime": {
|
"showUptime": {
|
||||||
"label": ""
|
"label": "Laufzeit anzeigen"
|
||||||
},
|
},
|
||||||
"showAgent": {
|
"showAgent": {
|
||||||
"label": ""
|
"label": "Agent-Version anzeigen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"noRecords": "",
|
"noRecords": "Keine Systeme gefunden",
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": "Keine Verbindung zu Beszel. Überprüfen Sie Ihre Integrationseinstellungen."
|
||||||
},
|
},
|
||||||
"column": {
|
"column": {
|
||||||
"system": "",
|
"system": "System",
|
||||||
"cpu": "",
|
"cpu": "CPU",
|
||||||
"memory": "",
|
"memory": "Arbeitsspeicher",
|
||||||
"disk": "",
|
"disk": "Datenträger",
|
||||||
"gpu": "",
|
"gpu": "GPU",
|
||||||
"loadAvg": "",
|
"loadAvg": "Systemlast",
|
||||||
"net": "",
|
"net": "Netz",
|
||||||
"temp": "",
|
"temp": "Temperatur",
|
||||||
"battery": "",
|
"battery": "Batterie",
|
||||||
"services": "",
|
"services": "Dienste",
|
||||||
"uptime": "",
|
"uptime": "Betriebszeit",
|
||||||
"agent": ""
|
"agent": "Agent"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"beszelSystemGrid": {
|
"beszelSystemGrid": {
|
||||||
"name": "",
|
"name": "Beszel Systems (Grid)",
|
||||||
"description": "",
|
"description": "",
|
||||||
"option": {
|
"option": {
|
||||||
"statusFilter": {
|
"statusFilter": {
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "CPU",
|
"cpu": "CPU",
|
||||||
"memory": "Arbeitsspeicher",
|
"memory": "Arbeitsspeicher",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "System auswählen",
|
"selectSystem": "System auswählen",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "Nicht gefunden",
|
"title": "Nicht gefunden",
|
||||||
"text": "Konnte die angeforderte Ressource nicht finden"
|
"text": "Konnte die angeforderte Ressource nicht finden"
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Startseite",
|
"home": "Startseite",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "Fehler beim Abrufen der Docker Container"
|
"internalServerError": "Fehler beim Abrufen der Docker Container",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "εδώ",
|
"here": "εδώ",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"header": ""
|
"header": "",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "Εναλλαγή σε σκοτεινή λειτουργία",
|
"switchToDarkMode": "Εναλλαγή σε σκοτεινή λειτουργία",
|
||||||
"switchToLightMode": "Εναλλαγή σε φωτεινή λειτουργία",
|
"switchToLightMode": "Εναλλαγή σε φωτεινή λειτουργία",
|
||||||
"management": "Διαχείριση",
|
"management": "Διαχείριση",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Οι ρυθμίσεις σας",
|
"preferences": "Οι ρυθμίσεις σας",
|
||||||
"logout": "Αποσύνδεση",
|
"logout": "Αποσύνδεση",
|
||||||
"login": "Σύνδεση",
|
"login": "Σύνδεση",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "Στατιστικά Docker",
|
"name": "Στατιστικά Docker",
|
||||||
"description": "",
|
"description": "",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": ""
|
"title": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"text": ""
|
"text": ""
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Αρχική",
|
"home": "Αρχική",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": "",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "here",
|
"here": "here",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "Icon URL",
|
"label": "Icon URL",
|
||||||
"header": "Please enter a name or object to filter for the icon. Homarr will search throughout {countIcons} different icons to find the right one."
|
"header": "Please enter a name or object to filter for the icon. Homarr will search throughout {countIcons} different icons to find the right one.",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "Switch to dark mode",
|
"switchToDarkMode": "Switch to dark mode",
|
||||||
"switchToLightMode": "Switch to light mode",
|
"switchToLightMode": "Switch to light mode",
|
||||||
"management": "Management",
|
"management": "Management",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Your preferences",
|
"preferences": "Your preferences",
|
||||||
"logout": "Log-out",
|
"logout": "Log-out",
|
||||||
"login": "Log-in",
|
"login": "Log-in",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "Docker stats",
|
"name": "Docker stats",
|
||||||
"description": "Stats of your containers (This widget can only be added with administrator privileges)",
|
"description": "Stats of your containers (This widget can only be added with administrator privileges)",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": "Enable items sorting"
|
"label": "Enable items sorting"
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": "Instances"
|
"title": "Instances"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"text": ""
|
"text": ""
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "",
|
"home": "",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": "",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1598,7 +1598,9 @@
|
|||||||
},
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
"label": {
|
"label": {
|
||||||
"settings": "Settings"
|
"settings": "Settings",
|
||||||
|
"options": "Options",
|
||||||
|
"actions": "Actions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -2357,6 +2359,9 @@
|
|||||||
"name": "Docker stats",
|
"name": "Docker stats",
|
||||||
"description": "Stats of your containers (This widget can only be added with administrator privileges)",
|
"description": "Stats of your containers (This widget can only be added with administrator privileges)",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": "Columns to show"
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": "Enable items sorting"
|
"label": "Enable items sorting"
|
||||||
},
|
},
|
||||||
@@ -4308,7 +4313,7 @@
|
|||||||
"notStarted": "Not started"
|
"notStarted": "Not started"
|
||||||
},
|
},
|
||||||
"name": {
|
"name": {
|
||||||
"management": "Management",
|
"management": "Management",
|
||||||
"dashboard": "Dashboard"
|
"dashboard": "Dashboard"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5096,7 +5101,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "Failed to fetch Docker containers"
|
"internalServerError": "Failed to fetch Docker containers",
|
||||||
|
"noColumns": "Select at least one column in the widget settings"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "aquí",
|
"here": "aquí",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "URL del icono",
|
"label": "URL del icono",
|
||||||
"header": "Escribe nombre u objetos para filtrar iconos... Homarr buscará a través de iconos {countIcons} por ti."
|
"header": "Escribe nombre u objetos para filtrar iconos... Homarr buscará a través de iconos {countIcons} por ti.",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "Cambiar a modo oscuro",
|
"switchToDarkMode": "Cambiar a modo oscuro",
|
||||||
"switchToLightMode": "Cambiar a modo claro",
|
"switchToLightMode": "Cambiar a modo claro",
|
||||||
"management": "Administración",
|
"management": "Administración",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Tus preferencias",
|
"preferences": "Tus preferencias",
|
||||||
"logout": "Cerrar sesión",
|
"logout": "Cerrar sesión",
|
||||||
"login": "Iniciar sesión",
|
"login": "Iniciar sesión",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "Estadísticas de Docker",
|
"name": "Estadísticas de Docker",
|
||||||
"description": "Estadísticas de tus contenedores (Este widget sólo puede ser añadido con privilegios de administrador)",
|
"description": "Estadísticas de tus contenedores (Este widget sólo puede ser añadido con privilegios de administrador)",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": "Habilitar ordenar elementos"
|
"label": "Habilitar ordenar elementos"
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": "Instancias"
|
"title": "Instancias"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "No Encontrado",
|
"title": "No Encontrado",
|
||||||
"text": "No se pudo encontrar el recurso solicitado"
|
"text": "No se pudo encontrar el recurso solicitado"
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Inicio",
|
"home": "Inicio",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "Fallo al obtener los contenedores de Docker"
|
"internalServerError": "Fallo al obtener los contenedores de Docker",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "",
|
"here": "",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"header": ""
|
"header": "",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "",
|
"switchToDarkMode": "",
|
||||||
"switchToLightMode": "",
|
"switchToLightMode": "",
|
||||||
"management": "",
|
"management": "",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Teie eelistused",
|
"preferences": "Teie eelistused",
|
||||||
"logout": "",
|
"logout": "",
|
||||||
"login": "",
|
"login": "",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": ""
|
"title": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"text": ""
|
"text": ""
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "",
|
"home": "",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": "",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "Valvonta",
|
"mediaMonitoring": "Valvonta",
|
||||||
"speedtest": "Nopeustestaus",
|
"speedtest": "Nopeustestaus",
|
||||||
"analytics": "Analytiikka",
|
"analytics": "Analytiikka",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1044,7 +1045,7 @@
|
|||||||
"description": "Vastausta ei voitu jäsentää. Tarkista, että URL-osoite osoittaa palvelun perusosoitteeseen."
|
"description": "Vastausta ei voitu jäsentää. Tarkista, että URL-osoite osoittaa palvelun perusosoitteeseen."
|
||||||
},
|
},
|
||||||
"authorization": {
|
"authorization": {
|
||||||
"title": "Tuonnistautumisvirhe",
|
"title": "Tunnistautumisvirhe",
|
||||||
"description": "Pyyntöä ei hyväksytty. Varmista, että kirjautumistiedot ovat oikein ja että niille on määritetty riittävät käyttöoikeudet."
|
"description": "Pyyntöä ei hyväksytty. Varmista, että kirjautumistiedot ovat oikein ja että niille on määritetty riittävät käyttöoikeudet."
|
||||||
},
|
},
|
||||||
"statusCode": {
|
"statusCode": {
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "",
|
"here": "",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "Kuvakkeen URL-osoite",
|
"label": "Kuvakkeen URL-osoite",
|
||||||
"header": "Suodata kuvakkeita syöttämällä nimi tai objekti... Homarr etsii {countIcons} kuvakkeesta."
|
"header": "Suodata kuvakkeita syöttämällä nimi tai objekti... Homarr etsii {countIcons} kuvakkeesta.",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "",
|
"switchToDarkMode": "",
|
||||||
"switchToLightMode": "",
|
"switchToLightMode": "",
|
||||||
"management": "Hallinta",
|
"management": "Hallinta",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Asetuksesi",
|
"preferences": "Asetuksesi",
|
||||||
"logout": "Kirjaudu ulos",
|
"logout": "Kirjaudu ulos",
|
||||||
"login": "",
|
"login": "",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "Docker-tilastot",
|
"name": "Docker-tilastot",
|
||||||
"description": "Konttiesi tilastot (tämä widget voidaan lisätä vain ylläpito-oikeuksilla)",
|
"description": "Konttiesi tilastot (tämä widget voidaan lisätä vain ylläpito-oikeuksilla)",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": "Salli kohteiden järjestys"
|
"label": "Salli kohteiden järjestys"
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": ""
|
"title": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"text": ""
|
"text": ""
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Aloitus",
|
"home": "Aloitus",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": "Umamin aktiiviset käyttäjät"
|
"label": "Umamin aktiiviset käyttäjät"
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": "",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "ici",
|
"here": "ici",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "URL de l'icône :",
|
"label": "URL de l'icône :",
|
||||||
"header": "Tapez le nom ou les objets pour filtrer les icônes... Homarr recherchera les icônes {countIcons} pour vous."
|
"header": "Tapez le nom ou les objets pour filtrer les icônes... Homarr recherchera les icônes {countIcons} pour vous.",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "Activer le mode sombre",
|
"switchToDarkMode": "Activer le mode sombre",
|
||||||
"switchToLightMode": "Activer le mode clair",
|
"switchToLightMode": "Activer le mode clair",
|
||||||
"management": "Administration",
|
"management": "Administration",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Vos préférences",
|
"preferences": "Vos préférences",
|
||||||
"logout": "Se déconnecter",
|
"logout": "Se déconnecter",
|
||||||
"login": "Connexion",
|
"login": "Connexion",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "Statistiques de Docker",
|
"name": "Statistiques de Docker",
|
||||||
"description": "Statistiques de vos conteneurs (Ce widget ne peut être ajouté qu'avec les privilèges d'administrateur)",
|
"description": "Statistiques de vos conteneurs (Ce widget ne peut être ajouté qu'avec les privilèges d'administrateur)",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": "Activer le tri des éléments"
|
"label": "Activer le tri des éléments"
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": "Instances"
|
"title": "Instances"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "Non trouvé",
|
"title": "Non trouvé",
|
||||||
"text": "Impossible de trouver la ressource demandée"
|
"text": "Impossible de trouver la ressource demandée"
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Accueil",
|
"home": "Accueil",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "Impossible de récupérer les conteneurs Docker"
|
"internalServerError": "Impossible de récupérer les conteneurs Docker",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "כאן",
|
"here": "כאן",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "קישור של הסמל",
|
"label": "קישור של הסמל",
|
||||||
"header": "הקלד שם או אובייקטים לסינון עבור אייקונים... Homarr יחפש עבורך סמלים של {countIcons} ."
|
"header": "הקלד שם או אובייקטים לסינון עבור אייקונים... Homarr יחפש עבורך סמלים של {countIcons} .",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "עבור למצב כהה",
|
"switchToDarkMode": "עבור למצב כהה",
|
||||||
"switchToLightMode": "עבור למצב בהיר",
|
"switchToLightMode": "עבור למצב בהיר",
|
||||||
"management": "ניהול",
|
"management": "ניהול",
|
||||||
|
"docker": "",
|
||||||
"preferences": "העדפות שלך",
|
"preferences": "העדפות שלך",
|
||||||
"logout": "התנתק/י",
|
"logout": "התנתק/י",
|
||||||
"login": "התחבר/י",
|
"login": "התחבר/י",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "סטטיסטיקות דוקר",
|
"name": "סטטיסטיקות דוקר",
|
||||||
"description": "סטטיסטיקות של המכולות שלך (ניתן להוסיף ווידג'ט זה רק עם הרשאות מנהל)",
|
"description": "סטטיסטיקות של המכולות שלך (ניתן להוסיף ווידג'ט זה רק עם הרשאות מנהל)",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": "אפשר מיון פריטים"
|
"label": "אפשר מיון פריטים"
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": ""
|
"title": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "לא נמצא",
|
"title": "לא נמצא",
|
||||||
"text": "לא ניתן לאתר את המשאב המבוקש"
|
"text": "לא ניתן לאתר את המשאב המבוקש"
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "מסך הבית",
|
"home": "מסך הבית",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "נכשל בקבלת קונטיינרי דוקר"
|
"internalServerError": "נכשל בקבלת קונטיינרי דוקר",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "",
|
"here": "",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"header": ""
|
"header": "",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "",
|
"switchToDarkMode": "",
|
||||||
"switchToLightMode": "",
|
"switchToLightMode": "",
|
||||||
"management": "",
|
"management": "",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Vaše preferencije",
|
"preferences": "Vaše preferencije",
|
||||||
"logout": "",
|
"logout": "",
|
||||||
"login": "Prijaviti se",
|
"login": "Prijaviti se",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": ""
|
"title": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"text": ""
|
"text": ""
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Dom",
|
"home": "Dom",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": "",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "itt",
|
"here": "itt",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "Ikonhivatkozás",
|
"label": "Ikonhivatkozás",
|
||||||
"header": "Írjon be nevet vagy objektumokat az ikonok szűréséhez... A Homarr a {countIcons} ikonok között keres."
|
"header": "Írjon be nevet vagy objektumokat az ikonok szűréséhez... A Homarr a {countIcons} ikonok között keres.",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "Váltás sötét módba",
|
"switchToDarkMode": "Váltás sötét módba",
|
||||||
"switchToLightMode": "Váltás világos módra",
|
"switchToLightMode": "Váltás világos módra",
|
||||||
"management": "Kezelés",
|
"management": "Kezelés",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Saját preferenciák",
|
"preferences": "Saját preferenciák",
|
||||||
"logout": "Kijelentkezés",
|
"logout": "Kijelentkezés",
|
||||||
"login": "Bejelentkezés",
|
"login": "Bejelentkezés",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "Docker statisztika",
|
"name": "Docker statisztika",
|
||||||
"description": "A konténereid statisztikái (Ezt a widgetet csak rendszergazdai jogosultsággal lehet hozzáadni)",
|
"description": "A konténereid statisztikái (Ezt a widgetet csak rendszergazdai jogosultsággal lehet hozzáadni)",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": "Az elemek rendezésének engedélyezése"
|
"label": "Az elemek rendezésének engedélyezése"
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": "Példányok"
|
"title": "Példányok"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"text": ""
|
"text": ""
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Nyitólap",
|
"home": "Nyitólap",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": "",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "Monitoraggio",
|
"mediaMonitoring": "Monitoraggio",
|
||||||
"speedtest": "Speed test",
|
"speedtest": "Speed test",
|
||||||
"analytics": "Analytics",
|
"analytics": "Analytics",
|
||||||
|
"vpn": "VPN",
|
||||||
"mediaLibrary": "Media Library",
|
"mediaLibrary": "Media Library",
|
||||||
"uptimeMonitoring": "Uptime Monitoring"
|
"uptimeMonitoring": "Uptime Monitoring"
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "qui",
|
"here": "qui",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "Icona URL",
|
"label": "Icona URL",
|
||||||
"header": "Digita il nome o gli oggetti da filtrare per le icone... Homarr cercherà tra le icone {countIcons} per te."
|
"header": "Digita il nome o gli oggetti da filtrare per le icone... Homarr cercherà tra le icone {countIcons} per te.",
|
||||||
|
"headerLoading": "Digita per cercare icone…",
|
||||||
|
"noResults": "Nessuna icona corrisponde a \"{search}\".",
|
||||||
|
"error": "Impossibile caricare le icone."
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "Passa alla modalità scura",
|
"switchToDarkMode": "Passa alla modalità scura",
|
||||||
"switchToLightMode": "Passa al tema chiaro",
|
"switchToLightMode": "Passa al tema chiaro",
|
||||||
"management": "Gestione",
|
"management": "Gestione",
|
||||||
|
"docker": "Docker",
|
||||||
"preferences": "Le tue impostazioni",
|
"preferences": "Le tue impostazioni",
|
||||||
"logout": "Disconnettiti",
|
"logout": "Disconnettiti",
|
||||||
"login": "Accedi",
|
"login": "Accedi",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "Statistiche del docker",
|
"name": "Statistiche del docker",
|
||||||
"description": "Statistiche dei tuoi contenitori (questo widget può essere aggiunto solo con privilegi di amministratore)",
|
"description": "Statistiche dei tuoi contenitori (questo widget può essere aggiunto solo con privilegi di amministratore)",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": "Colonne da mostrare"
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": "Abilita l'ordinamento degli elementi"
|
"label": "Abilita l'ordinamento degli elementi"
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": "Istanze"
|
"title": "Istanze"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "VPN",
|
||||||
|
"description": "Panoramica delle tue connessioni VPN",
|
||||||
|
"serviceUnavailable": "VPN non disponibile",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "UPS",
|
"name": "UPS",
|
||||||
"description": "Monitora lo stato dei tuoi dispositivi UPS tramite un server NUT",
|
"description": "Monitora lo stato dei tuoi dispositivi UPS tramite un server NUT",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "Impossibile connettersi a Beszel. Controlla le tue impostazioni di integrazione."
|
"internalServerError": "Impossibile connettersi a Beszel. Controlla le tue impostazioni di integrazione."
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": "Nessun sistema trovato"
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "CPU",
|
"cpu": "CPU",
|
||||||
"memory": "Memoria",
|
"memory": "Memoria",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "Seleziona sistema",
|
"selectSystem": "Seleziona sistema",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": "Nessun sistema trovato"
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "Impossibile connettersi a Beszel. Controlla le tue impostazioni di integrazione.",
|
"internalServerError": "Impossibile connettersi a Beszel. Controlla le tue impostazioni di integrazione.",
|
||||||
"liveConnectionFailed": "Connessione Live non riuscita. L'istanza di Beszel potrebbe non supportare lo streaming in tempo reale.",
|
"liveConnectionFailed": "Connessione Live non riuscita. L'istanza di Beszel potrebbe non supportare lo streaming in tempo reale.",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "Non trovato",
|
"title": "Non trovato",
|
||||||
"text": "Impossibile trovare la risorsa richiesta"
|
"text": "Impossibile trovare la risorsa richiesta"
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "Questa pagina non può essere caricata",
|
||||||
|
"text": "Si è verificato un errore inatteso durante il caricamento di questa pagina. La navigazione è ancora disponibile: prova a ricaricare o usa un'altra sezione dalla barra laterale.",
|
||||||
|
"digest": "Riferimento errore: {digest}"
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Home",
|
"home": "Home",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": "Visitatori Attivi Umami"
|
"label": "Visitatori Attivi Umami"
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": "Stato VPN"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "Recupero dei container Docker non riuscito"
|
"internalServerError": "Recupero dei container Docker non riuscito",
|
||||||
|
"noColumns": "Seleziona almeno una colonna nelle impostazioni dei widget"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "こちら",
|
"here": "こちら",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "アイコン URL",
|
"label": "アイコン URL",
|
||||||
"header": "アイコンをフィルタするために、名前またはオブジェクトを入力してください... Homarrは {countIcons} アイコンを検索します。"
|
"header": "アイコンをフィルタするために、名前またはオブジェクトを入力してください... Homarrは {countIcons} アイコンを検索します。",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "ダークモードに切り替え",
|
"switchToDarkMode": "ダークモードに切り替え",
|
||||||
"switchToLightMode": "ライトモードに切り替え",
|
"switchToLightMode": "ライトモードに切り替え",
|
||||||
"management": "管理",
|
"management": "管理",
|
||||||
|
"docker": "",
|
||||||
"preferences": "個人設定",
|
"preferences": "個人設定",
|
||||||
"logout": "ログアウト",
|
"logout": "ログアウト",
|
||||||
"login": "ログイン",
|
"login": "ログイン",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "Dockerのステータス",
|
"name": "Dockerのステータス",
|
||||||
"description": "あなたのコンテナの統計(このウィジェットは管理者権限でのみ追加できます)",
|
"description": "あなたのコンテナの統計(このウィジェットは管理者権限でのみ追加できます)",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": "アイテムの並び替えを有効にする"
|
"label": "アイテムの並び替えを有効にする"
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": "インスタンス"
|
"title": "インスタンス"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "見つかりません",
|
"title": "見つかりません",
|
||||||
"text": "要求されたリソースが見つかりませんでした"
|
"text": "要求されたリソースが見つかりませんでした"
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "ホーム",
|
"home": "ホーム",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "Docker コンテナの取得に失敗しました"
|
"internalServerError": "Docker コンテナの取得に失敗しました",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -288,10 +288,10 @@
|
|||||||
"changePingIconsEnabled": {
|
"changePingIconsEnabled": {
|
||||||
"notification": {
|
"notification": {
|
||||||
"success": {
|
"success": {
|
||||||
"message": ""
|
"message": "Ping 아이콘 전환 완료"
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"message": ""
|
"message": "Ping 아이콘을 전환할 수 없습니다"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -701,56 +701,56 @@
|
|||||||
},
|
},
|
||||||
"action": {
|
"action": {
|
||||||
"create": "생성",
|
"create": "생성",
|
||||||
"import": "",
|
"import": "가져오기",
|
||||||
"save": "",
|
"save": "저장",
|
||||||
"delete": "",
|
"delete": "사용자 지정 위젯 삭제",
|
||||||
"deleteConfirm": "",
|
"deleteConfirm": "\"{name}\"을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
|
||||||
"export": "",
|
"export": "내보내기",
|
||||||
"addMapping": "",
|
"addMapping": "매핑 추가",
|
||||||
"addColumn": "",
|
"addColumn": "열 추가",
|
||||||
"edit": "",
|
"edit": "편집",
|
||||||
"removeMapping": "",
|
"removeMapping": "매핑 제거",
|
||||||
"removeColumn": "",
|
"removeColumn": "열 제거",
|
||||||
"addItem": "",
|
"addItem": "항목 추가",
|
||||||
"removeItem": "",
|
"removeItem": "항목 제거",
|
||||||
"addBar": "",
|
"addBar": "바 추가",
|
||||||
"duplicate": "",
|
"duplicate": "복사",
|
||||||
"copyAiPrompt": "",
|
"copyAiPrompt": "AI 프롬프트 복사",
|
||||||
"enable": "",
|
"enable": "활성화",
|
||||||
"disable": "",
|
"disable": "비활성화",
|
||||||
"menu": ""
|
"menu": "동작"
|
||||||
},
|
},
|
||||||
"field": {
|
"field": {
|
||||||
"name": "",
|
"name": "이름",
|
||||||
"description": "",
|
"description": "설명",
|
||||||
"iconUrl": "",
|
"iconUrl": "아이콘 URL",
|
||||||
"url": "",
|
"url": "URL",
|
||||||
"authType": "",
|
"authType": "인증 유형",
|
||||||
"headerName": "",
|
"headerName": "헤더/쿼리 파라미터 이름",
|
||||||
"method": "",
|
"method": "메서드",
|
||||||
"requestBody": "",
|
"requestBody": "요청 본문",
|
||||||
"displayType": "",
|
"displayType": "표시 유형",
|
||||||
"jsonPath": "",
|
"jsonPath": "JSON 경로",
|
||||||
"jsonPathHint": "",
|
"jsonPathHint": "JSONPath 문법으로 값을 추출하십시오. 예: $.data.temperature 또는 $.items[0].name",
|
||||||
"label": "",
|
"label": "레이블",
|
||||||
"unit": "",
|
"unit": "단위",
|
||||||
"mappings": "",
|
"mappings": "매핑",
|
||||||
"tablePath": "",
|
"tablePath": "JSON 경로 배열",
|
||||||
"tablePathHint": "",
|
"tablePathHint": "응답에서 배열이 위치한 경로입니다. 예: $.data.items",
|
||||||
"columns": "",
|
"columns": "열",
|
||||||
"header": "",
|
"header": "헤더",
|
||||||
"items": "",
|
"items": "항목",
|
||||||
"gridColumns": "",
|
"gridColumns": "그리드 열 개수",
|
||||||
"cardStyle": "",
|
"cardStyle": "카드 스타일",
|
||||||
"bars": "",
|
"bars": "바",
|
||||||
"valuePath": "",
|
"valuePath": "JSON 경로 값",
|
||||||
"maxPath": "",
|
"maxPath": "JSON 경로 최댓값",
|
||||||
"showPercentage": "",
|
"showPercentage": "백분율 표시",
|
||||||
"barSize": "",
|
"barSize": "바 크기",
|
||||||
"goodValues": "",
|
"goodValues": "정상 값(쉼표로 구분)",
|
||||||
"dotSize": "",
|
"dotSize": "점 크기",
|
||||||
"valueSize": "",
|
"valueSize": "값 크기",
|
||||||
"labelPosition": "",
|
"labelPosition": "레이블 위치",
|
||||||
"kvLayout": "레이아웃",
|
"kvLayout": "레이아웃",
|
||||||
"striped": "",
|
"striped": "",
|
||||||
"compact": "컴팩트 모드",
|
"compact": "컴팩트 모드",
|
||||||
@@ -849,14 +849,14 @@
|
|||||||
"secret": {
|
"secret": {
|
||||||
"apiKey": "",
|
"apiKey": "",
|
||||||
"username": "",
|
"username": "",
|
||||||
"password": "",
|
"password": "비밀번호",
|
||||||
"savedPlaceholder": ""
|
"savedPlaceholder": "••••••• (저장됨, 유지하려면 공백)"
|
||||||
},
|
},
|
||||||
"preview": {
|
"preview": {
|
||||||
"title": "",
|
"title": "미리보기",
|
||||||
"test": "",
|
"test": "테스트",
|
||||||
"hint": "",
|
"hint": "현재 설정으로 API 응답을 미리 보려면 테스트를 클릭하십시오.",
|
||||||
"rawResponse": ""
|
"rawResponse": "원본 JSON 응답"
|
||||||
},
|
},
|
||||||
"notification": {
|
"notification": {
|
||||||
"created": "\"{name}\" 위젯 생성 완료.",
|
"created": "\"{name}\" 위젯 생성 완료.",
|
||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "모니터링",
|
"mediaMonitoring": "모니터링",
|
||||||
"speedtest": "속도 테스트",
|
"speedtest": "속도 테스트",
|
||||||
"analytics": "분석",
|
"analytics": "분석",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "미디어 라이브러리",
|
"mediaLibrary": "미디어 라이브러리",
|
||||||
"uptimeMonitoring": "업타임 모니터링"
|
"uptimeMonitoring": "업타임 모니터링"
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "여기",
|
"here": "여기",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "아이콘 URL",
|
"label": "아이콘 URL",
|
||||||
"header": "이름 또는 주제를 입력해 아이콘을 필터링하세요... Homarr가 {countIcons}에서 아이콘을 검색합니다."
|
"header": "이름 또는 주제를 입력해 아이콘을 필터링하세요... Homarr가 {countIcons}에서 아이콘을 검색합니다.",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "다크 모드로 전환",
|
"switchToDarkMode": "다크 모드로 전환",
|
||||||
"switchToLightMode": "라이트 모드로 전환",
|
"switchToLightMode": "라이트 모드로 전환",
|
||||||
"management": "관리",
|
"management": "관리",
|
||||||
|
"docker": "",
|
||||||
"preferences": "기본 설정",
|
"preferences": "기본 설정",
|
||||||
"logout": "로그아웃",
|
"logout": "로그아웃",
|
||||||
"login": "로그인",
|
"login": "로그인",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": ""
|
"title": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "찾을 수 없음",
|
"title": "찾을 수 없음",
|
||||||
"text": "요청한 리소스를 찾을 수 없습니다"
|
"text": "요청한 리소스를 찾을 수 없습니다"
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "홈",
|
"home": "홈",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": "",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "",
|
"here": "",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"header": ""
|
"header": "",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "",
|
"switchToDarkMode": "",
|
||||||
"switchToLightMode": "",
|
"switchToLightMode": "",
|
||||||
"management": "",
|
"management": "",
|
||||||
|
"docker": "",
|
||||||
"preferences": "",
|
"preferences": "",
|
||||||
"logout": "",
|
"logout": "",
|
||||||
"login": "Prisijungti",
|
"login": "Prisijungti",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": ""
|
"title": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"text": ""
|
"text": ""
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Pagrindinis",
|
"home": "Pagrindinis",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": "",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "",
|
"here": "",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"header": ""
|
"header": "",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "",
|
"switchToDarkMode": "",
|
||||||
"switchToLightMode": "",
|
"switchToLightMode": "",
|
||||||
"management": "",
|
"management": "",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Jūsu iestatījumi",
|
"preferences": "Jūsu iestatījumi",
|
||||||
"logout": "",
|
"logout": "",
|
||||||
"login": "Pieslēgties",
|
"login": "Pieslēgties",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": ""
|
"title": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"text": ""
|
"text": ""
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Sākums",
|
"home": "Sākums",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": "",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "hier",
|
"here": "hier",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "Icoon-URL",
|
"label": "Icoon-URL",
|
||||||
"header": "Typ naam of objecten om te filteren op iconen… Homarr doorzoekt {countIcons} iconen voor je."
|
"header": "Typ naam of objecten om te filteren op iconen… Homarr doorzoekt {countIcons} iconen voor je.",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "Schakel naar donkere modus",
|
"switchToDarkMode": "Schakel naar donkere modus",
|
||||||
"switchToLightMode": "Schakel naar lichte modus",
|
"switchToLightMode": "Schakel naar lichte modus",
|
||||||
"management": "Beheer",
|
"management": "Beheer",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Jouw voorkeuren",
|
"preferences": "Jouw voorkeuren",
|
||||||
"logout": "Uitloggen",
|
"logout": "Uitloggen",
|
||||||
"login": "Inloggen",
|
"login": "Inloggen",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "Docker statistieken",
|
"name": "Docker statistieken",
|
||||||
"description": "",
|
"description": "",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": ""
|
"title": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "Niet gevonden",
|
"title": "Niet gevonden",
|
||||||
"text": "Kon de aangevraagde bron niet vinden"
|
"text": "Kon de aangevraagde bron niet vinden"
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Home",
|
"home": "Home",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "Docker-containers zijn niet opgehaald"
|
"internalServerError": "Docker-containers zijn niet opgehaald",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "her",
|
"here": "her",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "Ikon-URL",
|
"label": "Ikon-URL",
|
||||||
"header": "Skriv navn eller objekt å filtrere for ikoner... Homarr vil søke gjennom {countIcons} ikoner for deg."
|
"header": "Skriv navn eller objekt å filtrere for ikoner... Homarr vil søke gjennom {countIcons} ikoner for deg.",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "Bytt til mørk modus",
|
"switchToDarkMode": "Bytt til mørk modus",
|
||||||
"switchToLightMode": "Bytt til lys modus",
|
"switchToLightMode": "Bytt til lys modus",
|
||||||
"management": "Administrasjon",
|
"management": "Administrasjon",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Dine innstillinger",
|
"preferences": "Dine innstillinger",
|
||||||
"logout": "Logg ut",
|
"logout": "Logg ut",
|
||||||
"login": "Logg Inn",
|
"login": "Logg Inn",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "Docker status",
|
"name": "Docker status",
|
||||||
"description": "Statistikk over containerne dine (denne widgeten kan bare legges til med administratorrettigheter)",
|
"description": "Statistikk over containerne dine (denne widgeten kan bare legges til med administratorrettigheter)",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": "Aktiver sortering av elementer"
|
"label": "Aktiver sortering av elementer"
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": "Instanser"
|
"title": "Instanser"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "Ikke funnet",
|
"title": "Ikke funnet",
|
||||||
"text": "Fant ikke den forespurte ressursen"
|
"text": "Fant ikke den forespurte ressursen"
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Hjem",
|
"home": "Hjem",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": "Umami Aktive Besøkende"
|
"label": "Umami Aktive Besøkende"
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "Klarte ikke hente Docker-containere"
|
"internalServerError": "Klarte ikke hente Docker-containere",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
File diff suppressed because it is too large.
Load diff
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "Monitoramento",
|
"mediaMonitoring": "Monitoramento",
|
||||||
"speedtest": "Teste de Velocidade",
|
"speedtest": "Teste de Velocidade",
|
||||||
"analytics": "Análises",
|
"analytics": "Análises",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "Biblioteca de mídia",
|
"mediaLibrary": "Biblioteca de mídia",
|
||||||
"uptimeMonitoring": "Monitoramento do Uptime"
|
"uptimeMonitoring": "Monitoramento do Uptime"
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "aqui",
|
"here": "aqui",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "URL do ícone",
|
"label": "URL do ícone",
|
||||||
"header": "Digite o nome ou os objetos para filtrar os ícones... O Homarr pesquisará {countIcons} ícones para você."
|
"header": "Digite o nome ou os objetos para filtrar os ícones... O Homarr pesquisará {countIcons} ícones para você.",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "Alternar para o modo escuro",
|
"switchToDarkMode": "Alternar para o modo escuro",
|
||||||
"switchToLightMode": "Alternar para o modo claro",
|
"switchToLightMode": "Alternar para o modo claro",
|
||||||
"management": "Gerenciamento",
|
"management": "Gerenciamento",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Suas preferências",
|
"preferences": "Suas preferências",
|
||||||
"logout": "Sair",
|
"logout": "Sair",
|
||||||
"login": "“Login”",
|
"login": "“Login”",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "Estatísticas do Docker",
|
"name": "Estatísticas do Docker",
|
||||||
"description": "Estatísticas dos seus contêineres (Esse widget só pode ser adicionado com privilégios de administrador)",
|
"description": "Estatísticas dos seus contêineres (Esse widget só pode ser adicionado com privilégios de administrador)",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": "Ativar ordenação de itens"
|
"label": "Ativar ordenação de itens"
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": "Instâncias"
|
"title": "Instâncias"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "UPS",
|
"name": "UPS",
|
||||||
"description": "Monitore o status de seus dispositivos UPS através de um servidor NUT",
|
"description": "Monitore o status de seus dispositivos UPS através de um servidor NUT",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "Não encontrado",
|
"title": "Não encontrado",
|
||||||
"text": "Não foi possível encontrar o recurso solicitado"
|
"text": "Não foi possível encontrar o recurso solicitado"
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Início",
|
"home": "Início",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": "Visitantes Ativos do Umami"
|
"label": "Visitantes Ativos do Umami"
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "Falha ao buscar contêineres Docker"
|
"internalServerError": "Falha ao buscar contêineres Docker",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "",
|
"here": "",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"header": ""
|
"header": "",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "",
|
"switchToDarkMode": "",
|
||||||
"switchToLightMode": "",
|
"switchToLightMode": "",
|
||||||
"management": "",
|
"management": "",
|
||||||
|
"docker": "",
|
||||||
"preferences": "",
|
"preferences": "",
|
||||||
"logout": "",
|
"logout": "",
|
||||||
"login": "",
|
"login": "",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": ""
|
"title": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"text": ""
|
"text": ""
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "",
|
"home": "",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": "",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "",
|
"here": "",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"header": ""
|
"header": "",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "",
|
"switchToDarkMode": "",
|
||||||
"switchToLightMode": "",
|
"switchToLightMode": "",
|
||||||
"management": "",
|
"management": "",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Preferințele dvs.",
|
"preferences": "Preferințele dvs.",
|
||||||
"logout": "",
|
"logout": "",
|
||||||
"login": "Utilizator",
|
"login": "Utilizator",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": ""
|
"title": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"text": ""
|
"text": ""
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Acasă",
|
"home": "Acasă",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": "",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "здесь",
|
"here": "здесь",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "URL иконки",
|
"label": "URL иконки",
|
||||||
"header": "Введите название или объекты для фильтрации иконок... Homarr найдёт для вас среди {countIcons} иконок."
|
"header": "Введите название или объекты для фильтрации иконок... Homarr найдёт для вас среди {countIcons} иконок.",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "Переключить на тёмную тему",
|
"switchToDarkMode": "Переключить на тёмную тему",
|
||||||
"switchToLightMode": "Переключить на светлую тему",
|
"switchToLightMode": "Переключить на светлую тему",
|
||||||
"management": "Управление",
|
"management": "Управление",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Настройки",
|
"preferences": "Настройки",
|
||||||
"logout": "Выйти",
|
"logout": "Выйти",
|
||||||
"login": "Вход",
|
"login": "Вход",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "Статистика Docker",
|
"name": "Статистика Docker",
|
||||||
"description": "Статистика контейнеров (этот виджет можно добавить только с правами администратора)",
|
"description": "Статистика контейнеров (этот виджет можно добавить только с правами администратора)",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": "Включить сортировку элементов"
|
"label": "Включить сортировку элементов"
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": "Экземпляры"
|
"title": "Экземпляры"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "Не найдено",
|
"title": "Не найдено",
|
||||||
"text": "Запрошенный ресурс не найден"
|
"text": "Запрошенный ресурс не найден"
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Главная",
|
"home": "Главная",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "Произошла ошибка при обновлении данных о контейнерах"
|
"internalServerError": "Произошла ошибка при обновлении данных о контейнерах",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "tu",
|
"here": "tu",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "URL ikony",
|
"label": "URL ikony",
|
||||||
"header": "Zadajte názov alebo objekty na filtrovanie ikon... Homarr pre vás vyhľadá ikony na stránke {countIcons} ."
|
"header": "Zadajte názov alebo objekty na filtrovanie ikon... Homarr pre vás vyhľadá ikony na stránke {countIcons} .",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "Prepnúť na tmavý motív",
|
"switchToDarkMode": "Prepnúť na tmavý motív",
|
||||||
"switchToLightMode": "Prepnúť na svetlý motív",
|
"switchToLightMode": "Prepnúť na svetlý motív",
|
||||||
"management": "Administrácia",
|
"management": "Administrácia",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Vaše preferencie",
|
"preferences": "Vaše preferencie",
|
||||||
"logout": "Odhlásiť",
|
"logout": "Odhlásiť",
|
||||||
"login": "Prihlásiť sa",
|
"login": "Prihlásiť sa",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "Docker stav",
|
"name": "Docker stav",
|
||||||
"description": "Štatistiky vašich kontajnerov (Túto miniaplikáciu je možné pridať iba s oprávneniami správcu)",
|
"description": "Štatistiky vašich kontajnerov (Túto miniaplikáciu je možné pridať iba s oprávneniami správcu)",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": ""
|
"title": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "Nenájdené",
|
"title": "Nenájdené",
|
||||||
"text": "Nepodarilo sa nájsť požadovaný zdroj"
|
"text": "Nepodarilo sa nájsť požadovaný zdroj"
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Domovská stránka",
|
"home": "Domovská stránka",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "Nepodarilo sa načítať kontajnery Docker"
|
"internalServerError": "Nepodarilo sa načítať kontajnery Docker",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "",
|
"here": "",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"header": ""
|
"header": "",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "",
|
"switchToDarkMode": "",
|
||||||
"switchToLightMode": "Svetli način",
|
"switchToLightMode": "Svetli način",
|
||||||
"management": "Nastavitve",
|
"management": "Nastavitve",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Prilagoditev",
|
"preferences": "Prilagoditev",
|
||||||
"logout": "Odjava",
|
"logout": "Odjava",
|
||||||
"login": "Prijava",
|
"login": "Prijava",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": ""
|
"title": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"text": ""
|
"text": ""
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Domov",
|
"home": "Domov",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": "",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "",
|
"here": "",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"header": ""
|
"header": "",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "Byt till mörkt läge",
|
"switchToDarkMode": "Byt till mörkt läge",
|
||||||
"switchToLightMode": "Byt till ljust läge",
|
"switchToLightMode": "Byt till ljust läge",
|
||||||
"management": "Administration",
|
"management": "Administration",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Dina inställningar",
|
"preferences": "Dina inställningar",
|
||||||
"logout": "Logga ut",
|
"logout": "Logga ut",
|
||||||
"login": "Logga in",
|
"login": "Logga in",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": ""
|
"title": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "Hittades ej",
|
"title": "Hittades ej",
|
||||||
"text": ""
|
"text": ""
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Hem",
|
"home": "Hem",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": "",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "buraya",
|
"here": "buraya",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "Simge URL'si",
|
"label": "Simge URL'si",
|
||||||
"header": "Simgeleri filtrelemek için isim veya nesne yazın... Homarr sizin için {countIcons} simge arasında arama yapacaktır."
|
"header": "Simgeleri filtrelemek için isim veya nesne yazın... Homarr sizin için {countIcons} simge arasında arama yapacaktır.",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "Koyu Temaya Geç",
|
"switchToDarkMode": "Koyu Temaya Geç",
|
||||||
"switchToLightMode": "Aydınlık Temaya Geç",
|
"switchToLightMode": "Aydınlık Temaya Geç",
|
||||||
"management": "Yönetim",
|
"management": "Yönetim",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Tercihleriniz",
|
"preferences": "Tercihleriniz",
|
||||||
"logout": "Oturumu kapat",
|
"logout": "Oturumu kapat",
|
||||||
"login": "Giriş",
|
"login": "Giriş",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "Docker istatistikleri",
|
"name": "Docker istatistikleri",
|
||||||
"description": "Konteynerlerinizin istatistikleri (Bu widget yalnızca yönetici ayrıcalıklarıyla eklenebilir)",
|
"description": "Konteynerlerinizin istatistikleri (Bu widget yalnızca yönetici ayrıcalıklarıyla eklenebilir)",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": "Enable items sorting"
|
"label": "Enable items sorting"
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": "Instances"
|
"title": "Instances"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "Bulunamadı",
|
"title": "Bulunamadı",
|
||||||
"text": "İstenen kaynak bulunamadı"
|
"text": "İstenen kaynak bulunamadı"
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Ana Sayfa",
|
"home": "Ana Sayfa",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "Docker konteynerlerları getirilemedi"
|
"internalServerError": "Docker konteynerlerları getirilemedi",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "Медіа бібліотека",
|
"mediaLibrary": "Медіа бібліотека",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "тут",
|
"here": "тут",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"header": ""
|
"header": "",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "Перемикнути на темну тему",
|
"switchToDarkMode": "Перемикнути на темну тему",
|
||||||
"switchToLightMode": "Перемикнути на світлу тему",
|
"switchToLightMode": "Перемикнути на світлу тему",
|
||||||
"management": "Управління",
|
"management": "Управління",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Ваші налаштування",
|
"preferences": "Ваші налаштування",
|
||||||
"logout": "Вийти",
|
"logout": "Вийти",
|
||||||
"login": "Логін",
|
"login": "Логін",
|
||||||
@@ -1938,7 +1943,7 @@
|
|||||||
"addTable": "Додати таблицю",
|
"addTable": "Додати таблицю",
|
||||||
"deleteTable": "Видалити таблицю",
|
"deleteTable": "Видалити таблицю",
|
||||||
"colorCell": "",
|
"colorCell": "",
|
||||||
"mergeCell": "",
|
"mergeCell": "Ввімкнути/вимкнути об'єднання клітини",
|
||||||
"addColumnLeft": "",
|
"addColumnLeft": "",
|
||||||
"addColumnRight": "",
|
"addColumnRight": "",
|
||||||
"deleteColumn": "",
|
"deleteColumn": "",
|
||||||
@@ -2101,13 +2106,13 @@
|
|||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
"1y": {
|
"1y": {
|
||||||
"label": ""
|
"label": "1 рік"
|
||||||
},
|
},
|
||||||
"2y": {
|
"2y": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
"5y": {
|
"5y": {
|
||||||
"label": ""
|
"label": "5 років"
|
||||||
},
|
},
|
||||||
"10y": {
|
"10y": {
|
||||||
"label": ""
|
"label": ""
|
||||||
@@ -2142,7 +2147,7 @@
|
|||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
"1mo": {
|
"1mo": {
|
||||||
"label": ""
|
"label": "1 місяць"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2182,7 +2187,7 @@
|
|||||||
"label": "Температура за Фаренгейтом"
|
"label": "Температура за Фаренгейтом"
|
||||||
},
|
},
|
||||||
"disableTemperatureDecimals": {
|
"disableTemperatureDecimals": {
|
||||||
"label": ""
|
"label": "Вимкнути десяткові дроби температури"
|
||||||
},
|
},
|
||||||
"showCurrentWindSpeed": {
|
"showCurrentWindSpeed": {
|
||||||
"label": "Показати поточну швидкість вітру",
|
"label": "Показати поточну швидкість вітру",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -2359,7 +2367,7 @@
|
|||||||
"label": "",
|
"label": "",
|
||||||
"option": {
|
"option": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"state": "",
|
"state": "Стан",
|
||||||
"cpuUsage": "",
|
"cpuUsage": "",
|
||||||
"memoryUsage": ""
|
"memoryUsage": ""
|
||||||
}
|
}
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": ""
|
"title": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -2470,7 +2484,7 @@
|
|||||||
"videoDecision": {
|
"videoDecision": {
|
||||||
"directPlay": "",
|
"directPlay": "",
|
||||||
"transcode": "",
|
"transcode": "",
|
||||||
"directStream": ""
|
"directStream": "Прямий потік"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"recentActivity": {
|
"recentActivity": {
|
||||||
@@ -2550,7 +2564,7 @@
|
|||||||
"label": "",
|
"label": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"option": {
|
"option": {
|
||||||
"chart": "",
|
"chart": "Графік",
|
||||||
"events": "",
|
"events": "",
|
||||||
"topPages": "",
|
"topPages": "",
|
||||||
"topReferrers": ""
|
"topReferrers": ""
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "Не знайдено",
|
"title": "Не знайдено",
|
||||||
"text": "Не вдалося знайти запитуваний ресурс"
|
"text": "Не вдалося знайти запитуваний ресурс"
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Головна",
|
"home": "Головна",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": "",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "",
|
"here": "",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"header": ""
|
"header": "",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "",
|
"switchToDarkMode": "",
|
||||||
"switchToLightMode": "Đổi qua chế độ nền sáng",
|
"switchToLightMode": "Đổi qua chế độ nền sáng",
|
||||||
"management": "",
|
"management": "",
|
||||||
|
"docker": "",
|
||||||
"preferences": "Cá nhân hoá",
|
"preferences": "Cá nhân hoá",
|
||||||
"logout": "",
|
"logout": "",
|
||||||
"login": "Đăng nhập",
|
"login": "Đăng nhập",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": ""
|
"title": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"text": ""
|
"text": ""
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "Trang chủ",
|
"home": "Trang chủ",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": "",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
|
"vpn": "",
|
||||||
"mediaLibrary": "",
|
"mediaLibrary": "",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1412,7 +1413,10 @@
|
|||||||
"here": "此處",
|
"here": "此處",
|
||||||
"iconPicker": {
|
"iconPicker": {
|
||||||
"label": "Icon 網址",
|
"label": "Icon 網址",
|
||||||
"header": "輸入名稱或物件來篩選 icons,Homarr 會自動搜尋 {countIcons}"
|
"header": "輸入名稱或物件來篩選 icons,Homarr 會自動搜尋 {countIcons}",
|
||||||
|
"headerLoading": "",
|
||||||
|
"noResults": "",
|
||||||
|
"error": ""
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"options": {
|
"options": {
|
||||||
@@ -1464,6 +1468,7 @@
|
|||||||
"switchToDarkMode": "切換至暗黑模式",
|
"switchToDarkMode": "切換至暗黑模式",
|
||||||
"switchToLightMode": "切換至日間模式",
|
"switchToLightMode": "切換至日間模式",
|
||||||
"management": "管理中心",
|
"management": "管理中心",
|
||||||
|
"docker": "",
|
||||||
"preferences": "偏好設定",
|
"preferences": "偏好設定",
|
||||||
"logout": "登出",
|
"logout": "登出",
|
||||||
"login": "登入",
|
"login": "登入",
|
||||||
@@ -2352,6 +2357,9 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"option": {
|
"option": {
|
||||||
|
"columns": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
"enableRowSorting": {
|
"enableRowSorting": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -2405,6 +2413,12 @@
|
|||||||
"title": ""
|
"title": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vpn": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"serviceUnavailable": "",
|
||||||
|
"option": {}
|
||||||
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3639,6 +3653,9 @@
|
|||||||
"error": {
|
"error": {
|
||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
},
|
},
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"metric": {
|
"metric": {
|
||||||
"cpu": "",
|
"cpu": "",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
@@ -3712,6 +3729,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"selectSystem": "",
|
"selectSystem": "",
|
||||||
|
"empty": {
|
||||||
|
"noSystems": ""
|
||||||
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "",
|
||||||
"liveConnectionFailed": "",
|
"liveConnectionFailed": "",
|
||||||
@@ -4133,6 +4153,11 @@
|
|||||||
"title": "不存在",
|
"title": "不存在",
|
||||||
"text": "找不到請求的資源"
|
"text": "找不到請求的資源"
|
||||||
},
|
},
|
||||||
|
"error": {
|
||||||
|
"title": "",
|
||||||
|
"text": "",
|
||||||
|
"digest": ""
|
||||||
|
},
|
||||||
"navbar": {
|
"navbar": {
|
||||||
"items": {
|
"items": {
|
||||||
"home": "首頁",
|
"home": "首頁",
|
||||||
@@ -4579,6 +4604,9 @@
|
|||||||
},
|
},
|
||||||
"umamiActiveVisitors": {
|
"umamiActiveVisitors": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"vpn": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interval": {
|
"interval": {
|
||||||
@@ -5071,7 +5099,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "取得 Docker 容器失敗"
|
"internalServerError": "取得 Docker 容器失敗",
|
||||||
|
"noColumns": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { useState } from "react";
|
import { useCallback, useState } from "react";
|
||||||
import { Box, Container, Flex, Popover, Text, useMantineTheme } from "@mantine/core";
|
import { Box, Container, Flex, Popover, Text, useMantineTheme } from "@mantine/core";
|
||||||
import { useElementSize } from "@mantine/hooks";
|
import { useElementSize } from "@mantine/hooks";
|
||||||
|
|
||||||
@@ -13,10 +13,12 @@ interface CalendarDayProps {
|
|||||||
disabled: boolean;
|
disabled: boolean;
|
||||||
rootWidth: number;
|
rootWidth: number;
|
||||||
rootHeight: number;
|
rootHeight: number;
|
||||||
|
onOpen: (close: () => void) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth }: CalendarDayProps) => {
|
export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth, onOpen }: CalendarDayProps) => {
|
||||||
const [opened, setOpened] = useState(false);
|
const [opened, setOpened] = useState(false);
|
||||||
|
const [pinned, setPinned] = useState(false);
|
||||||
const { primaryColor } = useMantineTheme();
|
const { primaryColor } = useMantineTheme();
|
||||||
const { ref, height } = useElementSize();
|
const { ref, height } = useElementSize();
|
||||||
const board = useRequiredBoard();
|
const board = useRequiredBoard();
|
||||||
@@ -29,6 +31,19 @@ export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth }: C
|
|||||||
|
|
||||||
const isTooSmallForIndicators = height < 30;
|
const isTooSmallForIndicators = height < 30;
|
||||||
|
|
||||||
|
const handleMouseEnter = useCallback(() => {
|
||||||
|
if (disabled) return;
|
||||||
|
onOpen(() => {
|
||||||
|
setOpened(false);
|
||||||
|
setPinned(false);
|
||||||
|
});
|
||||||
|
setOpened(true);
|
||||||
|
}, [disabled, onOpen]);
|
||||||
|
|
||||||
|
const handleMouseLeave = useCallback(() => {
|
||||||
|
if (!pinned) setOpened(false);
|
||||||
|
}, [pinned]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Popover
|
<Popover
|
||||||
position="bottom"
|
position="bottom"
|
||||||
@@ -39,7 +54,10 @@ export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth }: C
|
|||||||
transitionProps={{
|
transitionProps={{
|
||||||
transition: "pop",
|
transition: "pop",
|
||||||
}}
|
}}
|
||||||
onChange={setOpened}
|
onChange={(value) => {
|
||||||
|
setOpened(value);
|
||||||
|
if (!value) setPinned(false);
|
||||||
|
}}
|
||||||
opened={opened}
|
opened={opened}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
>
|
>
|
||||||
@@ -59,10 +77,10 @@ export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth }: C
|
|||||||
cursor: disabled ? "default" : "pointer",
|
cursor: disabled ? "default" : "pointer",
|
||||||
}}
|
}}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
if (disabled) return;
|
if (!disabled) setPinned((prev) => !prev);
|
||||||
|
|
||||||
setOpened((prev) => !prev);
|
|
||||||
}}
|
}}
|
||||||
|
onMouseEnter={handleMouseEnter}
|
||||||
|
onMouseLeave={handleMouseLeave}
|
||||||
>
|
>
|
||||||
<Text ta={"center"} size={shouldScaleDown ? "xs" : "md"} lh={1}>
|
<Text ta={"center"} size={shouldScaleDown ? "xs" : "md"} lh={1}>
|
||||||
{date.getDate()}
|
{date.getDate()}
|
||||||
@@ -71,7 +89,15 @@ export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth }: C
|
|||||||
</Container>
|
</Container>
|
||||||
</Popover.Target>
|
</Popover.Target>
|
||||||
{/* Popover has some offset on the left side, padding is removed because of scrollarea paddings */}
|
{/* Popover has some offset on the left side, padding is removed because of scrollarea paddings */}
|
||||||
<Popover.Dropdown maw="calc(100vw - 24px)" w={512} pe={4} pb={0} style={{ overflow: "hidden" }}>
|
<Popover.Dropdown
|
||||||
|
maw="calc(100vw - 24px)"
|
||||||
|
w={512}
|
||||||
|
pe={4}
|
||||||
|
pb={0}
|
||||||
|
style={{ overflow: "hidden" }}
|
||||||
|
onMouseEnter={() => setOpened(true)}
|
||||||
|
onMouseLeave={handleMouseLeave}
|
||||||
|
>
|
||||||
<CalendarEventList events={events} />
|
<CalendarEventList events={events} />
|
||||||
</Popover.Dropdown>
|
</Popover.Dropdown>
|
||||||
</Popover>
|
</Popover>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { useMemo, useState } from "react";
|
import { useCallback, useMemo, useRef, useState } from "react";
|
||||||
import { useParams } from "next/navigation";
|
import { useParams } from "next/navigation";
|
||||||
import { useMantineTheme } from "@mantine/core";
|
import { useMantineTheme } from "@mantine/core";
|
||||||
import { Calendar } from "@mantine/dates";
|
import { Calendar } from "@mantine/dates";
|
||||||
@@ -16,11 +16,15 @@ import type { WidgetComponentProps } from "../definition";
|
|||||||
import { CalendarDay } from "./calender-day";
|
import { CalendarDay } from "./calender-day";
|
||||||
import classes from "./component.module.css";
|
import classes from "./component.module.css";
|
||||||
|
|
||||||
export default function CalendarWidget(props: WidgetComponentProps<"calendar">) {
|
export default function CalendarWidget(
|
||||||
|
props: WidgetComponentProps<"calendar">,
|
||||||
|
) {
|
||||||
const [month, setMonth] = useState(new Date());
|
const [month, setMonth] = useState(new Date());
|
||||||
|
|
||||||
if (props.integrationIds.length === 0) {
|
if (props.integrationIds.length === 0) {
|
||||||
return <CalendarBase {...props} events={[]} month={month} setMonth={setMonth} />;
|
return (
|
||||||
|
<CalendarBase {...props} events={[]} month={month} setMonth={setMonth} />
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return <FetchCalendar month={month} setMonth={setMonth} {...props} />;
|
return <FetchCalendar month={month} setMonth={setMonth} {...props} />;
|
||||||
@@ -31,7 +35,13 @@ interface FetchCalendarProps extends WidgetComponentProps<"calendar"> {
|
|||||||
setMonth: (date: Date) => void;
|
setMonth: (date: Date) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const FetchCalendar = ({ month, setMonth, isEditMode, integrationIds, options }: FetchCalendarProps) => {
|
const FetchCalendar = ({
|
||||||
|
month,
|
||||||
|
setMonth,
|
||||||
|
isEditMode,
|
||||||
|
integrationIds,
|
||||||
|
options,
|
||||||
|
}: FetchCalendarProps) => {
|
||||||
const input = {
|
const input = {
|
||||||
integrationIds,
|
integrationIds,
|
||||||
month: month.getMonth(),
|
month: month.getMonth(),
|
||||||
@@ -61,9 +71,20 @@ const FetchCalendar = ({ month, setMonth, isEditMode, integrationIds, options }:
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const events = useMemo(() => data?.flatMap((item) => item.events) ?? [], [data]);
|
const events = useMemo(
|
||||||
|
() => data?.flatMap((item) => item.events) ?? [],
|
||||||
|
[data],
|
||||||
|
);
|
||||||
|
|
||||||
return <CalendarBase isEditMode={isEditMode} events={events} month={month} setMonth={setMonth} options={options} />;
|
return (
|
||||||
|
<CalendarBase
|
||||||
|
isEditMode={isEditMode}
|
||||||
|
events={events}
|
||||||
|
month={month}
|
||||||
|
setMonth={setMonth}
|
||||||
|
options={options}
|
||||||
|
/>
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
interface CalendarBaseProps {
|
interface CalendarBaseProps {
|
||||||
@@ -74,7 +95,13 @@ interface CalendarBaseProps {
|
|||||||
options: WidgetComponentProps<"calendar">["options"];
|
options: WidgetComponentProps<"calendar">["options"];
|
||||||
}
|
}
|
||||||
|
|
||||||
const CalendarBase = ({ isEditMode, events, month, setMonth, options }: CalendarBaseProps) => {
|
const CalendarBase = ({
|
||||||
|
isEditMode,
|
||||||
|
events,
|
||||||
|
month,
|
||||||
|
setMonth,
|
||||||
|
options,
|
||||||
|
}: CalendarBaseProps) => {
|
||||||
const params = useParams();
|
const params = useParams();
|
||||||
const locale = params.locale as string;
|
const locale = params.locale as string;
|
||||||
const { firstDayOfWeek } = useSettings();
|
const { firstDayOfWeek } = useSettings();
|
||||||
@@ -85,6 +112,11 @@ const CalendarBase = ({ isEditMode, events, month, setMonth, options }: Calendar
|
|||||||
const isSmall = width < 256;
|
const isSmall = width < 256;
|
||||||
|
|
||||||
const normalizedEvents = useMemo(() => splitEvents(events), [events]);
|
const normalizedEvents = useMemo(() => splitEvents(events), [events]);
|
||||||
|
const activeCloseRef = useRef<(() => void) | null>(null);
|
||||||
|
const onDayOpen = useCallback((close: () => void) => {
|
||||||
|
activeCloseRef.current?.();
|
||||||
|
activeCloseRef.current = close;
|
||||||
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Calendar
|
<Calendar
|
||||||
@@ -150,9 +182,14 @@ const CalendarBase = ({ isEditMode, events, month, setMonth, options }: Calendar
|
|||||||
const eventsForDate = normalizedEvents
|
const eventsForDate = normalizedEvents
|
||||||
.filter((event) => dayjs(event.startDate).isSame(tileDate, "day"))
|
.filter((event) => dayjs(event.startDate).isSame(tileDate, "day"))
|
||||||
.filter(
|
.filter(
|
||||||
(event) => event.metadata?.type !== "radarr" || options.releaseType.includes(event.metadata.releaseType),
|
(event) =>
|
||||||
|
event.metadata?.type !== "radarr" ||
|
||||||
|
options.releaseType.includes(event.metadata.releaseType),
|
||||||
)
|
)
|
||||||
.toSorted((eventA, eventB) => eventA.startDate.getTime() - eventB.startDate.getTime());
|
.toSorted(
|
||||||
|
(eventA, eventB) =>
|
||||||
|
eventA.startDate.getTime() - eventB.startDate.getTime(),
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<CalendarDay
|
<CalendarDay
|
||||||
@@ -161,6 +198,7 @@ const CalendarBase = ({ isEditMode, events, month, setMonth, options }: Calendar
|
|||||||
disabled={isEditMode || eventsForDate.length === 0}
|
disabled={isEditMode || eventsForDate.length === 0}
|
||||||
rootWidth={width}
|
rootWidth={width}
|
||||||
rootHeight={height}
|
rootHeight={height}
|
||||||
|
onOpen={onDayOpen}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}}
|
}}
|
||||||
@@ -198,7 +236,9 @@ export const splitEvents = (events: CalendarEvent[]): CalendarEvent[] => {
|
|||||||
splitEvents.push({
|
splitEvents.push({
|
||||||
...event,
|
...event,
|
||||||
startDate: currentStart.toDate(),
|
startDate: currentStart.toDate(),
|
||||||
endDate: currentStart.endOf("day").isAfter(event.endDate) ? event.endDate : currentStart.endOf("day").toDate(),
|
endDate: currentStart.endOf("day").isAfter(event.endDate)
|
||||||
|
? event.endDate
|
||||||
|
: currentStart.endOf("day").toDate(),
|
||||||
});
|
});
|
||||||
|
|
||||||
currentStart = currentStart.add(1, "day").startOf("day");
|
currentStart = currentStart.add(1, "day").startOf("day");
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import type React from "react";
|
||||||
import type { LoaderComponent } from "next/dynamic";
|
import type { LoaderComponent } from "next/dynamic";
|
||||||
import type { QueryClient } from "@tanstack/react-query";
|
import type { QueryClient } from "@tanstack/react-query";
|
||||||
import type { DefaultErrorData } from "@trpc/server/unstable-core-do-not-import";
|
import type { DefaultErrorData } from "@trpc/server/unstable-core-do-not-import";
|
||||||
@@ -9,7 +10,35 @@ import type { stringOrTranslation } from "@homarr/translation";
|
|||||||
import type { TablerIcon } from "@homarr/ui";
|
import type { TablerIcon } from "@homarr/ui";
|
||||||
|
|
||||||
import type { WidgetImports } from ".";
|
import type { WidgetImports } from ".";
|
||||||
import type { inferOptionsFromCreator, WidgetOptionsRecord } from "./options";
|
import type { inferOptionsFromCreator, inferOptionsFromDefinition, WidgetOptionsRecord } from "./options";
|
||||||
|
|
||||||
|
export interface WidgetContextMenuAction {
|
||||||
|
key: string;
|
||||||
|
label: stringOrTranslation;
|
||||||
|
icon?: TablerIcon;
|
||||||
|
onClick: () => void;
|
||||||
|
hidden?: boolean;
|
||||||
|
disabled?: boolean;
|
||||||
|
color?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface WidgetContextMenuContext {
|
||||||
|
isEditMode: boolean;
|
||||||
|
boardId: string | undefined;
|
||||||
|
itemId: string | undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface WidgetContextActionProps<
|
||||||
|
TKind extends WidgetKind,
|
||||||
|
TOptions extends WidgetOptionsRecord = WidgetOptionsRecord,
|
||||||
|
> {
|
||||||
|
kind: TKind;
|
||||||
|
options: inferOptionsFromDefinition<TOptions>;
|
||||||
|
setOptions: (partial: Partial<inferOptionsFromDefinition<TOptions>>) => void;
|
||||||
|
integrationIds: string[];
|
||||||
|
context: WidgetContextMenuContext;
|
||||||
|
widgetStateRef: React.MutableRefObject<Record<string, unknown> | null>;
|
||||||
|
}
|
||||||
|
|
||||||
const createWithDynamicImport =
|
const createWithDynamicImport =
|
||||||
<TKind extends WidgetKind, TDefinition extends WidgetDefinition>(kind: TKind, definition: TDefinition) =>
|
<TKind extends WidgetKind, TDefinition extends WidgetDefinition>(kind: TKind, definition: TDefinition) =>
|
||||||
@@ -56,6 +85,7 @@ export interface WidgetDefinition {
|
|||||||
}
|
}
|
||||||
>
|
>
|
||||||
>;
|
>;
|
||||||
|
contextActions?: (props: Omit<WidgetContextActionProps<WidgetKind>, "kind">) => WidgetContextMenuAction[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface WidgetProps<TKind extends WidgetKind> {
|
export interface WidgetProps<TKind extends WidgetKind> {
|
||||||
@@ -70,6 +100,7 @@ export type WidgetComponentProps<TKind extends WidgetKind> = WidgetProps<TKind>
|
|||||||
setOptions: ({ newOptions }: { newOptions: Partial<inferOptionsFromCreator<WidgetOptionsRecordOf<TKind>>> }) => void;
|
setOptions: ({ newOptions }: { newOptions: Partial<inferOptionsFromCreator<WidgetOptionsRecordOf<TKind>>> }) => void;
|
||||||
width: number;
|
width: number;
|
||||||
height: number;
|
height: number;
|
||||||
|
widgetStateRef?: React.MutableRefObject<Record<string, unknown> | null>;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type WidgetOptionsRecordOf<TKind extends WidgetKind> = WidgetImports[TKind]["definition"]["createOptions"];
|
export type WidgetOptionsRecordOf<TKind extends WidgetKind> = WidgetImports[TKind]["definition"]["createOptions"];
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ export default function DnsHoleControlsWidget({
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
staleTime: 5 * 1000,
|
staleTime: 5 * 1000,
|
||||||
|
refetchInterval: 5 * 1000,
|
||||||
refetchOnWindowFocus: false,
|
refetchOnWindowFocus: false,
|
||||||
refetchOnReconnect: false,
|
refetchOnReconnect: false,
|
||||||
retry: false,
|
retry: false,
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ export default function DnsHoleSummaryWidget({ options, integrationIds }: Widget
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
staleTime: 5 * 1000,
|
staleTime: 5 * 1000,
|
||||||
|
refetchInterval: 5 * 1000,
|
||||||
refetchOnWindowFocus: false,
|
refetchOnWindowFocus: false,
|
||||||
refetchOnReconnect: false,
|
refetchOnReconnect: false,
|
||||||
retry: false,
|
retry: false,
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { useMemo } from "react";
|
import { useMemo } from "react";
|
||||||
import { ActionIcon, Avatar, Badge, Group, Stack, Text, Tooltip } from "@mantine/core";
|
import { ActionIcon, Avatar, Badge, Center, Group, Stack, Text, Tooltip } from "@mantine/core";
|
||||||
import type { IconProps } from "@tabler/icons-react";
|
import type { IconProps } from "@tabler/icons-react";
|
||||||
import { IconBrandDocker, IconPlayerPlay, IconPlayerStop, IconRotateClockwise } from "@tabler/icons-react";
|
import { IconBrandDocker, IconPlayerPlay, IconPlayerStop, IconRotateClockwise } from "@tabler/icons-react";
|
||||||
import type { MRT_ColumnDef } from "mantine-react-table";
|
import type { MRT_ColumnDef, MRT_VisibilityState } from "mantine-react-table";
|
||||||
import { MantineReactTable } from "mantine-react-table";
|
import { MantineReactTable } from "mantine-react-table";
|
||||||
|
|
||||||
import type { RouterOutputs } from "@homarr/api";
|
import type { RouterOutputs } from "@homarr/api";
|
||||||
@@ -213,6 +213,15 @@ export default function DockerWidget({ options, width, isEditMode }: WidgetCompo
|
|||||||
|
|
||||||
const columns = useMemo(() => createColumns(t), [t]);
|
const columns = useMemo(() => createColumns(t), [t]);
|
||||||
|
|
||||||
|
const columnVisibility: MRT_VisibilityState = {
|
||||||
|
name: options.columns.includes("name"),
|
||||||
|
state: options.columns.includes("state"),
|
||||||
|
host: options.columns.includes("host"),
|
||||||
|
cpuUsage: options.columns.includes("cpuUsage"),
|
||||||
|
memoryUsage: options.columns.includes("memoryUsage"),
|
||||||
|
actions: options.columns.includes("actions"),
|
||||||
|
};
|
||||||
|
|
||||||
const table = useTranslatedMantineReactTable({
|
const table = useTranslatedMantineReactTable({
|
||||||
columns,
|
columns,
|
||||||
data: containers,
|
data: containers,
|
||||||
@@ -233,6 +242,9 @@ export default function DockerWidget({ options, width, isEditMode }: WidgetCompo
|
|||||||
sorting: [{ id: options.defaultSort, desc: options.descendingDefaultSort }],
|
sorting: [{ id: options.defaultSort, desc: options.descendingDefaultSort }],
|
||||||
density: "xs",
|
density: "xs",
|
||||||
},
|
},
|
||||||
|
state: {
|
||||||
|
columnVisibility,
|
||||||
|
},
|
||||||
mantinePaperProps: {
|
mantinePaperProps: {
|
||||||
flex: 1,
|
flex: 1,
|
||||||
withBorder: false,
|
withBorder: false,
|
||||||
@@ -260,6 +272,13 @@ export default function DockerWidget({ options, width, isEditMode }: WidgetCompo
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (options.columns.length === 0)
|
||||||
|
return (
|
||||||
|
<Center h="100%">
|
||||||
|
<Text>{t("error.noColumns")}</Text>
|
||||||
|
</Center>
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Stack gap={0} h="100%" display="flex">
|
<Stack gap={0} h="100%" display="flex">
|
||||||
<MantineReactTable table={table} />
|
<MantineReactTable table={table} />
|
||||||
|
|||||||
@@ -12,10 +12,29 @@ const columnsList = [
|
|||||||
"memoryUsage",
|
"memoryUsage",
|
||||||
] as const satisfies (keyof RouterOutputs["docker"]["getContainers"]["containers"][number])[];
|
] as const satisfies (keyof RouterOutputs["docker"]["getContainers"]["containers"][number])[];
|
||||||
|
|
||||||
|
const allColumnsList = ["name", "state", "host", "cpuUsage", "memoryUsage", "actions"] as const;
|
||||||
|
|
||||||
|
const columnTranslationKeyMap = {
|
||||||
|
name: "docker.field.name.label",
|
||||||
|
state: "docker.field.state.label",
|
||||||
|
host: "docker.field.host.label",
|
||||||
|
cpuUsage: "docker.field.stats.cpu.label",
|
||||||
|
memoryUsage: "docker.field.stats.memory.label",
|
||||||
|
actions: "docker.action.title",
|
||||||
|
} as const satisfies Record<(typeof allColumnsList)[number], string>;
|
||||||
|
|
||||||
export const { definition, componentLoader } = createWidgetDefinition("dockerContainers", {
|
export const { definition, componentLoader } = createWidgetDefinition("dockerContainers", {
|
||||||
icon: IconBrandDocker,
|
icon: IconBrandDocker,
|
||||||
createOptions() {
|
createOptions() {
|
||||||
return optionsBuilder.from((factory) => ({
|
return optionsBuilder.from((factory) => ({
|
||||||
|
columns: factory.multiSelect({
|
||||||
|
defaultValue: [...allColumnsList],
|
||||||
|
options: allColumnsList.map((value) => ({
|
||||||
|
value,
|
||||||
|
label: (t) => t(columnTranslationKeyMap[value]),
|
||||||
|
})),
|
||||||
|
searchable: true,
|
||||||
|
}),
|
||||||
enableRowSorting: factory.switch({
|
enableRowSorting: factory.switch({
|
||||||
defaultValue: false,
|
defaultValue: false,
|
||||||
}),
|
}),
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import "../widgets-common.css";
|
import "../widgets-common.css";
|
||||||
|
import "./styles.css";
|
||||||
|
|
||||||
import { useCallback, useMemo, useState } from "react";
|
import { useCallback, useMemo, useState } from "react";
|
||||||
import type { MantineStyleProp } from "@mantine/core";
|
import type { MantineStyleProp } from "@mantine/core";
|
||||||
@@ -577,7 +578,7 @@ export default function DownloadClientsWidget({
|
|||||||
enableColumnOrdering: isEditMode,
|
enableColumnOrdering: isEditMode,
|
||||||
enableRowVirtualization: true,
|
enableRowVirtualization: true,
|
||||||
rowVirtualizerOptions: { overscan: 5 },
|
rowVirtualizerOptions: { overscan: 5 },
|
||||||
mantinePaperProps: { flex: 1, withBorder: false, shadow: undefined },
|
mantinePaperProps: { flex: 1, withBorder: false, shadow: undefined, bg: "transparent" },
|
||||||
mantineTableContainerProps: { style: { height: "100%" } },
|
mantineTableContainerProps: { style: { height: "100%" } },
|
||||||
mantineTableProps: {
|
mantineTableProps: {
|
||||||
className: "downloads-widget-table",
|
className: "downloads-widget-table",
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
/* Make the MantineReactTable transparent so the board card's opacity-controlled
|
||||||
|
background shows through. MRT defaults to var(--mantine-color-body) which is opaque. */
|
||||||
|
.downloads-widget-table,
|
||||||
|
.downloads-widget-table .mantine-Table-table,
|
||||||
|
.downloads-widget-table .mantine-Table-thead,
|
||||||
|
.downloads-widget-table .mantine-Table-tbody,
|
||||||
|
.downloads-widget-table .mantine-Table-tfoot,
|
||||||
|
.downloads-widget-table .mantine-Table-tr,
|
||||||
|
.downloads-widget-table th,
|
||||||
|
.downloads-widget-table td {
|
||||||
|
background-color: transparent !important;
|
||||||
|
}
|
||||||
@@ -61,7 +61,12 @@ import * as video from "./video";
|
|||||||
import * as weather from "./weather";
|
import * as weather from "./weather";
|
||||||
import * as customApi from "./custom-api";
|
import * as customApi from "./custom-api";
|
||||||
|
|
||||||
export type { WidgetDefinition, WidgetOptionsSettings } from "./definition";
|
export type {
|
||||||
|
WidgetDefinition,
|
||||||
|
WidgetContextMenuAction,
|
||||||
|
WidgetContextActionProps,
|
||||||
|
WidgetOptionsSettings,
|
||||||
|
} from "./definition";
|
||||||
export type { WidgetComponentProps };
|
export type { WidgetComponentProps };
|
||||||
export type { WidgetOptionDefinition, WidgetOptionType } from "./options";
|
export type { WidgetOptionDefinition, WidgetOptionType } from "./options";
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { IconZoomQuestion } from "@tabler/icons-react";
|
import { IconSearch, IconZoomQuestion } from "@tabler/icons-react";
|
||||||
|
|
||||||
import { getIntegrationKindsByCategory } from "@homarr/definitions";
|
import { getIntegrationKindsByCategory } from "@homarr/definitions";
|
||||||
|
import { openMediaRequestSearch } from "@homarr/spotlight";
|
||||||
|
|
||||||
import { createWidgetDefinition } from "../../definition";
|
import { createWidgetDefinition } from "../../definition";
|
||||||
import { optionsBuilder } from "../../options";
|
import { optionsBuilder } from "../../options";
|
||||||
@@ -14,5 +15,15 @@ export const { componentLoader, definition } = createWidgetDefinition("mediaRequ
|
|||||||
}),
|
}),
|
||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
contextActions: ({ integrationIds }) => [
|
||||||
|
{
|
||||||
|
key: "search",
|
||||||
|
label: (t) => t("search.mode.media.action.search.label"),
|
||||||
|
icon: IconSearch,
|
||||||
|
onClick: () => {
|
||||||
|
openMediaRequestSearch({ integrationIds });
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
supportedIntegrations: getIntegrationKindsByCategory("mediaRequest"),
|
supportedIntegrations: getIntegrationKindsByCategory("mediaRequest"),
|
||||||
}).withDynamicImport(() => import("./component"));
|
}).withDynamicImport(() => import("./component"));
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
import { IconChartBar } from "@tabler/icons-react";
|
import { IconChartBar, IconSearch } from "@tabler/icons-react";
|
||||||
|
|
||||||
import { getIntegrationKindsByCategory } from "@homarr/definitions";
|
import { getIntegrationKindsByCategory } from "@homarr/definitions";
|
||||||
|
import { openMediaRequestSearch } from "@homarr/spotlight";
|
||||||
|
|
||||||
import { createWidgetDefinition } from "../../definition";
|
import { createWidgetDefinition } from "../../definition";
|
||||||
|
|
||||||
@@ -9,5 +10,15 @@ export const { componentLoader, definition } = createWidgetDefinition("mediaRequ
|
|||||||
createOptions() {
|
createOptions() {
|
||||||
return {};
|
return {};
|
||||||
},
|
},
|
||||||
|
contextActions: ({ integrationIds }) => [
|
||||||
|
{
|
||||||
|
key: "search",
|
||||||
|
label: (t) => t("search.mode.media.action.search.label"),
|
||||||
|
icon: IconSearch,
|
||||||
|
onClick: () => {
|
||||||
|
openMediaRequestSearch({ integrationIds });
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
supportedIntegrations: getIntegrationKindsByCategory("mediaRequest"),
|
supportedIntegrations: getIntegrationKindsByCategory("mediaRequest"),
|
||||||
}).withDynamicImport(() => import("./component"));
|
}).withDynamicImport(() => import("./component"));
|
||||||
@@ -13,6 +13,7 @@ import type { ReleasesRepository } from "./releases/releases-repository";
|
|||||||
interface CommonInput<TType> {
|
interface CommonInput<TType> {
|
||||||
defaultValue?: TType;
|
defaultValue?: TType;
|
||||||
withDescription?: boolean;
|
withDescription?: boolean;
|
||||||
|
skipContextMenu?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface TextInput extends CommonInput<string> {
|
interface TextInput extends CommonInput<string> {
|
||||||
@@ -91,6 +92,7 @@ const optionsFactory = {
|
|||||||
type: "switch" as const,
|
type: "switch" as const,
|
||||||
defaultValue: input?.defaultValue ?? false,
|
defaultValue: input?.defaultValue ?? false,
|
||||||
withDescription: input?.withDescription ?? false,
|
withDescription: input?.withDescription ?? false,
|
||||||
|
skipContextMenu: input?.skipContextMenu ?? false,
|
||||||
}),
|
}),
|
||||||
text: (input?: TextInput) => ({
|
text: (input?: TextInput) => ({
|
||||||
type: "text" as const,
|
type: "text" as const,
|
||||||
|
|||||||
Generated
+1229
-866
File diff suppressed because it is too large.
Load diff
+27
-27
@@ -14,7 +14,7 @@ catalog:
|
|||||||
"@dnd-kit/utilities": ^3.2.2
|
"@dnd-kit/utilities": ^3.2.2
|
||||||
"@drizzle-team/brocli": ^0.12.0
|
"@drizzle-team/brocli": ^0.12.0
|
||||||
"@extractus/feed-extractor": 7.2.1
|
"@extractus/feed-extractor": 7.2.1
|
||||||
'@gfazioli/mantine-onboarding-tour': ^4.0.5
|
'@gfazioli/mantine-onboarding-tour': ^4.0.6
|
||||||
"@gitbeaker/rest": ^43.8.0
|
"@gitbeaker/rest": ^43.8.0
|
||||||
"@homarr/gridstack": ^1.12.0
|
"@homarr/gridstack": ^1.12.0
|
||||||
"@homarr/node-unifi": ^2.6.0
|
"@homarr/node-unifi": ^2.6.0
|
||||||
@@ -22,21 +22,21 @@ catalog:
|
|||||||
"@jellyfin/sdk": ^0.13.0
|
"@jellyfin/sdk": ^0.13.0
|
||||||
"@kubernetes/client-node": ^1.4.0
|
"@kubernetes/client-node": ^1.4.0
|
||||||
"@modelcontextprotocol/sdk": 1.29.0
|
"@modelcontextprotocol/sdk": 1.29.0
|
||||||
"@mantine/charts": ^9.3.2
|
"@mantine/charts": ^9.4.0
|
||||||
"@mantine/colors-generator": ^9.3.2
|
"@mantine/colors-generator": ^9.4.0
|
||||||
"@mantine/core": ^9.3.2
|
"@mantine/core": ^9.4.0
|
||||||
"@mantine/dates": ^9.3.2
|
"@mantine/dates": ^9.4.0
|
||||||
"@mantine/dropzone": ^9.3.2
|
"@mantine/dropzone": ^9.4.0
|
||||||
"@mantine/form": ^9.3.2
|
"@mantine/form": ^9.4.0
|
||||||
"@mantine/hooks": ^9.3.2
|
"@mantine/hooks": ^9.4.0
|
||||||
"@mantine/modals": ^9.3.2
|
"@mantine/modals": ^9.4.0
|
||||||
"@mantine/notifications": ^9.3.2
|
"@mantine/notifications": ^9.4.0
|
||||||
"@mantine/spotlight": ^9.3.2
|
"@mantine/spotlight": ^9.4.0
|
||||||
"@mantine/tiptap": ^9.3.2
|
"@mantine/tiptap": ^9.4.0
|
||||||
"@next/eslint-plugin-next": 16.2.9
|
"@next/eslint-plugin-next": 16.2.9
|
||||||
"@octokit/auth-app": ^8.2.0
|
"@octokit/auth-app": ^8.2.0
|
||||||
"@paralleldrive/cuid2": ^3.3.0
|
"@paralleldrive/cuid2": ^3.3.0
|
||||||
"@playwright/test": ^1.61.0
|
"@playwright/test": ^1.61.1
|
||||||
"@semantic-release/changelog": ^6.0.3
|
"@semantic-release/changelog": ^6.0.3
|
||||||
"@semantic-release/commit-analyzer": ^13.0.1
|
"@semantic-release/commit-analyzer": ^13.0.1
|
||||||
"@semantic-release/git": ^10.0.1
|
"@semantic-release/git": ^10.0.1
|
||||||
@@ -73,7 +73,7 @@ catalog:
|
|||||||
"@trpc/react-query": ^11.17.0
|
"@trpc/react-query": ^11.17.0
|
||||||
"@trpc/server": ^11.17.0
|
"@trpc/server": ^11.17.0
|
||||||
"@trpc/tanstack-react-query": ^11.17.0
|
"@trpc/tanstack-react-query": ^11.17.0
|
||||||
"@turbo/gen": ^2.9.18
|
"@turbo/gen": ^2.10.0
|
||||||
"@types/adm-zip": 0.5.8
|
"@types/adm-zip": 0.5.8
|
||||||
"@types/bcrypt": 6.0.0
|
"@types/bcrypt": 6.0.0
|
||||||
"@types/better-sqlite3": 7.6.13
|
"@types/better-sqlite3": 7.6.13
|
||||||
@@ -88,13 +88,13 @@ catalog:
|
|||||||
"@types/prismjs": ^1.26.6
|
"@types/prismjs": ^1.26.6
|
||||||
"@types/react": 19.2.17
|
"@types/react": 19.2.17
|
||||||
"@types/react-dom": 19.2.3
|
"@types/react-dom": 19.2.3
|
||||||
"@scalar/api-reference-react": ^0.9.47
|
"@scalar/api-reference-react": ^0.9.48
|
||||||
"@types/video.js": ^7.3.58
|
"@types/video.js": ^7.3.58
|
||||||
"@types/ws": ^8.18.1
|
"@types/ws": ^8.18.1
|
||||||
"@types/xml2js": ^0.4.14
|
"@types/xml2js": ^0.4.14
|
||||||
posthog-js: ^1.391.2
|
posthog-js: ^1.393.5
|
||||||
posthog-node: ^4.18.0
|
posthog-node: ^4.18.0
|
||||||
"@vitejs/plugin-react": ^6.0.2
|
"@vitejs/plugin-react": ^6.0.3
|
||||||
"@vitest/coverage-v8": ^4.1.9
|
"@vitest/coverage-v8": ^4.1.9
|
||||||
"@vitest/ui": ^4.1.9
|
"@vitest/ui": ^4.1.9
|
||||||
"@xterm/addon-canvas": ^0.7.0
|
"@xterm/addon-canvas": ^0.7.0
|
||||||
@@ -118,7 +118,7 @@ catalog:
|
|||||||
dayjs: ^1.11.21
|
dayjs: ^1.11.21
|
||||||
deepmerge: 4.3.1
|
deepmerge: 4.3.1
|
||||||
dns-caching: ^0.2.9
|
dns-caching: ^0.2.9
|
||||||
dockerode: ^5.0.0
|
dockerode: ^5.0.1
|
||||||
dotenv: ^17.4.2
|
dotenv: ^17.4.2
|
||||||
dotenv-cli: ^11.0.0
|
dotenv-cli: ^11.0.0
|
||||||
drizzle-kit: ^0.31.10
|
drizzle-kit: ^0.31.10
|
||||||
@@ -150,8 +150,8 @@ catalog:
|
|||||||
next-intl: 4.13.0
|
next-intl: 4.13.0
|
||||||
node-loader: ^2.1.0
|
node-loader: ^2.1.0
|
||||||
octokit: ^5.0.5
|
octokit: ^5.0.5
|
||||||
oxfmt: ^0.55.0
|
oxfmt: ^0.56.0
|
||||||
oxlint: ^1.70.0
|
oxlint: ^1.71.0
|
||||||
pg: ^8.22.0
|
pg: ^8.22.0
|
||||||
postcss-preset-mantine: ^1.18.0
|
postcss-preset-mantine: ^1.18.0
|
||||||
prismjs: ^1.30.0
|
prismjs: ^1.30.0
|
||||||
@@ -163,7 +163,7 @@ catalog:
|
|||||||
react-markdown: ^10.1.0
|
react-markdown: ^10.1.0
|
||||||
react-quill-new: ^3.8.3
|
react-quill-new: ^3.8.3
|
||||||
react-simple-code-editor: ^0.14.1
|
react-simple-code-editor: ^0.14.1
|
||||||
recharts: ^3.8.1
|
recharts: ^3.9.0
|
||||||
sass: ^1.101.0
|
sass: ^1.101.0
|
||||||
semantic-release: ^25.0.5
|
semantic-release: ^25.0.5
|
||||||
semver-parser: ^4.2.1
|
semver-parser: ^4.2.1
|
||||||
@@ -175,9 +175,9 @@ catalog:
|
|||||||
trpc-to-openapi: ^3.3.0
|
trpc-to-openapi: ^3.3.0
|
||||||
tsdav: ^2.2.2
|
tsdav: ^2.2.2
|
||||||
tsx: 4.20.4
|
tsx: 4.20.4
|
||||||
turbo: ^2.9.18
|
turbo: ^2.10.0
|
||||||
typescript: ^6.0.3
|
typescript: ^6.0.3
|
||||||
vite: ^8.0.16
|
vite: ^8.1.0
|
||||||
undici: 7.27.2
|
undici: 7.27.2
|
||||||
use-deep-compare-effect: ^1.8.1
|
use-deep-compare-effect: ^1.8.1
|
||||||
video.js: ^8.23.9
|
video.js: ^8.23.9
|
||||||
@@ -206,14 +206,14 @@ minimumReleaseAgeExclude:
|
|||||||
overrides:
|
overrides:
|
||||||
"@babel/helpers@<7.26.10": ">=7.29.7"
|
"@babel/helpers@<7.26.10": ">=7.29.7"
|
||||||
"@babel/runtime@<7.26.10": ">=7.29.7"
|
"@babel/runtime@<7.26.10": ">=7.29.7"
|
||||||
"axios@>=1.0.0 <1.8.2": ">=1.18.0"
|
"axios@>=1.0.0 <1.8.2": ">=1.18.1"
|
||||||
"brace-expansion@>=2.0.0 <=2.0.1": ">=5.0.6"
|
"brace-expansion@>=2.0.0 <=2.0.1": ">=5.0.6"
|
||||||
"brace-expansion@>=1.0.0 <=1.1.11": ">=5.0.6"
|
"brace-expansion@>=1.0.0 <=1.1.11": ">=5.0.6"
|
||||||
"esbuild@<=0.24.2": ">=0.28.0"
|
"esbuild@<=0.24.2": ">=0.28.0"
|
||||||
"form-data@>=4.0.0 <4.0.4": ">=4.0.6"
|
"form-data@>=4.0.0 <4.0.4": ">=4.0.6"
|
||||||
"hono@<4.6.5": ">=4.12.26"
|
"hono@<4.6.5": ">=4.12.27"
|
||||||
"linkifyjs@<4.3.2": ">=4.3.3"
|
"linkifyjs@<4.3.2": ">=4.3.3"
|
||||||
"nanoid@>=4.0.0 <5.0.9": ">=5.1.15"
|
"nanoid@>=4.0.0 <5.0.9": ">=5.1.16"
|
||||||
"prismjs@<1.30.0": ">=1.30.0"
|
"prismjs@<1.30.0": ">=1.30.0"
|
||||||
"proxmox-api>undici": "7.27.1"
|
"proxmox-api>undici": "7.27.1"
|
||||||
"react-is": "^19.2.7"
|
"react-is": "^19.2.7"
|
||||||
@@ -222,7 +222,7 @@ overrides:
|
|||||||
"tar-fs@>=3.0.0 <3.0.9": ">=3.1.2"
|
"tar-fs@>=3.0.0 <3.0.9": ">=3.1.2"
|
||||||
"tar-fs@>=2.0.0 <2.1.3": ">=3.1.2"
|
"tar-fs@>=2.0.0 <2.1.3": ">=3.1.2"
|
||||||
"tmp@<=0.2.3": ">=0.2.7"
|
"tmp@<=0.2.3": ">=0.2.7"
|
||||||
"vite@>=5.0.0 <=5.4.18": ">=8.0.16"
|
"vite@>=5.0.0 <=5.4.18": ">=8.1.0"
|
||||||
patchedDependencies:
|
patchedDependencies:
|
||||||
"@types/node-unifi": "patches/@types__node-unifi.patch"
|
"@types/node-unifi": "patches/@types__node-unifi.patch"
|
||||||
"trpc-to-openapi": "patches/trpc-to-openapi.patch"
|
"trpc-to-openapi": "patches/trpc-to-openapi.patch"
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ runs:
|
|||||||
- uses: pnpm/action-setup@v6
|
- uses: pnpm/action-setup@v6
|
||||||
- uses: actions/setup-node@v6
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: 24.17.0
|
node-version: 24.18.0
|
||||||
cache: "pnpm"
|
cache: "pnpm"
|
||||||
|
|
||||||
- shell: bash
|
- shell: bash
|
||||||
|
|||||||
Reference in new issue
Block a user