Compare commits

..
Author SHA1 Message Date
Releases Homarr 46ae756d15 chore(release): 1.68.1 [skip ci] 2026-06-30 12:02:44 +00:00
Thomas 8b63799f1b Merge pull request #6124 from homarr-labs/fix/source-maps-memory-regression
fix: make production source maps opt-in to restore v1.67.0 memory baseline
2026-06-30 14:01:42 +02:00
ajnart 60a69e31ef fix: revert production source maps to restore v1.67.0 memory baseline
CodeRabbit review addressed:
- Removed the env-var gating (simpler: just remove source maps entirely)
- CI health check now fails fast if container never becomes healthy

Changes vs origin/main:
- next.config.ts: remove productionBrowserSourceMaps and serverSourceMaps
  (they default to false, restoring pre-v1.68.0 behavior)
- Dockerfile: remove .map copy step and NODE_OPTIONS=--enable-source-maps
- CI: add memory-regression job (<700MB guardrail)

Closes #6123
2026-06-29 15:13:08 +02:00
ajnart 57ef0af4a2 fix: make source maps opt-in to restore v1.67.0 memory baseline
Production source maps (--enable-source-maps) caused a ~50% memory increase
(600MB to 1000MB) in v1.68.0. Node.js loads all .map files into memory when
this flag is enabled, and Next.js server chunks generate hundreds of map files.

Changes:
- Guard productionBrowserSourceMaps and serverSourceMaps behind
  HOMARR_ENABLE_SOURCE_MAPS env var (default off)
- Guard .map copy step and NODE_OPTIONS in Dockerfile behind
  ENABLE_SOURCE_MAPS build arg (default false)
- run.sh checks HOMARR_ENABLE_SOURCE_MAPS before setting --enable-source-maps
- Add Docker-based memory regression CI job (<700MB threshold)

Closes #6123
2026-06-29 10:08:52 +02:00
Thomas 597b5fbc8d Merge pull request #6097 from homarr-labs/docs/update-helm-docs
Update Helm chart documentation
2026-06-27 13:24:44 +02:00
github-actions[bot] 5412577519 docs(helm): Update Helm chart documentation 2026-06-27 11:22:16 +00:00
75 changed files with 1998 additions and 4402 deletions

No files matched your search

-1
View File
@@ -33,7 +33,6 @@ 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
@@ -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.18.0 node-version: 24.17.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
View File
@@ -1,2 +1,2 @@
[tools] [tools]
node = "24.18.0" node = "24.17.0"
+1 -1
View File
@@ -1 +1 @@
24.18.0 24.17.0
+4 -185
View File
@@ -1,193 +1,12 @@
# ── CODEOWNERS ─────────────────────────────────────── # ── CODEOWNERS ───────────────────────────────────────
* @homarr-labs/maintainers * @homarr-labs/maintainers
# Specific features / integrations # Specific features / integrations
# These owners come from the PR that introduced each integration implementation. # Glueten
# Specific rules override the global fallback because CODEOWNERS uses the last apps/docs/docs/integrations/glueten @Lok3sh-kumar
# 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
# Gotify - introduced in https://github.com/homarr-labs/homarr/pull/5847 by @Nerdy-Technician # Exempt Renovate‑managed files (no owners)
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 -1
View File
@@ -1,4 +1,4 @@
FROM node:24.18.0-alpine AS base FROM node:24.17.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
@@ -1,35 +0,0 @@
---
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: [],
},
]}
/>
@@ -1,9 +0,0 @@
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",
};
@@ -1,36 +0,0 @@
---
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: []
}]} />
@@ -1,8 +0,0 @@
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",
};
+1 -3
View File
@@ -63,9 +63,7 @@ import withoutIntegrations from './img/without-integrations.png';
### Interactions ### Interactions
- Hover over a marked date to preview its events in a popover. - View calendar events by clicking on the marked dates.
- 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
@@ -1,5 +1,3 @@
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";
@@ -18,7 +16,6 @@ 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;
@@ -33,33 +30,30 @@ 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 (
<> <>
<WidgetContextMenu item={item} widgetStateRef={widgetStateRef}> <Card
<Card ref={ref}
ref={ref} className={combineClasses(
className={combineClasses( classes.itemCard,
classes.itemCard, `${item.kind}-wrapper`,
`${item.kind}-wrapper`, "grid-stack-item-content",
"grid-stack-item-content", item.advancedOptions.customCssClasses.join(" "),
item.advancedOptions.customCssClasses.join(" "), )}
)} radius={board.itemRadius}
radius={board.itemRadius} styles={{
styles={{ root: {
root: { "--opacity": board.opacity / 100,
"--opacity": board.opacity / 100, containerType: "size",
containerType: "size", overflow: getOverflowFromKind(item.kind),
overflow: getOverflowFromKind(item.kind), "--border-color": item.advancedOptions.borderColor !== "" ? item.advancedOptions.borderColor : undefined,
"--border-color": item.advancedOptions.borderColor !== "" ? item.advancedOptions.borderColor : undefined, },
}, }}
}} p={0}
p={0} >
> <InnerContent item={item} width={width} height={height} />
<InnerContent item={item} width={width} height={height} widgetStateRef={widgetStateRef} /> </Card>
</Card>
</WidgetContextMenu>
{item.advancedOptions.title?.trim() && ( {item.advancedOptions.title?.trim() && (
<Badge <Badge
pos="absolute" pos="absolute"
@@ -89,7 +83,6 @@ 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) => {
@@ -1,250 +0,0 @@
"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 -1
View File
@@ -1,4 +1,4 @@
FROM node:24.18.0-trixie AS base FROM node:24.17.0-trixie AS base
WORKDIR /app WORKDIR /app
COPY package.json . COPY package.json .
COPY pnpm-lock.yaml . COPY pnpm-lock.yaml .
+3 -3
View File
@@ -5,8 +5,8 @@
"better-sqlite3": "^12.10.0" "better-sqlite3": "^12.10.0"
}, },
"engines": { "engines": {
"node": ">=24.18.0", "node": ">=24.17.0",
"pnpm": ">=11.9.0" "pnpm": ">=11.8.0"
}, },
"packageManager": "pnpm@11.9.0" "packageManager": "pnpm@11.8.0"
} }
+3 -3
View File
@@ -61,10 +61,10 @@
"vitest": "catalog:" "vitest": "catalog:"
}, },
"engines": { "engines": {
"node": ">=24.18.0", "node": ">=24.17.0",
"pnpm": ">=11.9.0" "pnpm": ">=11.8.0"
}, },
"packageManager": "pnpm@11.9.0", "packageManager": "pnpm@11.8.0",
"dependencies": { "dependencies": {
"jsonpath-plus": "catalog:" "jsonpath-plus": "catalog:"
} }
@@ -36,7 +36,6 @@ 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,7 +165,6 @@ 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"
@@ -312,7 +311,6 @@ 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,7 +27,6 @@ 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",
+1 -9
View File
@@ -251,14 +251,6 @@ 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"]],
@@ -510,7 +502,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: createDocumentationLink("/docs/integrations/archiveteam-warrior"), documentationUrl: null,
}, },
// 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,7 +33,6 @@ 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";
@@ -110,7 +109,6 @@ 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,
@@ -1,200 +0,0 @@
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());
}
}
@@ -1,98 +0,0 @@
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(),
}),
);
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"here": "", "here": "",
"iconPicker": { "iconPicker": {
"label": "", "label": "",
"header": "", "header": ""
"headerLoading": "",
"noResults": "",
"error": ""
}, },
"colorScheme": { "colorScheme": {
"options": { "options": {
@@ -1468,7 +1464,6 @@
"switchToDarkMode": "", "switchToDarkMode": "",
"switchToLightMode": "", "switchToLightMode": "",
"management": "", "management": "",
"docker": "",
"preferences": "", "preferences": "",
"logout": "", "logout": "",
"login": "", "login": "",
@@ -2357,9 +2352,6 @@
"name": "", "name": "",
"description": "", "description": "",
"option": { "option": {
"columns": {
"label": ""
},
"enableRowSorting": { "enableRowSorting": {
"label": "" "label": ""
}, },
@@ -2413,12 +2405,6 @@
"title": "" "title": ""
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"title": "", "title": "",
"text": "" "text": ""
}, },
"error": {
"title": "",
"text": "",
"digest": ""
},
"navbar": { "navbar": {
"items": { "items": {
"home": "", "home": "",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "", "internalServerError": ""
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"here": "这里", "here": "这里",
"iconPicker": { "iconPicker": {
"label": "图标 URL", "label": "图标 URL",
"header": "输入名称或对象来筛选图标… Homarr 将为您搜索 {countIcons} 图标。", "header": "输入名称或对象来筛选图标… Homarr 将为您搜索 {countIcons} 图标。"
"headerLoading": "",
"noResults": "",
"error": ""
}, },
"colorScheme": { "colorScheme": {
"options": { "options": {
@@ -1468,7 +1464,6 @@
"switchToDarkMode": "切换到暗黑模式", "switchToDarkMode": "切换到暗黑模式",
"switchToLightMode": "切换到日间模式", "switchToLightMode": "切换到日间模式",
"management": "管理中心", "management": "管理中心",
"docker": "",
"preferences": "偏好设置", "preferences": "偏好设置",
"logout": "退出登录", "logout": "退出登录",
"login": "登录", "login": "登录",
@@ -2357,9 +2352,6 @@
"name": "Docker 状态", "name": "Docker 状态",
"description": "您的容器状态 (这个小部件只能用管理员权限添加)", "description": "您的容器状态 (这个小部件只能用管理员权限添加)",
"option": { "option": {
"columns": {
"label": ""
},
"enableRowSorting": { "enableRowSorting": {
"label": "启用项目排序" "label": "启用项目排序"
}, },
@@ -2413,12 +2405,6 @@
"title": "实例" "title": "实例"
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"title": "未找到", "title": "未找到",
"text": "找不到请求的资源" "text": "找不到请求的资源"
}, },
"error": {
"title": "",
"text": "",
"digest": ""
},
"navbar": { "navbar": {
"items": { "items": {
"home": "首页", "home": "首页",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "Umami 活跃访客" "label": "Umami 活跃访客"
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "获取 Docker 容器失败", "internalServerError": "获取 Docker 容器失败"
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"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"
}, },
@@ -1413,10 +1412,7 @@
"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": {
@@ -1468,7 +1464,6 @@
"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",
@@ -2357,9 +2352,6 @@
"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"
}, },
@@ -2413,12 +2405,6 @@
"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",
@@ -3653,9 +3639,6 @@
"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",
@@ -3729,9 +3712,6 @@
} }
}, },
"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",
@@ -4153,11 +4133,6 @@
"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",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "crwdns4223:0crwdne4223:0" "label": "crwdns4223:0crwdne4223:0"
},
"vpn": {
"label": "crwdns5695:0crwdne5695:0"
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "crwdns2262:0crwdne2262:0", "internalServerError": "crwdns2262:0crwdne2262:0"
"noColumns": "crwdns5707:0crwdne5707:0"
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"here": "zde", "here": "zde",
"iconPicker": { "iconPicker": {
"label": "URL ikony", "label": "URL ikony",
"header": "", "header": ""
"headerLoading": "",
"noResults": "",
"error": ""
}, },
"colorScheme": { "colorScheme": {
"options": { "options": {
@@ -1468,7 +1464,6 @@
"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",
@@ -2357,9 +2352,6 @@
"name": "", "name": "",
"description": "", "description": "",
"option": { "option": {
"columns": {
"label": ""
},
"enableRowSorting": { "enableRowSorting": {
"label": "" "label": ""
}, },
@@ -2413,12 +2405,6 @@
"title": "" "title": ""
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"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",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "", "internalServerError": ""
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"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": {
@@ -1468,7 +1464,6 @@
"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",
@@ -2357,9 +2352,6 @@
"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"
}, },
@@ -2413,12 +2405,6 @@
"title": "Instanser" "title": "Instanser"
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"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",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "Kunne ikke hente Docker-containere", "internalServerError": "Kunne ikke hente Docker-containere"
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"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": {
@@ -1468,7 +1464,6 @@
"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",
@@ -2357,9 +2352,6 @@
"name": "", "name": "",
"description": "", "description": "",
"option": { "option": {
"columns": {
"label": ""
},
"enableRowSorting": { "enableRowSorting": {
"label": "" "label": ""
}, },
@@ -2413,12 +2405,6 @@
"title": "" "title": ""
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"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",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "Fehler beim Abrufen der Docker Container", "internalServerError": "Fehler beim Abrufen der Docker Container"
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+73 -102
View File
@@ -1021,7 +1021,6 @@
"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"
}, },
@@ -1413,10 +1412,7 @@
"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": {
@@ -1468,7 +1464,6 @@
"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",
@@ -2357,9 +2352,6 @@
"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"
}, },
@@ -2413,12 +2405,6 @@
"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",
@@ -3409,53 +3395,53 @@
}, },
"showNowPlaying": { "showNowPlaying": {
"label": "\"Sie hören\" anzeigen", "label": "\"Sie hören\" anzeigen",
"description": "Zeige aktuell gespielte Titel an (Navidrome)" "description": ""
}, },
"showNowPlayingList": { "showNowPlayingList": {
"label": "\"Sie hören jetzt\" Wiedergabeliste anzeigen", "label": "",
"description": "Einzelne Tracks anstelle der aktiven Streamanzahl anzeigen (Navidrome)" "description": ""
}, },
"maxNowPlayingItems": { "maxNowPlayingItems": {
"label": "Maximale jetzt abgespielte Elemente", "label": "",
"description": "Maximale Anzahl an Titeln, die in der \"Sie hören jetzt\" Wiedergabeliste angezeigt werden (Navidrome)" "description": ""
}, },
"showLibraryCount": { "showLibraryCount": {
"label": "Anzahl der Bibliotheken anzeigen", "label": "",
"description": "Zeige die Anzahl der Bibliotheken in deiner Instanz (Hörbücherregal)" "description": ""
}, },
"showAudiobooks": { "showAudiobooks": {
"label": "Hörbücher anzeigen", "label": "",
"description": "Zeige die Gesamtzahl der Hörbücher in allen Bibliotheken (Hörbücherregal)" "description": ""
}, },
"showPodcasts": { "showPodcasts": {
"label": "Podcasts anzeigen", "label": "",
"description": "Zeige die Gesamtzahl der Podcasts in allen Bibliotheken (Hörbücherregal)" "description": ""
}, },
"showListeningTime": { "showListeningTime": {
"label": "Hördauer anzeigen", "label": "",
"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": "Zeige die Anzahl der aktuell aktiven Wiedergabesitzungen (Hörbücherregal)" "description": ""
}, },
"compactMode": { "compactMode": {
"label": "Kompakter Modus", "label": "",
"description": "Verwenden Sie ein dichteres Layout mit kleineren Kacheln, ideal für kleine Widget-Größen" "description": ""
} }
}, },
"artists": "Künstler", "artists": "",
"albums": "Alben", "albums": "",
"songs": "Musik", "songs": "",
"libraryCount": "Bibliotheken", "libraryCount": "",
"audiobooks": "Hörbücher", "audiobooks": "",
"podcasts": "Podcasts", "podcasts": "",
"listeningTime": "Hördauer", "listeningTime": "",
"activeSessions": "Aktive Sitzungen", "activeSessions": "",
"nowPlaying": "Aktuelle Wiedergabe", "nowPlaying": "",
"nowPlayingCount": "{count, plural, one {# stream} other {# streams}}", "nowPlayingCount": "",
"error": { "error": {
"internalServerError": "Fehler beim Abrufen der Audio-Statistikdaten" "internalServerError": ""
} }
}, },
"systemResources": { "systemResources": {
@@ -3471,7 +3457,7 @@
"option": { "option": {
"cpu": "CPU", "cpu": "CPU",
"memory": "Speicher", "memory": "Speicher",
"gpu": "GPU", "gpu": "",
"network": "Netzwerk" "network": "Netzwerk"
} }
}, },
@@ -3488,7 +3474,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"
@@ -3524,93 +3510,93 @@
} }
}, },
"customApi": { "customApi": {
"name": "Benutzerdefinierte API", "name": "",
"description": "Zeigt Daten von jeder externen API mit benutzerdefinierter Konfiguration an.", "description": "",
"option": { "option": {
"definitionId": { "definitionId": {
"label": "Definitions ID" "label": ""
}, },
"refreshInterval": { "refreshInterval": {
"label": "Aktualisierungsintervall", "label": "",
"description": "Wie oft Daten von der API neu geladen werden sollen (in Sekunden)" "description": ""
} }
}, },
"noDefinition": "Keine Definition ausgewählt", "noDefinition": "",
"definitionNotFound": "Widget-Definition nicht gefunden. Möglicherweise wurde sie gelöscht.", "definitionNotFound": "",
"noDisplayOutput": "Keine Anzeige-Ausgabe", "noDisplayOutput": "",
"executeConfirm": "Bist du dir sicher, dass du diese Aktion ausführen möchtest?", "executeConfirm": "",
"executing": "Wird ausgeführt...", "executing": "",
"executeSuccess": "Aktion erfolgreich ausgeführt", "executeSuccess": "",
"executeFailed": "Aktion fehlgeschlagen. Überprüfen Sie die Widget-Konfiguration." "executeFailed": ""
}, },
"beszelSystemTable": { "beszelSystemTable": {
"name": "Beszel Systeme (Tabelle)", "name": "",
"description": "Tabellenansicht aller Beszel-überwachten Systeme mit sortierbaren Spalten und Statusindikatoren", "description": "",
"option": { "option": {
"statusFilter": { "statusFilter": {
"label": "Status Filter" "label": ""
}, },
"sortBy": { "sortBy": {
"label": "Sortieren nach" "label": ""
}, },
"sortDirection": { "sortDirection": {
"label": "Sortierreihenfolge" "label": ""
}, },
"showCpu": { "showCpu": {
"label": "CPU anzeigen" "label": ""
}, },
"showMemory": { "showMemory": {
"label": "Arbeitsspeicher anzeigen" "label": ""
}, },
"showDisk": { "showDisk": {
"label": "Datenträger anzeigen" "label": ""
}, },
"showGpu": { "showGpu": {
"label": "GPU anzeigen" "label": ""
}, },
"showLoadAvg": { "showLoadAvg": {
"label": "Zeige Belastungsdurchschnitt" "label": ""
}, },
"showNet": { "showNet": {
"label": "Netzwerk anzeigen" "label": ""
}, },
"showTemp": { "showTemp": {
"label": "Temperatur anzeigen" "label": ""
}, },
"showBattery": { "showBattery": {
"label": "Akkustand anzeigen" "label": ""
}, },
"showServices": { "showServices": {
"label": "Dienste anzeigen" "label": ""
}, },
"showUptime": { "showUptime": {
"label": "Laufzeit anzeigen" "label": ""
}, },
"showAgent": { "showAgent": {
"label": "Agent-Version anzeigen" "label": ""
} }
}, },
"noRecords": "Keine Systeme gefunden", "noRecords": "",
"error": { "error": {
"internalServerError": "Keine Verbindung zu Beszel. Überprüfen Sie Ihre Integrationseinstellungen." "internalServerError": ""
}, },
"column": { "column": {
"system": "System", "system": "",
"cpu": "CPU", "cpu": "",
"memory": "Arbeitsspeicher", "memory": "",
"disk": "Datenträger", "disk": "",
"gpu": "GPU", "gpu": "",
"loadAvg": "Systemlast", "loadAvg": "",
"net": "Netz", "net": "",
"temp": "Temperatur", "temp": "",
"battery": "Batterie", "battery": "",
"services": "Dienste", "services": "",
"uptime": "Betriebszeit", "uptime": "",
"agent": "Agent" "agent": ""
} }
}, },
"beszelSystemGrid": { "beszelSystemGrid": {
"name": "Beszel Systems (Grid)", "name": "",
"description": "", "description": "",
"option": { "option": {
"statusFilter": { "statusFilter": {
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "CPU", "cpu": "CPU",
"memory": "Arbeitsspeicher", "memory": "Arbeitsspeicher",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "System auswählen", "selectSystem": "System auswählen",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"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",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "Fehler beim Abrufen der Docker Container", "internalServerError": "Fehler beim Abrufen der Docker Container"
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"here": "εδώ", "here": "εδώ",
"iconPicker": { "iconPicker": {
"label": "", "label": "",
"header": "", "header": ""
"headerLoading": "",
"noResults": "",
"error": ""
}, },
"colorScheme": { "colorScheme": {
"options": { "options": {
@@ -1468,7 +1464,6 @@
"switchToDarkMode": "Εναλλαγή σε σκοτεινή λειτουργία", "switchToDarkMode": "Εναλλαγή σε σκοτεινή λειτουργία",
"switchToLightMode": "Εναλλαγή σε φωτεινή λειτουργία", "switchToLightMode": "Εναλλαγή σε φωτεινή λειτουργία",
"management": "Διαχείριση", "management": "Διαχείριση",
"docker": "",
"preferences": "Οι ρυθμίσεις σας", "preferences": "Οι ρυθμίσεις σας",
"logout": "Αποσύνδεση", "logout": "Αποσύνδεση",
"login": "Σύνδεση", "login": "Σύνδεση",
@@ -2357,9 +2352,6 @@
"name": "Στατιστικά Docker", "name": "Στατιστικά Docker",
"description": "", "description": "",
"option": { "option": {
"columns": {
"label": ""
},
"enableRowSorting": { "enableRowSorting": {
"label": "" "label": ""
}, },
@@ -2413,12 +2405,6 @@
"title": "" "title": ""
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"title": "", "title": "",
"text": "" "text": ""
}, },
"error": {
"title": "",
"text": "",
"digest": ""
},
"navbar": { "navbar": {
"items": { "items": {
"home": "Αρχική", "home": "Αρχική",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "", "internalServerError": ""
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"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": {
@@ -1468,7 +1464,6 @@
"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",
@@ -2357,9 +2352,6 @@
"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"
}, },
@@ -2413,12 +2405,6 @@
"title": "Instances" "title": "Instances"
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"title": "", "title": "",
"text": "" "text": ""
}, },
"error": {
"title": "",
"text": "",
"digest": ""
},
"navbar": { "navbar": {
"items": { "items": {
"home": "", "home": "",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "", "internalServerError": ""
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+3 -9
View File
@@ -1598,9 +1598,7 @@
}, },
"menu": { "menu": {
"label": { "label": {
"settings": "Settings", "settings": "Settings"
"options": "Options",
"actions": "Actions"
} }
}, },
"create": { "create": {
@@ -2359,9 +2357,6 @@
"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"
}, },
@@ -4313,7 +4308,7 @@
"notStarted": "Not started" "notStarted": "Not started"
}, },
"name": { "name": {
"management": "Management", "management": "Management",
"dashboard": "Dashboard" "dashboard": "Dashboard"
} }
} }
@@ -5101,8 +5096,7 @@
} }
}, },
"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": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"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": {
@@ -1468,7 +1464,6 @@
"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",
@@ -2357,9 +2352,6 @@
"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"
}, },
@@ -2413,12 +2405,6 @@
"title": "Instancias" "title": "Instancias"
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"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",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "Fallo al obtener los contenedores de Docker", "internalServerError": "Fallo al obtener los contenedores de Docker"
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"here": "", "here": "",
"iconPicker": { "iconPicker": {
"label": "", "label": "",
"header": "", "header": ""
"headerLoading": "",
"noResults": "",
"error": ""
}, },
"colorScheme": { "colorScheme": {
"options": { "options": {
@@ -1468,7 +1464,6 @@
"switchToDarkMode": "", "switchToDarkMode": "",
"switchToLightMode": "", "switchToLightMode": "",
"management": "", "management": "",
"docker": "",
"preferences": "Teie eelistused", "preferences": "Teie eelistused",
"logout": "", "logout": "",
"login": "", "login": "",
@@ -2357,9 +2352,6 @@
"name": "", "name": "",
"description": "", "description": "",
"option": { "option": {
"columns": {
"label": ""
},
"enableRowSorting": { "enableRowSorting": {
"label": "" "label": ""
}, },
@@ -2413,12 +2405,6 @@
"title": "" "title": ""
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"title": "", "title": "",
"text": "" "text": ""
}, },
"error": {
"title": "",
"text": "",
"digest": ""
},
"navbar": { "navbar": {
"items": { "items": {
"home": "", "home": "",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "", "internalServerError": ""
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+3 -32
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "Valvonta", "mediaMonitoring": "Valvonta",
"speedtest": "Nopeustestaus", "speedtest": "Nopeustestaus",
"analytics": "Analytiikka", "analytics": "Analytiikka",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1045,7 +1044,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": "Tunnistautumisvirhe", "title": "Tuonnistautumisvirhe",
"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": {
@@ -1413,10 +1412,7 @@
"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": {
@@ -1468,7 +1464,6 @@
"switchToDarkMode": "", "switchToDarkMode": "",
"switchToLightMode": "", "switchToLightMode": "",
"management": "Hallinta", "management": "Hallinta",
"docker": "",
"preferences": "Asetuksesi", "preferences": "Asetuksesi",
"logout": "Kirjaudu ulos", "logout": "Kirjaudu ulos",
"login": "", "login": "",
@@ -2357,9 +2352,6 @@
"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"
}, },
@@ -2413,12 +2405,6 @@
"title": "" "title": ""
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"title": "", "title": "",
"text": "" "text": ""
}, },
"error": {
"title": "",
"text": "",
"digest": ""
},
"navbar": { "navbar": {
"items": { "items": {
"home": "Aloitus", "home": "Aloitus",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "Umamin aktiiviset käyttäjät" "label": "Umamin aktiiviset käyttäjät"
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "", "internalServerError": ""
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"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": {
@@ -1468,7 +1464,6 @@
"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",
@@ -2357,9 +2352,6 @@
"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"
}, },
@@ -2413,12 +2405,6 @@
"title": "Instances" "title": "Instances"
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"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",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "Impossible de récupérer les conteneurs Docker", "internalServerError": "Impossible de récupérer les conteneurs Docker"
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"here": "כאן", "here": "כאן",
"iconPicker": { "iconPicker": {
"label": "קישור של הסמל", "label": "קישור של הסמל",
"header": "הקלד שם או אובייקטים לסינון עבור אייקונים... Homarr יחפש עבורך סמלים של {countIcons} .", "header": "הקלד שם או אובייקטים לסינון עבור אייקונים... Homarr יחפש עבורך סמלים של {countIcons} ."
"headerLoading": "",
"noResults": "",
"error": ""
}, },
"colorScheme": { "colorScheme": {
"options": { "options": {
@@ -1468,7 +1464,6 @@
"switchToDarkMode": "עבור למצב כהה", "switchToDarkMode": "עבור למצב כהה",
"switchToLightMode": "עבור למצב בהיר", "switchToLightMode": "עבור למצב בהיר",
"management": "ניהול", "management": "ניהול",
"docker": "",
"preferences": "העדפות שלך", "preferences": "העדפות שלך",
"logout": "התנתק/י", "logout": "התנתק/י",
"login": "התחבר/י", "login": "התחבר/י",
@@ -2357,9 +2352,6 @@
"name": "סטטיסטיקות דוקר", "name": "סטטיסטיקות דוקר",
"description": "סטטיסטיקות של המכולות שלך (ניתן להוסיף ווידג'ט זה רק עם הרשאות מנהל)", "description": "סטטיסטיקות של המכולות שלך (ניתן להוסיף ווידג'ט זה רק עם הרשאות מנהל)",
"option": { "option": {
"columns": {
"label": ""
},
"enableRowSorting": { "enableRowSorting": {
"label": "אפשר מיון פריטים" "label": "אפשר מיון פריטים"
}, },
@@ -2413,12 +2405,6 @@
"title": "" "title": ""
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"title": "לא נמצא", "title": "לא נמצא",
"text": "לא ניתן לאתר את המשאב המבוקש" "text": "לא ניתן לאתר את המשאב המבוקש"
}, },
"error": {
"title": "",
"text": "",
"digest": ""
},
"navbar": { "navbar": {
"items": { "items": {
"home": "מסך הבית", "home": "מסך הבית",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "נכשל בקבלת קונטיינרי דוקר", "internalServerError": "נכשל בקבלת קונטיינרי דוקר"
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"here": "", "here": "",
"iconPicker": { "iconPicker": {
"label": "", "label": "",
"header": "", "header": ""
"headerLoading": "",
"noResults": "",
"error": ""
}, },
"colorScheme": { "colorScheme": {
"options": { "options": {
@@ -1468,7 +1464,6 @@
"switchToDarkMode": "", "switchToDarkMode": "",
"switchToLightMode": "", "switchToLightMode": "",
"management": "", "management": "",
"docker": "",
"preferences": "Vaše preferencije", "preferences": "Vaše preferencije",
"logout": "", "logout": "",
"login": "Prijaviti se", "login": "Prijaviti se",
@@ -2357,9 +2352,6 @@
"name": "", "name": "",
"description": "", "description": "",
"option": { "option": {
"columns": {
"label": ""
},
"enableRowSorting": { "enableRowSorting": {
"label": "" "label": ""
}, },
@@ -2413,12 +2405,6 @@
"title": "" "title": ""
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"title": "", "title": "",
"text": "" "text": ""
}, },
"error": {
"title": "",
"text": "",
"digest": ""
},
"navbar": { "navbar": {
"items": { "items": {
"home": "Dom", "home": "Dom",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "", "internalServerError": ""
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"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": {
@@ -1468,7 +1464,6 @@
"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",
@@ -2357,9 +2352,6 @@
"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"
}, },
@@ -2413,12 +2405,6 @@
"title": "Példányok" "title": "Példányok"
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"title": "", "title": "",
"text": "" "text": ""
}, },
"error": {
"title": "",
"text": "",
"digest": ""
},
"navbar": { "navbar": {
"items": { "items": {
"home": "Nyitólap", "home": "Nyitólap",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "", "internalServerError": ""
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"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"
}, },
@@ -1413,10 +1412,7 @@
"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": {
@@ -1468,7 +1464,6 @@
"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",
@@ -2357,9 +2352,6 @@
"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"
}, },
@@ -2413,12 +2405,6 @@
"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",
@@ -3653,9 +3639,6 @@
"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",
@@ -3729,9 +3712,6 @@
} }
}, },
"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.",
@@ -4153,11 +4133,6 @@
"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",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "Visitatori Attivi Umami" "label": "Visitatori Attivi Umami"
},
"vpn": {
"label": "Stato VPN"
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"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": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"here": "こちら", "here": "こちら",
"iconPicker": { "iconPicker": {
"label": "アイコン URL", "label": "アイコン URL",
"header": "アイコンをフィルタするために、名前またはオブジェクトを入力してください... Homarrは {countIcons} アイコンを検索します。", "header": "アイコンをフィルタするために、名前またはオブジェクトを入力してください... Homarrは {countIcons} アイコンを検索します。"
"headerLoading": "",
"noResults": "",
"error": ""
}, },
"colorScheme": { "colorScheme": {
"options": { "options": {
@@ -1468,7 +1464,6 @@
"switchToDarkMode": "ダークモードに切り替え", "switchToDarkMode": "ダークモードに切り替え",
"switchToLightMode": "ライトモードに切り替え", "switchToLightMode": "ライトモードに切り替え",
"management": "管理", "management": "管理",
"docker": "",
"preferences": "個人設定", "preferences": "個人設定",
"logout": "ログアウト", "logout": "ログアウト",
"login": "ログイン", "login": "ログイン",
@@ -2357,9 +2352,6 @@
"name": "Dockerのステータス", "name": "Dockerのステータス",
"description": "あなたのコンテナの統計(このウィジェットは管理者権限でのみ追加できます)", "description": "あなたのコンテナの統計(このウィジェットは管理者権限でのみ追加できます)",
"option": { "option": {
"columns": {
"label": ""
},
"enableRowSorting": { "enableRowSorting": {
"label": "アイテムの並び替えを有効にする" "label": "アイテムの並び替えを有効にする"
}, },
@@ -2413,12 +2405,6 @@
"title": "インスタンス" "title": "インスタンス"
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"title": "見つかりません", "title": "見つかりません",
"text": "要求されたリソースが見つかりませんでした" "text": "要求されたリソースが見つかりませんでした"
}, },
"error": {
"title": "",
"text": "",
"digest": ""
},
"navbar": { "navbar": {
"items": { "items": {
"home": "ホーム", "home": "ホーム",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "Docker コンテナの取得に失敗しました", "internalServerError": "Docker コンテナの取得に失敗しました"
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+58 -87
View File
@@ -288,10 +288,10 @@
"changePingIconsEnabled": { "changePingIconsEnabled": {
"notification": { "notification": {
"success": { "success": {
"message": "Ping 아이콘 전환 완료" "message": ""
}, },
"error": { "error": {
"message": "Ping 아이콘을 전환할 수 없습니다" "message": ""
} }
} }
}, },
@@ -701,56 +701,56 @@
}, },
"action": { "action": {
"create": "생성", "create": "생성",
"import": "가져오기", "import": "",
"save": "저장", "save": "",
"delete": "사용자 지정 위젯 삭제", "delete": "",
"deleteConfirm": "\"{name}\"을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.", "deleteConfirm": "",
"export": "내보내기", "export": "",
"addMapping": "매핑 추가", "addMapping": "",
"addColumn": "열 추가", "addColumn": "",
"edit": "편집", "edit": "",
"removeMapping": "매핑 제거", "removeMapping": "",
"removeColumn": "열 제거", "removeColumn": "",
"addItem": "항목 추가", "addItem": "",
"removeItem": "항목 제거", "removeItem": "",
"addBar": "바 추가", "addBar": "",
"duplicate": "복사", "duplicate": "",
"copyAiPrompt": "AI 프롬프트 복사", "copyAiPrompt": "",
"enable": "활성화", "enable": "",
"disable": "비활성화", "disable": "",
"menu": "동작" "menu": ""
}, },
"field": { "field": {
"name": "이름", "name": "",
"description": "설명", "description": "",
"iconUrl": "아이콘 URL", "iconUrl": "",
"url": "URL", "url": "",
"authType": "인증 유형", "authType": "",
"headerName": "헤더/쿼리 파라미터 이름", "headerName": "",
"method": "메서드", "method": "",
"requestBody": "요청 본문", "requestBody": "",
"displayType": "표시 유형", "displayType": "",
"jsonPath": "JSON 경로", "jsonPath": "",
"jsonPathHint": "JSONPath 문법으로 값을 추출하십시오. 예: $.data.temperature 또는 $.items[0].name", "jsonPathHint": "",
"label": "레이블", "label": "",
"unit": "단위", "unit": "",
"mappings": "매핑", "mappings": "",
"tablePath": "JSON 경로 배열", "tablePath": "",
"tablePathHint": "응답에서 배열이 위치한 경로입니다. 예: $.data.items", "tablePathHint": "",
"columns": "열", "columns": "",
"header": "헤더", "header": "",
"items": "항목", "items": "",
"gridColumns": "그리드 열 개수", "gridColumns": "",
"cardStyle": "카드 스타일", "cardStyle": "",
"bars": "바", "bars": "",
"valuePath": "JSON 경로 값", "valuePath": "",
"maxPath": "JSON 경로 최댓값", "maxPath": "",
"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": "현재 설정으로 API 응답을 미리 보려면 테스트를 클릭하십시오.", "hint": "",
"rawResponse": "원본 JSON 응답" "rawResponse": ""
}, },
"notification": { "notification": {
"created": "\"{name}\" 위젯 생성 완료.", "created": "\"{name}\" 위젯 생성 완료.",
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "모니터링", "mediaMonitoring": "모니터링",
"speedtest": "속도 테스트", "speedtest": "속도 테스트",
"analytics": "분석", "analytics": "분석",
"vpn": "",
"mediaLibrary": "미디어 라이브러리", "mediaLibrary": "미디어 라이브러리",
"uptimeMonitoring": "업타임 모니터링" "uptimeMonitoring": "업타임 모니터링"
}, },
@@ -1413,10 +1412,7 @@
"here": "여기", "here": "여기",
"iconPicker": { "iconPicker": {
"label": "아이콘 URL", "label": "아이콘 URL",
"header": "이름 또는 주제를 입력해 아이콘을 필터링하세요... Homarr가 {countIcons}에서 아이콘을 검색합니다.", "header": "이름 또는 주제를 입력해 아이콘을 필터링하세요... Homarr가 {countIcons}에서 아이콘을 검색합니다."
"headerLoading": "",
"noResults": "",
"error": ""
}, },
"colorScheme": { "colorScheme": {
"options": { "options": {
@@ -1468,7 +1464,6 @@
"switchToDarkMode": "다크 모드로 전환", "switchToDarkMode": "다크 모드로 전환",
"switchToLightMode": "라이트 모드로 전환", "switchToLightMode": "라이트 모드로 전환",
"management": "관리", "management": "관리",
"docker": "",
"preferences": "기본 설정", "preferences": "기본 설정",
"logout": "로그아웃", "logout": "로그아웃",
"login": "로그인", "login": "로그인",
@@ -2357,9 +2352,6 @@
"name": "", "name": "",
"description": "", "description": "",
"option": { "option": {
"columns": {
"label": ""
},
"enableRowSorting": { "enableRowSorting": {
"label": "" "label": ""
}, },
@@ -2413,12 +2405,6 @@
"title": "" "title": ""
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"title": "찾을 수 없음", "title": "찾을 수 없음",
"text": "요청한 리소스를 찾을 수 없습니다" "text": "요청한 리소스를 찾을 수 없습니다"
}, },
"error": {
"title": "",
"text": "",
"digest": ""
},
"navbar": { "navbar": {
"items": { "items": {
"home": "홈", "home": "홈",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "", "internalServerError": ""
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"here": "", "here": "",
"iconPicker": { "iconPicker": {
"label": "", "label": "",
"header": "", "header": ""
"headerLoading": "",
"noResults": "",
"error": ""
}, },
"colorScheme": { "colorScheme": {
"options": { "options": {
@@ -1468,7 +1464,6 @@
"switchToDarkMode": "", "switchToDarkMode": "",
"switchToLightMode": "", "switchToLightMode": "",
"management": "", "management": "",
"docker": "",
"preferences": "", "preferences": "",
"logout": "", "logout": "",
"login": "Prisijungti", "login": "Prisijungti",
@@ -2357,9 +2352,6 @@
"name": "", "name": "",
"description": "", "description": "",
"option": { "option": {
"columns": {
"label": ""
},
"enableRowSorting": { "enableRowSorting": {
"label": "" "label": ""
}, },
@@ -2413,12 +2405,6 @@
"title": "" "title": ""
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"title": "", "title": "",
"text": "" "text": ""
}, },
"error": {
"title": "",
"text": "",
"digest": ""
},
"navbar": { "navbar": {
"items": { "items": {
"home": "Pagrindinis", "home": "Pagrindinis",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "", "internalServerError": ""
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"here": "", "here": "",
"iconPicker": { "iconPicker": {
"label": "", "label": "",
"header": "", "header": ""
"headerLoading": "",
"noResults": "",
"error": ""
}, },
"colorScheme": { "colorScheme": {
"options": { "options": {
@@ -1468,7 +1464,6 @@
"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",
@@ -2357,9 +2352,6 @@
"name": "", "name": "",
"description": "", "description": "",
"option": { "option": {
"columns": {
"label": ""
},
"enableRowSorting": { "enableRowSorting": {
"label": "" "label": ""
}, },
@@ -2413,12 +2405,6 @@
"title": "" "title": ""
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"title": "", "title": "",
"text": "" "text": ""
}, },
"error": {
"title": "",
"text": "",
"digest": ""
},
"navbar": { "navbar": {
"items": { "items": {
"home": "Sākums", "home": "Sākums",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "", "internalServerError": ""
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"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": {
@@ -1468,7 +1464,6 @@
"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",
@@ -2357,9 +2352,6 @@
"name": "Docker statistieken", "name": "Docker statistieken",
"description": "", "description": "",
"option": { "option": {
"columns": {
"label": ""
},
"enableRowSorting": { "enableRowSorting": {
"label": "" "label": ""
}, },
@@ -2413,12 +2405,6 @@
"title": "" "title": ""
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"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",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "Docker-containers zijn niet opgehaald", "internalServerError": "Docker-containers zijn niet opgehaald"
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"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": {
@@ -1468,7 +1464,6 @@
"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",
@@ -2357,9 +2352,6 @@
"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"
}, },
@@ -2413,12 +2405,6 @@
"title": "Instanser" "title": "Instanser"
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"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",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "Umami Aktive Besøkende" "label": "Umami Aktive Besøkende"
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"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
+2 -31
View File
@@ -1021,7 +1021,6 @@
"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"
}, },
@@ -1413,10 +1412,7 @@
"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": {
@@ -1468,7 +1464,6 @@
"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”",
@@ -2357,9 +2352,6 @@
"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"
}, },
@@ -2413,12 +2405,6 @@
"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",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"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",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "Visitantes Ativos do Umami" "label": "Visitantes Ativos do Umami"
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "Falha ao buscar contêineres Docker", "internalServerError": "Falha ao buscar contêineres Docker"
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"here": "", "here": "",
"iconPicker": { "iconPicker": {
"label": "", "label": "",
"header": "", "header": ""
"headerLoading": "",
"noResults": "",
"error": ""
}, },
"colorScheme": { "colorScheme": {
"options": { "options": {
@@ -1468,7 +1464,6 @@
"switchToDarkMode": "", "switchToDarkMode": "",
"switchToLightMode": "", "switchToLightMode": "",
"management": "", "management": "",
"docker": "",
"preferences": "", "preferences": "",
"logout": "", "logout": "",
"login": "", "login": "",
@@ -2357,9 +2352,6 @@
"name": "", "name": "",
"description": "", "description": "",
"option": { "option": {
"columns": {
"label": ""
},
"enableRowSorting": { "enableRowSorting": {
"label": "" "label": ""
}, },
@@ -2413,12 +2405,6 @@
"title": "" "title": ""
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"title": "", "title": "",
"text": "" "text": ""
}, },
"error": {
"title": "",
"text": "",
"digest": ""
},
"navbar": { "navbar": {
"items": { "items": {
"home": "", "home": "",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "", "internalServerError": ""
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"here": "", "here": "",
"iconPicker": { "iconPicker": {
"label": "", "label": "",
"header": "", "header": ""
"headerLoading": "",
"noResults": "",
"error": ""
}, },
"colorScheme": { "colorScheme": {
"options": { "options": {
@@ -1468,7 +1464,6 @@
"switchToDarkMode": "", "switchToDarkMode": "",
"switchToLightMode": "", "switchToLightMode": "",
"management": "", "management": "",
"docker": "",
"preferences": "Preferințele dvs.", "preferences": "Preferințele dvs.",
"logout": "", "logout": "",
"login": "Utilizator", "login": "Utilizator",
@@ -2357,9 +2352,6 @@
"name": "", "name": "",
"description": "", "description": "",
"option": { "option": {
"columns": {
"label": ""
},
"enableRowSorting": { "enableRowSorting": {
"label": "" "label": ""
}, },
@@ -2413,12 +2405,6 @@
"title": "" "title": ""
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"title": "", "title": "",
"text": "" "text": ""
}, },
"error": {
"title": "",
"text": "",
"digest": ""
},
"navbar": { "navbar": {
"items": { "items": {
"home": "Acasă", "home": "Acasă",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "", "internalServerError": ""
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"here": "здесь", "here": "здесь",
"iconPicker": { "iconPicker": {
"label": "URL иконки", "label": "URL иконки",
"header": "Введите название или объекты для фильтрации иконок... Homarr найдёт для вас среди {countIcons} иконок.", "header": "Введите название или объекты для фильтрации иконок... Homarr найдёт для вас среди {countIcons} иконок."
"headerLoading": "",
"noResults": "",
"error": ""
}, },
"colorScheme": { "colorScheme": {
"options": { "options": {
@@ -1468,7 +1464,6 @@
"switchToDarkMode": "Переключить на тёмную тему", "switchToDarkMode": "Переключить на тёмную тему",
"switchToLightMode": "Переключить на светлую тему", "switchToLightMode": "Переключить на светлую тему",
"management": "Управление", "management": "Управление",
"docker": "",
"preferences": "Настройки", "preferences": "Настройки",
"logout": "Выйти", "logout": "Выйти",
"login": "Вход", "login": "Вход",
@@ -2357,9 +2352,6 @@
"name": "Статистика Docker", "name": "Статистика Docker",
"description": "Статистика контейнеров (этот виджет можно добавить только с правами администратора)", "description": "Статистика контейнеров (этот виджет можно добавить только с правами администратора)",
"option": { "option": {
"columns": {
"label": ""
},
"enableRowSorting": { "enableRowSorting": {
"label": "Включить сортировку элементов" "label": "Включить сортировку элементов"
}, },
@@ -2413,12 +2405,6 @@
"title": "Экземпляры" "title": "Экземпляры"
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"title": "Не найдено", "title": "Не найдено",
"text": "Запрошенный ресурс не найден" "text": "Запрошенный ресурс не найден"
}, },
"error": {
"title": "",
"text": "",
"digest": ""
},
"navbar": { "navbar": {
"items": { "items": {
"home": "Главная", "home": "Главная",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "Произошла ошибка при обновлении данных о контейнерах", "internalServerError": "Произошла ошибка при обновлении данных о контейнерах"
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"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": {
@@ -1468,7 +1464,6 @@
"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",
@@ -2357,9 +2352,6 @@
"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": ""
}, },
@@ -2413,12 +2405,6 @@
"title": "" "title": ""
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"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",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "Nepodarilo sa načítať kontajnery Docker", "internalServerError": "Nepodarilo sa načítať kontajnery Docker"
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"here": "", "here": "",
"iconPicker": { "iconPicker": {
"label": "", "label": "",
"header": "", "header": ""
"headerLoading": "",
"noResults": "",
"error": ""
}, },
"colorScheme": { "colorScheme": {
"options": { "options": {
@@ -1468,7 +1464,6 @@
"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",
@@ -2357,9 +2352,6 @@
"name": "", "name": "",
"description": "", "description": "",
"option": { "option": {
"columns": {
"label": ""
},
"enableRowSorting": { "enableRowSorting": {
"label": "" "label": ""
}, },
@@ -2413,12 +2405,6 @@
"title": "" "title": ""
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"title": "", "title": "",
"text": "" "text": ""
}, },
"error": {
"title": "",
"text": "",
"digest": ""
},
"navbar": { "navbar": {
"items": { "items": {
"home": "Domov", "home": "Domov",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "", "internalServerError": ""
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"here": "", "here": "",
"iconPicker": { "iconPicker": {
"label": "", "label": "",
"header": "", "header": ""
"headerLoading": "",
"noResults": "",
"error": ""
}, },
"colorScheme": { "colorScheme": {
"options": { "options": {
@@ -1468,7 +1464,6 @@
"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",
@@ -2357,9 +2352,6 @@
"name": "", "name": "",
"description": "", "description": "",
"option": { "option": {
"columns": {
"label": ""
},
"enableRowSorting": { "enableRowSorting": {
"label": "" "label": ""
}, },
@@ -2413,12 +2405,6 @@
"title": "" "title": ""
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"title": "Hittades ej", "title": "Hittades ej",
"text": "" "text": ""
}, },
"error": {
"title": "",
"text": "",
"digest": ""
},
"navbar": { "navbar": {
"items": { "items": {
"home": "Hem", "home": "Hem",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "", "internalServerError": ""
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"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": {
@@ -1468,7 +1464,6 @@
"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ş",
@@ -2357,9 +2352,6 @@
"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"
}, },
@@ -2413,12 +2405,6 @@
"title": "Instances" "title": "Instances"
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"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",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "Docker konteynerlerları getirilemedi", "internalServerError": "Docker konteynerlerları getirilemedi"
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+10 -39
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "Медіа бібліотека", "mediaLibrary": "Медіа бібліотека",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"here": "тут", "here": "тут",
"iconPicker": { "iconPicker": {
"label": "", "label": "",
"header": "", "header": ""
"headerLoading": "",
"noResults": "",
"error": ""
}, },
"colorScheme": { "colorScheme": {
"options": { "options": {
@@ -1468,7 +1464,6 @@
"switchToDarkMode": "Перемикнути на темну тему", "switchToDarkMode": "Перемикнути на темну тему",
"switchToLightMode": "Перемикнути на світлу тему", "switchToLightMode": "Перемикнути на світлу тему",
"management": "Управління", "management": "Управління",
"docker": "",
"preferences": "Ваші налаштування", "preferences": "Ваші налаштування",
"logout": "Вийти", "logout": "Вийти",
"login": "Логін", "login": "Логін",
@@ -1943,7 +1938,7 @@
"addTable": "Додати таблицю", "addTable": "Додати таблицю",
"deleteTable": "Видалити таблицю", "deleteTable": "Видалити таблицю",
"colorCell": "", "colorCell": "",
"mergeCell": "Ввімкнути/вимкнути об'єднання клітини", "mergeCell": "",
"addColumnLeft": "", "addColumnLeft": "",
"addColumnRight": "", "addColumnRight": "",
"deleteColumn": "", "deleteColumn": "",
@@ -2106,13 +2101,13 @@
"label": "" "label": ""
}, },
"1y": { "1y": {
"label": "1 рік" "label": ""
}, },
"2y": { "2y": {
"label": "" "label": ""
}, },
"5y": { "5y": {
"label": "5 років" "label": ""
}, },
"10y": { "10y": {
"label": "" "label": ""
@@ -2147,7 +2142,7 @@
"label": "" "label": ""
}, },
"1mo": { "1mo": {
"label": "1 місяць" "label": ""
} }
} }
} }
@@ -2187,7 +2182,7 @@
"label": "Температура за Фаренгейтом" "label": "Температура за Фаренгейтом"
}, },
"disableTemperatureDecimals": { "disableTemperatureDecimals": {
"label": "Вимкнути десяткові дроби температури" "label": ""
}, },
"showCurrentWindSpeed": { "showCurrentWindSpeed": {
"label": "Показати поточну швидкість вітру", "label": "Показати поточну швидкість вітру",
@@ -2357,9 +2352,6 @@
"name": "", "name": "",
"description": "", "description": "",
"option": { "option": {
"columns": {
"label": ""
},
"enableRowSorting": { "enableRowSorting": {
"label": "" "label": ""
}, },
@@ -2367,7 +2359,7 @@
"label": "", "label": "",
"option": { "option": {
"name": "", "name": "",
"state": "Стан", "state": "",
"cpuUsage": "", "cpuUsage": "",
"memoryUsage": "" "memoryUsage": ""
} }
@@ -2413,12 +2405,6 @@
"title": "" "title": ""
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -2484,7 +2470,7 @@
"videoDecision": { "videoDecision": {
"directPlay": "", "directPlay": "",
"transcode": "", "transcode": "",
"directStream": "Прямий потік" "directStream": ""
} }
}, },
"recentActivity": { "recentActivity": {
@@ -2564,7 +2550,7 @@
"label": "", "label": "",
"description": "", "description": "",
"option": { "option": {
"chart": "Графік", "chart": "",
"events": "", "events": "",
"topPages": "", "topPages": "",
"topReferrers": "" "topReferrers": ""
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"title": "Не знайдено", "title": "Не знайдено",
"text": "Не вдалося знайти запитуваний ресурс" "text": "Не вдалося знайти запитуваний ресурс"
}, },
"error": {
"title": "",
"text": "",
"digest": ""
},
"navbar": { "navbar": {
"items": { "items": {
"home": "Головна", "home": "Головна",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "", "internalServerError": ""
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"here": "", "here": "",
"iconPicker": { "iconPicker": {
"label": "", "label": "",
"header": "", "header": ""
"headerLoading": "",
"noResults": "",
"error": ""
}, },
"colorScheme": { "colorScheme": {
"options": { "options": {
@@ -1468,7 +1464,6 @@
"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",
@@ -2357,9 +2352,6 @@
"name": "", "name": "",
"description": "", "description": "",
"option": { "option": {
"columns": {
"label": ""
},
"enableRowSorting": { "enableRowSorting": {
"label": "" "label": ""
}, },
@@ -2413,12 +2405,6 @@
"title": "" "title": ""
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"title": "", "title": "",
"text": "" "text": ""
}, },
"error": {
"title": "",
"text": "",
"digest": ""
},
"navbar": { "navbar": {
"items": { "items": {
"home": "Trang chủ", "home": "Trang chủ",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "", "internalServerError": ""
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+2 -31
View File
@@ -1021,7 +1021,6 @@
"mediaMonitoring": "", "mediaMonitoring": "",
"speedtest": "", "speedtest": "",
"analytics": "", "analytics": "",
"vpn": "",
"mediaLibrary": "", "mediaLibrary": "",
"uptimeMonitoring": "" "uptimeMonitoring": ""
}, },
@@ -1413,10 +1412,7 @@
"here": "此處", "here": "此處",
"iconPicker": { "iconPicker": {
"label": "Icon 網址", "label": "Icon 網址",
"header": "輸入名稱或物件來篩選 icons,Homarr 會自動搜尋 {countIcons}", "header": "輸入名稱或物件來篩選 icons,Homarr 會自動搜尋 {countIcons}"
"headerLoading": "",
"noResults": "",
"error": ""
}, },
"colorScheme": { "colorScheme": {
"options": { "options": {
@@ -1468,7 +1464,6 @@
"switchToDarkMode": "切換至暗黑模式", "switchToDarkMode": "切換至暗黑模式",
"switchToLightMode": "切換至日間模式", "switchToLightMode": "切換至日間模式",
"management": "管理中心", "management": "管理中心",
"docker": "",
"preferences": "偏好設定", "preferences": "偏好設定",
"logout": "登出", "logout": "登出",
"login": "登入", "login": "登入",
@@ -2357,9 +2352,6 @@
"name": "", "name": "",
"description": "", "description": "",
"option": { "option": {
"columns": {
"label": ""
},
"enableRowSorting": { "enableRowSorting": {
"label": "" "label": ""
}, },
@@ -2413,12 +2405,6 @@
"title": "" "title": ""
} }
}, },
"vpn": {
"name": "",
"description": "",
"serviceUnavailable": "",
"option": {}
},
"ups": { "ups": {
"name": "", "name": "",
"description": "", "description": "",
@@ -3653,9 +3639,6 @@
"error": { "error": {
"internalServerError": "" "internalServerError": ""
}, },
"empty": {
"noSystems": ""
},
"metric": { "metric": {
"cpu": "", "cpu": "",
"memory": "", "memory": "",
@@ -3729,9 +3712,6 @@
} }
}, },
"selectSystem": "", "selectSystem": "",
"empty": {
"noSystems": ""
},
"error": { "error": {
"internalServerError": "", "internalServerError": "",
"liveConnectionFailed": "", "liveConnectionFailed": "",
@@ -4153,11 +4133,6 @@
"title": "不存在", "title": "不存在",
"text": "找不到請求的資源" "text": "找不到請求的資源"
}, },
"error": {
"title": "",
"text": "",
"digest": ""
},
"navbar": { "navbar": {
"items": { "items": {
"home": "首頁", "home": "首頁",
@@ -4604,9 +4579,6 @@
}, },
"umamiActiveVisitors": { "umamiActiveVisitors": {
"label": "" "label": ""
},
"vpn": {
"label": ""
} }
}, },
"interval": { "interval": {
@@ -5099,8 +5071,7 @@
} }
}, },
"error": { "error": {
"internalServerError": "取得 Docker 容器失敗", "internalServerError": "取得 Docker 容器失敗"
"noColumns": ""
} }
}, },
"kubernetes": { "kubernetes": {
+7 -33
View File
@@ -1,4 +1,4 @@
import { useCallback, useState } from "react"; import { 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,12 +13,10 @@ 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, onOpen }: CalendarDayProps) => { export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth }: 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();
@@ -31,19 +29,6 @@ export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth, onO
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"
@@ -54,10 +39,7 @@ export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth, onO
transitionProps={{ transitionProps={{
transition: "pop", transition: "pop",
}} }}
onChange={(value) => { onChange={setOpened}
setOpened(value);
if (!value) setPinned(false);
}}
opened={opened} opened={opened}
disabled={disabled} disabled={disabled}
> >
@@ -77,10 +59,10 @@ export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth, onO
cursor: disabled ? "default" : "pointer", cursor: disabled ? "default" : "pointer",
}} }}
onClick={() => { onClick={() => {
if (!disabled) setPinned((prev) => !prev); if (disabled) return;
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()}
@@ -89,15 +71,7 @@ export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth, onO
</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 <Popover.Dropdown maw="calc(100vw - 24px)" w={512} pe={4} pb={0} style={{ overflow: "hidden" }}>
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>
+10 -50
View File
@@ -1,6 +1,6 @@
"use client"; "use client";
import { useCallback, useMemo, useRef, useState } from "react"; import { useMemo, 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,15 +16,11 @@ 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( export default function CalendarWidget(props: WidgetComponentProps<"calendar">) {
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 ( return <CalendarBase {...props} events={[]} month={month} setMonth={setMonth} />;
<CalendarBase {...props} events={[]} month={month} setMonth={setMonth} />
);
} }
return <FetchCalendar month={month} setMonth={setMonth} {...props} />; return <FetchCalendar month={month} setMonth={setMonth} {...props} />;
@@ -35,13 +31,7 @@ interface FetchCalendarProps extends WidgetComponentProps<"calendar"> {
setMonth: (date: Date) => void; setMonth: (date: Date) => void;
} }
const FetchCalendar = ({ const FetchCalendar = ({ month, setMonth, isEditMode, integrationIds, options }: FetchCalendarProps) => {
month,
setMonth,
isEditMode,
integrationIds,
options,
}: FetchCalendarProps) => {
const input = { const input = {
integrationIds, integrationIds,
month: month.getMonth(), month: month.getMonth(),
@@ -71,20 +61,9 @@ const FetchCalendar = ({
}, },
}); });
const events = useMemo( const events = useMemo(() => data?.flatMap((item) => item.events) ?? [], [data]);
() => data?.flatMap((item) => item.events) ?? [],
[data],
);
return ( return <CalendarBase isEditMode={isEditMode} events={events} month={month} setMonth={setMonth} options={options} />;
<CalendarBase
isEditMode={isEditMode}
events={events}
month={month}
setMonth={setMonth}
options={options}
/>
);
}; };
interface CalendarBaseProps { interface CalendarBaseProps {
@@ -95,13 +74,7 @@ interface CalendarBaseProps {
options: WidgetComponentProps<"calendar">["options"]; options: WidgetComponentProps<"calendar">["options"];
} }
const CalendarBase = ({ const CalendarBase = ({ isEditMode, events, month, setMonth, options }: CalendarBaseProps) => {
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();
@@ -112,11 +85,6 @@ const CalendarBase = ({
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
@@ -182,14 +150,9 @@ const CalendarBase = ({
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) => event.metadata?.type !== "radarr" || options.releaseType.includes(event.metadata.releaseType),
event.metadata?.type !== "radarr" ||
options.releaseType.includes(event.metadata.releaseType),
) )
.toSorted( .toSorted((eventA, eventB) => eventA.startDate.getTime() - eventB.startDate.getTime());
(eventA, eventB) =>
eventA.startDate.getTime() - eventB.startDate.getTime(),
);
return ( return (
<CalendarDay <CalendarDay
@@ -198,7 +161,6 @@ const CalendarBase = ({
disabled={isEditMode || eventsForDate.length === 0} disabled={isEditMode || eventsForDate.length === 0}
rootWidth={width} rootWidth={width}
rootHeight={height} rootHeight={height}
onOpen={onDayOpen}
/> />
); );
}} }}
@@ -236,9 +198,7 @@ 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) endDate: currentStart.endOf("day").isAfter(event.endDate) ? event.endDate : currentStart.endOf("day").toDate(),
? event.endDate
: currentStart.endOf("day").toDate(),
}); });
currentStart = currentStart.add(1, "day").startOf("day"); currentStart = currentStart.add(1, "day").startOf("day");
+1 -32
View File
@@ -1,4 +1,3 @@
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";
@@ -10,35 +9,7 @@ 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, inferOptionsFromDefinition, WidgetOptionsRecord } from "./options"; import type { inferOptionsFromCreator, 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) =>
@@ -85,7 +56,6 @@ export interface WidgetDefinition {
} }
> >
>; >;
contextActions?: (props: Omit<WidgetContextActionProps<WidgetKind>, "kind">) => WidgetContextMenuAction[];
} }
export interface WidgetProps<TKind extends WidgetKind> { export interface WidgetProps<TKind extends WidgetKind> {
@@ -100,7 +70,6 @@ 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,7 +57,6 @@ 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,7 +26,6 @@ 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,
+2 -21
View File
@@ -1,10 +1,10 @@
"use client"; "use client";
import { useMemo } from "react"; import { useMemo } from "react";
import { ActionIcon, Avatar, Badge, Center, Group, Stack, Text, Tooltip } from "@mantine/core"; import { ActionIcon, Avatar, Badge, 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, MRT_VisibilityState } from "mantine-react-table"; import type { MRT_ColumnDef } 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,15 +213,6 @@ 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,
@@ -242,9 +233,6 @@ 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,
@@ -272,13 +260,6 @@ 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} />
-19
View File
@@ -12,29 +12,10 @@ 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 -2
View File
@@ -1,7 +1,6 @@
"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";
@@ -578,7 +577,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, bg: "transparent" }, mantinePaperProps: { flex: 1, withBorder: false, shadow: undefined },
mantineTableContainerProps: { style: { height: "100%" } }, mantineTableContainerProps: { style: { height: "100%" } },
mantineTableProps: { mantineTableProps: {
className: "downloads-widget-table", className: "downloads-widget-table",
-12
View File
@@ -1,12 +0,0 @@
/* 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;
}
+1 -6
View File
@@ -61,12 +61,7 @@ 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 { export type { WidgetDefinition, WidgetOptionsSettings } from "./definition";
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,7 +1,6 @@
import { IconSearch, IconZoomQuestion } from "@tabler/icons-react"; import { 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";
@@ -15,15 +14,5 @@ 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,7 +1,6 @@
import { IconChartBar, IconSearch } from "@tabler/icons-react"; import { IconChartBar } 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";
@@ -10,15 +9,5 @@ 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"));
-2
View File
@@ -13,7 +13,6 @@ 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> {
@@ -92,7 +91,6 @@ 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,
+866 -1229
View File
File diff suppressed because it is too large. Load diff
+27 -27
View File
@@ -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.6 '@gfazioli/mantine-onboarding-tour': ^4.0.5
"@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.4.0 "@mantine/charts": ^9.3.2
"@mantine/colors-generator": ^9.4.0 "@mantine/colors-generator": ^9.3.2
"@mantine/core": ^9.4.0 "@mantine/core": ^9.3.2
"@mantine/dates": ^9.4.0 "@mantine/dates": ^9.3.2
"@mantine/dropzone": ^9.4.0 "@mantine/dropzone": ^9.3.2
"@mantine/form": ^9.4.0 "@mantine/form": ^9.3.2
"@mantine/hooks": ^9.4.0 "@mantine/hooks": ^9.3.2
"@mantine/modals": ^9.4.0 "@mantine/modals": ^9.3.2
"@mantine/notifications": ^9.4.0 "@mantine/notifications": ^9.3.2
"@mantine/spotlight": ^9.4.0 "@mantine/spotlight": ^9.3.2
"@mantine/tiptap": ^9.4.0 "@mantine/tiptap": ^9.3.2
"@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.1 "@playwright/test": ^1.61.0
"@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.10.0 "@turbo/gen": ^2.9.18
"@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.48 "@scalar/api-reference-react": ^0.9.47
"@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.393.5 posthog-js: ^1.391.2
posthog-node: ^4.18.0 posthog-node: ^4.18.0
"@vitejs/plugin-react": ^6.0.3 "@vitejs/plugin-react": ^6.0.2
"@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.1 dockerode: ^5.0.0
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.56.0 oxfmt: ^0.55.0
oxlint: ^1.71.0 oxlint: ^1.70.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.9.0 recharts: ^3.8.1
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.10.0 turbo: ^2.9.18
typescript: ^6.0.3 typescript: ^6.0.3
vite: ^8.1.0 vite: ^8.0.16
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.1" "axios@>=1.0.0 <1.8.2": ">=1.18.0"
"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.27" "hono@<4.6.5": ">=4.12.26"
"linkifyjs@<4.3.2": ">=4.3.3" "linkifyjs@<4.3.2": ">=4.3.3"
"nanoid@>=4.0.0 <5.0.9": ">=5.1.16" "nanoid@>=4.0.0 <5.0.9": ">=5.1.15"
"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.1.0" "vite@>=5.0.0 <=5.4.18": ">=8.0.16"
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"
+1 -1
View File
@@ -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.18.0 node-version: 24.17.0
cache: "pnpm" cache: "pnpm"
- shell: bash - shell: bash