Compare commits
30
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
32b6e4356e | ||
|
|
ea2ffd385e | ||
|
|
cb31ab7e5a | ||
|
|
ac73b9d891 | ||
|
|
489980814c | ||
|
|
14654acced | ||
|
|
2885f7a297 | ||
|
|
906c9f11fa | ||
|
|
3419805a49 | ||
|
|
51a6cbe6d4 | ||
|
|
d08eb2afa6 | ||
|
|
91a6b19ba1 | ||
|
|
e66979bab6 | ||
|
|
4ef7641cb2 | ||
|
|
f33fc838cf | ||
|
|
f0019fa213 | ||
|
|
ba8536b36d | ||
|
|
965aec5155 | ||
|
|
387db030cd | ||
|
|
8e557c9924 | ||
|
|
f26e60edf0 | ||
|
|
7bbfd74454 | ||
|
|
018b1ea4da | ||
|
|
14c3fa2e76 | ||
|
|
9168f8114b | ||
|
|
9cabb42edb | ||
|
|
bfba3c9215 | ||
|
|
7184bc09c1 | ||
|
|
9bb0c0f811 | ||
|
|
ac6a0c9254 |
No files matched your search
@@ -0,0 +1,622 @@
|
|||||||
|
# Migrating Tables from mantine-react-table to mantine-datatable
|
||||||
|
|
||||||
|
This document captures every pattern, fix, and decision from the downloads widget rework (PR #6430). Use it as a playbook when porting other tables.
|
||||||
|
|
||||||
|
## Migration Candidates
|
||||||
|
|
||||||
|
Current `mantine-react-table` consumers that could be migrated:
|
||||||
|
|
||||||
|
**Widgets (in `packages/widgets/`):**
|
||||||
|
- `docker/component.tsx` — Docker container table
|
||||||
|
- `media-server/component.tsx` — Media server sessions
|
||||||
|
|
||||||
|
**Admin pages (in `apps/nextjs/src/app/[locale]/manage/`):**
|
||||||
|
- `tools/docker/docker-table.tsx`
|
||||||
|
- `tools/tasks/_components/tasks-table.tsx`
|
||||||
|
- `tools/api/components/api-keys.tsx`
|
||||||
|
- `users/_components/user-list.tsx`
|
||||||
|
- `users/invites/_components/invite-list.tsx`
|
||||||
|
- `tools/kubernetes/` — 8 Kubernetes resource tables
|
||||||
|
|
||||||
|
**Modals:**
|
||||||
|
- `packages/modals-collection/src/search-engines/request-media-modal.tsx`
|
||||||
|
|
||||||
|
**Shared hook to remove once all migrated:**
|
||||||
|
- `packages/ui/src/hooks/use-translated-mantine-react-table.ts`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Core Migration: mantine-react-table → mantine-datatable
|
||||||
|
|
||||||
|
### Import changes
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// BEFORE
|
||||||
|
import { MantineReactTable, useMantineReactTable } from "mantine-react-table";
|
||||||
|
import type { MRT_ColumnDef } from "mantine-react-table";
|
||||||
|
|
||||||
|
// AFTER
|
||||||
|
import { DataTable, useDataTableColumns } from "mantine-datatable";
|
||||||
|
import type { DataTableColumn, DataTableSortStatus } from "mantine-datatable";
|
||||||
|
```
|
||||||
|
|
||||||
|
### Column definition shape
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// BEFORE (MRT)
|
||||||
|
const columns: MRT_ColumnDef<MyRow>[] = [
|
||||||
|
{
|
||||||
|
accessorKey: "name",
|
||||||
|
header: "Name",
|
||||||
|
size: 200,
|
||||||
|
enableSorting: true,
|
||||||
|
Cell: ({ row }) => <Text>{row.original.name}</Text>,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
// AFTER (mantine-datatable)
|
||||||
|
const columns: DataTableColumn<MyRow>[] = [
|
||||||
|
{
|
||||||
|
accessor: "name", // not accessorKey
|
||||||
|
title: "Name", // not header
|
||||||
|
width: 200, // not size
|
||||||
|
sortable: true, // not enableSorting
|
||||||
|
render: (record) => <Text>{record.name}</Text>, // not Cell
|
||||||
|
},
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
Key differences:
|
||||||
|
- `accessorKey` → `accessor`
|
||||||
|
- `header` → `title`
|
||||||
|
- `size` → `width`
|
||||||
|
- `Cell: ({ row }) =>` → `render: (record) =>`
|
||||||
|
- `enableSorting` → `sortable`
|
||||||
|
- `enableColumnActions` → does not exist (no column action menus)
|
||||||
|
- `mantineTableBodyCellProps` → `cellsStyle` in `defaultColumnProps`
|
||||||
|
|
||||||
|
### Table component
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// BEFORE
|
||||||
|
const table = useTranslatedMantineReactTable({ columns, data, ... });
|
||||||
|
return <MantineReactTable table={table} />;
|
||||||
|
|
||||||
|
// AFTER
|
||||||
|
return (
|
||||||
|
<DataTable
|
||||||
|
records={data}
|
||||||
|
columns={columns}
|
||||||
|
sortStatus={sortStatus}
|
||||||
|
onSortStatusChange={setSortStatus}
|
||||||
|
...
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Sorting is manual
|
||||||
|
|
||||||
|
mantine-datatable does NOT sort for you. You must sort the data yourself:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
const [sortStatus, setSortStatus] = useState<DataTableSortStatus<MyRow>>({
|
||||||
|
columnAccessor: "name",
|
||||||
|
direction: "asc",
|
||||||
|
});
|
||||||
|
|
||||||
|
const sortedData = useMemo(() => {
|
||||||
|
const mult = sortStatus.direction === "desc" ? -1 : 1;
|
||||||
|
return [...data].toSorted((a, b) => {
|
||||||
|
const aVal = a[sortStatus.columnAccessor];
|
||||||
|
const bVal = b[sortStatus.columnAccessor];
|
||||||
|
if (typeof aVal === "string") return aVal.localeCompare(bVal as string) * mult;
|
||||||
|
return ((aVal as number) - (bVal as number)) * mult;
|
||||||
|
});
|
||||||
|
}, [data, sortStatus]);
|
||||||
|
|
||||||
|
// Pass sortedData to records, not data
|
||||||
|
<DataTable records={sortedData} sortStatus={sortStatus} onSortStatusChange={setSortStatus} />
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Making Tables Transparent (Widget Context)
|
||||||
|
|
||||||
|
Widgets sit inside board cards that have user-controlled opacity. The table must be fully transparent so the card background shows through. mantine-datatable defaults to `var(--mantine-color-body)` which is opaque.
|
||||||
|
|
||||||
|
Create a CSS file alongside the component:
|
||||||
|
|
||||||
|
```css
|
||||||
|
/* styles.css */
|
||||||
|
.my-table,
|
||||||
|
.my-table .mantine-datatable-table,
|
||||||
|
.my-table .mantine-datatable-table thead,
|
||||||
|
.my-table .mantine-datatable-table tbody,
|
||||||
|
.my-table .mantine-datatable-table tfoot,
|
||||||
|
.my-table th,
|
||||||
|
.my-table td {
|
||||||
|
background-color: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.my-table .mantine-datatable-table tr {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hover: translucent instead of opaque */
|
||||||
|
.my-table .mantine-datatable-table tbody tr:hover {
|
||||||
|
background-color: color-mix(in srgb, var(--mantine-color-default-hover) 40%, transparent) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Headers: frosted glass effect */
|
||||||
|
.my-table th {
|
||||||
|
white-space: nowrap;
|
||||||
|
background-color: color-mix(in srgb, var(--mantine-color-body) 60%, transparent) !important;
|
||||||
|
backdrop-filter: blur(8px);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Cell overflow */
|
||||||
|
.my-table td {
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide sort icon until hover */
|
||||||
|
.my-table .mantine-datatable-header-cell-sortable-icon {
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 150ms;
|
||||||
|
}
|
||||||
|
.my-table th:hover .mantine-datatable-header-cell-sortable-icon {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Row expansion area */
|
||||||
|
.my-table .mantine-datatable-row-expansion-cell {
|
||||||
|
background-color: color-mix(in srgb, var(--mantine-color-body) 40%, transparent) !important;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Import it: `import "./styles.css";` and apply via `className="my-table"`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Responsive Column Visibility
|
||||||
|
|
||||||
|
Use a lookup table of width breakpoints instead of media queries. The widget receives `width` as a prop.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
interface SizeConfig {
|
||||||
|
fontSize: "xs" | "sm";
|
||||||
|
iconSize: number;
|
||||||
|
cellPadding: number;
|
||||||
|
showSpeedColumns: boolean;
|
||||||
|
showTimeColumn: boolean;
|
||||||
|
showStateColumn: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
const SIZE_BREAKPOINTS: { maxWidth: number; config: SizeConfig }[] = [
|
||||||
|
{ maxWidth: 300, config: { fontSize: "xs", iconSize: 12, cellPadding: 2, showSpeedColumns: false, showTimeColumn: false, showStateColumn: false } },
|
||||||
|
{ maxWidth: 500, config: { fontSize: "xs", iconSize: 14, cellPadding: 4, showSpeedColumns: false, showTimeColumn: true, showStateColumn: false } },
|
||||||
|
];
|
||||||
|
|
||||||
|
const DEFAULT_SIZE_CONFIG: SizeConfig = { fontSize: "sm", iconSize: 14, cellPadding: 4, showSpeedColumns: true, showTimeColumn: true, showStateColumn: true };
|
||||||
|
|
||||||
|
function getSizeConfig(width: number): SizeConfig {
|
||||||
|
for (const { maxWidth, config } of SIZE_BREAKPOINTS) {
|
||||||
|
if (width < maxWidth) return config;
|
||||||
|
}
|
||||||
|
return DEFAULT_SIZE_CONFIG;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Usage: memoize it
|
||||||
|
const size = useMemo(() => getSizeConfig(width), [width]);
|
||||||
|
```
|
||||||
|
|
||||||
|
Then use a visibility check lookup table for columns:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
const columnVisibilityChecks: Partial<Record<string, (ctx: ColumnContext) => boolean>> = {
|
||||||
|
upSpeed: (ctx) => ctx.hasTorrents && ctx.size.showSpeedColumns,
|
||||||
|
downSpeed: (ctx) => ctx.size.showSpeedColumns,
|
||||||
|
time: (ctx) => ctx.size.showTimeColumn,
|
||||||
|
state: (ctx) => ctx.size.showStateColumn,
|
||||||
|
};
|
||||||
|
|
||||||
|
function shouldIncludeColumn(accessor: string, ctx: ColumnContext): boolean {
|
||||||
|
if (!ctx.optionsColumnSet.has(accessor)) return false;
|
||||||
|
const check = columnVisibilityChecks[accessor];
|
||||||
|
if (check && !check(ctx)) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Column Persistence (Drag/Resize → Server)
|
||||||
|
|
||||||
|
`useDataTableColumns` stores column order and widths in localStorage by default. For widgets, this must persist server-side so it works across devices.
|
||||||
|
|
||||||
|
### Hidden widget options
|
||||||
|
|
||||||
|
In `index.ts`, add hidden text options:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
columnOrder: factory.text({ defaultValue: "" }),
|
||||||
|
columnWidths: factory.text({ defaultValue: "" }),
|
||||||
|
```
|
||||||
|
|
||||||
|
With visibility override:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
{
|
||||||
|
columnOrder: { shouldHide: () => true },
|
||||||
|
columnWidths: { shouldHide: () => true },
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Translation keys required
|
||||||
|
|
||||||
|
Even hidden options need translation keys or the translation test fails:
|
||||||
|
|
||||||
|
```json
|
||||||
|
"widget.mywidget.option.columnOrder.label": "Column order",
|
||||||
|
"widget.mywidget.option.columnWidths.label": "Column widths"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Old-import mappings
|
||||||
|
|
||||||
|
Add to `packages/old-import/src/widgets/options.ts`:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
columnOrder: () => undefined,
|
||||||
|
columnWidths: () => undefined,
|
||||||
|
```
|
||||||
|
|
||||||
|
### Dynamic storeKey
|
||||||
|
|
||||||
|
Use a key that includes `itemId` and sorted column names. This prevents cross-widget localStorage bleeding:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
const storeKey = `mytable-${itemId ?? "preview"}-${[...options.columns].toSorted().join(",")}`;
|
||||||
|
```
|
||||||
|
|
||||||
|
### Hydration from server → localStorage
|
||||||
|
|
||||||
|
On mount, seed `useDataTableColumns` with server-persisted values. Use a `hydrated` ref to prevent the persist effect from immediately writing defaults back:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
const { effectiveColumns, columnsOrder, columnsWidth, setColumnsOrder, setMultipleColumnWidths } =
|
||||||
|
useDataTableColumns<MyRow>({ key: storeKey, columns });
|
||||||
|
|
||||||
|
const lastStoreKey = useRef(storeKey);
|
||||||
|
const hydrated = useRef(false);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (lastStoreKey.current !== storeKey) {
|
||||||
|
lastStoreKey.current = storeKey;
|
||||||
|
hydrated.current = false;
|
||||||
|
}
|
||||||
|
if (hydrated.current) return;
|
||||||
|
if (savedOrder.length > 0) setColumnsOrder(savedOrder);
|
||||||
|
if (Object.keys(savedWidths).length > 0) {
|
||||||
|
setMultipleColumnWidths(
|
||||||
|
Object.entries(savedWidths).map(([accessor, w]) => ({ accessor, width: w })),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
requestAnimationFrame(() => { hydrated.current = true; });
|
||||||
|
}, [storeKey, savedOrder, savedWidths, setColumnsOrder, setMultipleColumnWidths]);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Persist localStorage → server
|
||||||
|
|
||||||
|
Watch for changes and write back:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
const prevOrder = useRef(columnsOrder);
|
||||||
|
const prevWidths = useRef(columnsWidth);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!hydrated.current) return;
|
||||||
|
const orderChanged = JSON.stringify(columnsOrder) !== JSON.stringify(prevOrder.current);
|
||||||
|
const widthsChanged = JSON.stringify(columnsWidth) !== JSON.stringify(prevWidths.current);
|
||||||
|
prevOrder.current = columnsOrder;
|
||||||
|
prevWidths.current = columnsWidth;
|
||||||
|
|
||||||
|
if (!orderChanged && !widthsChanged) return;
|
||||||
|
|
||||||
|
if (orderChanged) persistOption({ columnOrder: JSON.stringify(columnsOrder) });
|
||||||
|
if (widthsChanged) {
|
||||||
|
const widthMap: Record<string, number> = {};
|
||||||
|
for (const entry of columnsWidth) {
|
||||||
|
const key = Object.keys(entry)[0];
|
||||||
|
if (!key) continue;
|
||||||
|
const w = entry[key as keyof typeof entry];
|
||||||
|
if (typeof w === "number") widthMap[key] = w;
|
||||||
|
else if (typeof w === "string" && w.endsWith("px")) widthMap[key] = parseInt(w, 10);
|
||||||
|
}
|
||||||
|
persistOption({ columnWidths: JSON.stringify(widthMap) });
|
||||||
|
}
|
||||||
|
}, [columnsOrder, columnsWidth, persistOption]);
|
||||||
|
```
|
||||||
|
|
||||||
|
The `persistOption` helper calls both `setOptions` (local state) and `saveItemOptions` (server mutation).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Context Menu (Right-Click)
|
||||||
|
|
||||||
|
Do NOT install `mantine-contextmenu`. Use Mantine's `Menu` + `Portal` directly:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
interface ContextMenuState {
|
||||||
|
x: number;
|
||||||
|
y: number;
|
||||||
|
item: MyRow;
|
||||||
|
}
|
||||||
|
|
||||||
|
const [contextMenu, setContextMenu] = useState<ContextMenuState | null>(null);
|
||||||
|
|
||||||
|
const handleContextMenu = useCallback(
|
||||||
|
({ record, event }: { record: MyRow; event: React.MouseEvent }) => {
|
||||||
|
event.preventDefault();
|
||||||
|
setContextMenu({ x: event.clientX, y: event.clientY, item: record });
|
||||||
|
},
|
||||||
|
[],
|
||||||
|
);
|
||||||
|
|
||||||
|
// On DataTable:
|
||||||
|
<DataTable onRowContextMenu={handleContextMenu} />
|
||||||
|
|
||||||
|
// Render:
|
||||||
|
{contextMenu && <RowContextMenu state={contextMenu} onClose={closeContextMenu} />}
|
||||||
|
```
|
||||||
|
|
||||||
|
The menu component uses `Portal` for correct z-index:
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
function RowContextMenu({ state, onClose }: { state: ContextMenuState; onClose: () => void }) {
|
||||||
|
return (
|
||||||
|
<Portal>
|
||||||
|
<Menu opened onClose={onClose} closeOnItemClick={false} position="right-start" offset={0}>
|
||||||
|
<Menu.Target>
|
||||||
|
<Box style={{ position: "fixed", left: state.x, top: state.y, width: 0, height: 0 }} />
|
||||||
|
</Menu.Target>
|
||||||
|
<Menu.Dropdown>
|
||||||
|
<Menu.Item onClick={() => { /* action */ onClose(); }}>Action</Menu.Item>
|
||||||
|
</Menu.Dropdown>
|
||||||
|
</Menu>
|
||||||
|
</Portal>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Key fix:** Use `closeOnItemClick={false}` if any menu item needs a two-step confirmation (like delete → confirm). Close the menu on scroll: `onScroll={() => { if (contextMenu) closeContextMenu(); }}`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Row Expansion
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
<DataTable
|
||||||
|
rowExpansion={{
|
||||||
|
trigger: "click",
|
||||||
|
allowMultiple: true,
|
||||||
|
collapseProps: {
|
||||||
|
transitionDuration: 200,
|
||||||
|
animateOpacity: true,
|
||||||
|
transitionTimingFunction: "ease-out",
|
||||||
|
},
|
||||||
|
content: ({ record, collapse }) => <ExpandedRow item={record} collapse={collapse} />,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Critical:** Do NOT set `onRowClick` when using `rowExpansion` with `trigger: "click"`. They conflict and the expansion won't work.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Common Pitfalls & Fixes
|
||||||
|
|
||||||
|
### Status indicator dots
|
||||||
|
|
||||||
|
Don't use `<Badge variant="dot" />` without children — it renders a pill with empty space. Use a plain `Box`:
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
<Box
|
||||||
|
w={8}
|
||||||
|
h={8}
|
||||||
|
style={{
|
||||||
|
borderRadius: "50%",
|
||||||
|
backgroundColor: `var(--mantine-color-${color}-filled)`,
|
||||||
|
flexShrink: 0,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Tooltip overflow on long text columns
|
||||||
|
|
||||||
|
When a column has `ellipsis: true`, the tooltip target element can still extend beyond the cell bounds if inner elements don't clip. Fix:
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
<Tooltip position="bottom-start" ...>
|
||||||
|
<Group style={{ overflow: "hidden" }}>
|
||||||
|
...
|
||||||
|
</Group>
|
||||||
|
</Tooltip>
|
||||||
|
```
|
||||||
|
|
||||||
|
Use `position="bottom-start"` instead of `position="right"` so the tooltip never escapes the widget horizontally.
|
||||||
|
|
||||||
|
### Dark mode tooltips
|
||||||
|
|
||||||
|
Mantine tooltips default to the theme's tooltip color which may be white in light mode and stay white in dark mode. Always set `color="dark"` on informational tooltips inside widgets.
|
||||||
|
|
||||||
|
### Division by zero
|
||||||
|
|
||||||
|
Guard all ratio calculations:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
if (item.size > 0) ratio = item.sent / item.size;
|
||||||
|
if (totalDown > 0) ratio = totalUp / totalDown;
|
||||||
|
```
|
||||||
|
|
||||||
|
### Composite idAccessor
|
||||||
|
|
||||||
|
When rows can come from multiple integrations, IDs may collide. Use a composite key:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
idAccessor={(record) => `${record.integration.id}:${record.id}`}
|
||||||
|
```
|
||||||
|
|
||||||
|
### JSON option parsing
|
||||||
|
|
||||||
|
Always wrap in try/catch:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
function parseJsonOption<T>(value: string | undefined, fallback: T): T {
|
||||||
|
if (!value) return fallback;
|
||||||
|
try { return JSON.parse(value) as T; }
|
||||||
|
catch { return fallback; }
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Clipboard API
|
||||||
|
|
||||||
|
`navigator.clipboard.writeText()` can throw in non-HTTPS contexts. Always catch:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
void navigator.clipboard.writeText(text).catch(() => {});
|
||||||
|
```
|
||||||
|
|
||||||
|
### Sync sortStatus with widget options
|
||||||
|
|
||||||
|
If the widget has configurable default sort, sync it:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
useEffect(() => {
|
||||||
|
setSortStatus({ columnAccessor: options.defaultSort, direction: defaultSortDirection });
|
||||||
|
}, [options.defaultSort, defaultSortDirection]);
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Accessibility
|
||||||
|
|
||||||
|
- All `ActionIcon` components need `aria-label`
|
||||||
|
- Filter toggles (client badges, status badges) need `aria-pressed={isActive}`
|
||||||
|
- `textSelectionDisabled` on DataTable prevents accidental text selection during drag/resize
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Error Handling
|
||||||
|
|
||||||
|
- Every mutation needs an `onError` callback with `showErrorNotification`
|
||||||
|
- The `saveItemOptions` mutation (column persistence) also needs `onError`
|
||||||
|
- Check `isError` on the main query and show a fallback UI
|
||||||
|
- Use a shared `mutationOptions` object to avoid repeating `onSettled`/`onError`:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
const mutationOptions = {
|
||||||
|
onSettled: () => void utils.myQuery.invalidate(),
|
||||||
|
onError: () => showErrorNotification({ title: t("errors.actionFailed"), message: t("errors.actionFailedMessage") }),
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. i18n
|
||||||
|
|
||||||
|
- No hardcoded strings. Every user-visible string goes through `useScopedI18n`
|
||||||
|
- Column titles: `t("items.{accessor}.columnTitle")`
|
||||||
|
- Detail labels: `t("items.{accessor}.detailsTitle")`
|
||||||
|
- States: `t("states.{state}")`
|
||||||
|
- Actions: `t("actions.{action}")`
|
||||||
|
- Errors: `t("errors.{errorKey}")`
|
||||||
|
- Hidden options still need `.label` translation keys
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 11. Edit Mode
|
||||||
|
|
||||||
|
Disable pointer events on the table during edit mode to prevent conflicts with the board's drag-and-drop:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
let tablePointerEvents: React.CSSProperties["pointerEvents"];
|
||||||
|
if (isEditMode) tablePointerEvents = "none";
|
||||||
|
|
||||||
|
let rowContextMenuHandler = handleContextMenu;
|
||||||
|
if (isEditMode) rowContextMenuHandler = undefined;
|
||||||
|
|
||||||
|
<DataTable style={{ pointerEvents: tablePointerEvents }} />
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 12. DataTable Props Reference (Commonly Used)
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
<DataTable
|
||||||
|
records={sortedData}
|
||||||
|
columns={effectiveColumns}
|
||||||
|
storeColumnsKey={storeKey}
|
||||||
|
withTableBorder={false}
|
||||||
|
borderRadius={0}
|
||||||
|
highlightOnHover
|
||||||
|
striped="odd"
|
||||||
|
stripedColor={{ dark: "dark.7", light: "gray.0" }}
|
||||||
|
highlightOnHoverColor={{ dark: "dark.5", light: "gray.1" }}
|
||||||
|
verticalAlign="center"
|
||||||
|
fetching={isFetching && data.length === 0}
|
||||||
|
loaderBackgroundBlur={2}
|
||||||
|
fz={size.fontSize}
|
||||||
|
textSelectionDisabled
|
||||||
|
sortStatus={sortStatus}
|
||||||
|
onSortStatusChange={setSortStatus}
|
||||||
|
noRecordsText={t("errors.noItems")}
|
||||||
|
idAccessor={(record) => record.uniqueKey}
|
||||||
|
height="100%"
|
||||||
|
className="my-table"
|
||||||
|
defaultColumnProps={{
|
||||||
|
noWrap: true,
|
||||||
|
draggable: true,
|
||||||
|
resizable: true,
|
||||||
|
cellsStyle: () => ({ padding: `${size.cellPadding}px 8px` }),
|
||||||
|
}}
|
||||||
|
scrollAreaProps={{ type: "auto", scrollbarSize: 6 }}
|
||||||
|
rowBackgroundColor={(record) => conditionalBgMap[record.state]}
|
||||||
|
onRowContextMenu={handleContextMenu}
|
||||||
|
rowExpansion={{ ... }}
|
||||||
|
onScroll={() => { if (contextMenu) closeContextMenu(); }}
|
||||||
|
/>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 13. Layout Stability
|
||||||
|
|
||||||
|
- Don't use `table-layout: fixed` — it fights mantine-datatable's resize logic
|
||||||
|
- Give non-name columns explicit `width` values so only the name column flexes
|
||||||
|
- Use `ellipsis: true` on the name column — it handles `text-overflow: ellipsis` internally
|
||||||
|
- Names should truncate at the cell boundary, not a character count, so the layout is stable regardless of content length
|
||||||
|
- `flexShrink: 0` on badges/icons prevents them from being squeezed by long names
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 14. Checklist for Each Migration
|
||||||
|
|
||||||
|
1. Replace imports (`mantine-react-table` → `mantine-datatable`)
|
||||||
|
2. Convert column definitions (`accessorKey` → `accessor`, `header` → `title`, `Cell` → `render`, etc.)
|
||||||
|
3. Implement manual sorting with `useState` + `useMemo`
|
||||||
|
4. Add CSS file for transparent backgrounds (if widget context)
|
||||||
|
5. Add responsive column visibility (if widget context)
|
||||||
|
6. Add hidden options + hydration logic (if column persistence needed)
|
||||||
|
7. Add old-import mappings for new options
|
||||||
|
8. Add translation keys (including hidden option labels)
|
||||||
|
9. Add context menu if row actions exist
|
||||||
|
10. Add row expansion if detail view exists
|
||||||
|
11. Add error handling on all mutations
|
||||||
|
12. Add accessibility attributes
|
||||||
|
13. Test at multiple widget widths
|
||||||
|
14. Update docs in `apps/docs/docs/widgets/` if applicable
|
||||||
|
15. Run `pnpm turbo typecheck` — catches old-import mismatches
|
||||||
|
16. Run translation spec — catches missing keys
|
||||||
@@ -33,6 +33,8 @@ 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.72.0
|
||||||
|
- 1.71.0
|
||||||
- 1.70.0
|
- 1.70.0
|
||||||
- 1.69.2
|
- 1.69.2
|
||||||
- 1.69.0
|
- 1.69.0
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
$schema: "https://docs.renovatebot.com/renovate-schema.json",
|
$schema: "https://docs.renovatebot.com/renovate-schema.json",
|
||||||
extends: ["config:recommended"],
|
extends: ["config:recommended", ":dependencyDashboardApproval"],
|
||||||
packageRules: [
|
packageRules: [
|
||||||
{
|
{
|
||||||
matchPackageNames: ["^@homarr/"],
|
matchPackageNames: ["^@homarr/"],
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
rangeStrategy: "bump",
|
rangeStrategy: "bump",
|
||||||
automerge: false,
|
automerge: false,
|
||||||
baseBranchPatterns: ["dev"],
|
baseBranchPatterns: ["dev"],
|
||||||
dependencyDashboard: false,
|
dependencyDashboard: true,
|
||||||
// prevent special characters in branch names (otherwise git errors occur on windows)
|
// prevent special characters in branch names (otherwise git errors occur on windows)
|
||||||
branchNameStrict: true,
|
branchNameStrict: true,
|
||||||
}
|
}
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
## [1.72.0](https://github.com/homarr-labs/homarr/compare/v1.71.0...v1.72.0) (2026-07-24)
|
||||||
|
|
||||||
## [1.71.0](https://github.com/homarr-labs/homarr/compare/v1.70.0...v1.71.0) (2026-07-17)
|
## [1.71.0](https://github.com/homarr-labs/homarr/compare/v1.70.0...v1.71.0) (2026-07-17)
|
||||||
|
|
||||||
## [1.70.0](https://github.com/homarr-labs/homarr/compare/v1.69.2...v1.70.0) (2026-07-10)
|
## [1.70.0](https://github.com/homarr-labs/homarr/compare/v1.69.2...v1.70.0) (2026-07-10)
|
||||||
|
|||||||
@@ -55,9 +55,9 @@ A random secret can be generated by using the following command: `openssl rand -
|
|||||||
|
|
||||||
| Environment Variable | Description | Possible values | Default |
|
| Environment Variable | Description | Possible values | Default |
|
||||||
| ------------------------ | ----------- | --------------- | ------- |
|
| ------------------------ | ----------- | --------------- | ------- |
|
||||||
| ``DOCKER_HOSTNAMES`` | Comma seperated list of hostnames to connect to | For example `localhost,docker.example.com` | - |
|
| ``DOCKER_HOSTNAMES`` | Comma-separated list of hostnames to connect to | For example `localhost,docker.example.com` | - |
|
||||||
| ``DOCKER_PORTS`` | Comma seperated list of ports to connect to | For example `2375,2376` | - |
|
| ``DOCKER_PORTS`` | Comma-separated list of ports to connect to | For example `2375,2376` | - |
|
||||||
| ``DOCKER_SOCKET_PATHS`` | Comma seperated list of paths to sockets | For example `/var/run/docker.sock,/run/user/1000/podman/podman.sock` | - |
|
| ``DOCKER_SOCKET_PATHS`` | Comma-separated list of mounted Docker-compatible socket paths. See the [Docker and Podman integration guide](/docs/integrations/docker) | For example `/var/run/docker.sock,/var/run/podman.sock` | - |
|
||||||
|
|
||||||
## Database
|
## Database
|
||||||
| Environment Variable | Description | Possible values | Default |
|
| Environment Variable | Description | Possible values | Default |
|
||||||
|
|||||||
@@ -127,6 +127,8 @@ Homarr supports multiple authentication options, from internal userbase (credent
|
|||||||
|
|
||||||
If you'd rather manage group memberships for OIDC users locally (instead of via the IdP), set `AUTH_OIDC_GROUPS_LOCAL_MANAGEMENT=true`. While enabled, Homarr stops syncing OIDC users' group memberships from the groups claim, and admins can add/remove OIDC users on a group's members page. If you turn this back to `false`, the next login of each user resumes the regular sync and reconciles their groups with the IdP's claim again, which may remove memberships that were added manually while local management was enabled.
|
If you'd rather manage group memberships for OIDC users locally (instead of via the IdP), set `AUTH_OIDC_GROUPS_LOCAL_MANAGEMENT=true`. While enabled, Homarr stops syncing OIDC users' group memberships from the groups claim, and admins can add/remove OIDC users on a group's members page. If you turn this back to `false`, the next login of each user resumes the regular sync and reconciles their groups with the IdP's claim again, which may remove memberships that were added manually while local management was enabled.
|
||||||
|
|
||||||
|
To let an existing credentials user also sign in with OIDC, set `AUTH_OIDC_ENABLE_DANGEROUS_CREDENTIALS_LINKING=true`. On the first OIDC sign-in, Homarr links a credentials user with the same email address instead of creating a second user. The user keeps their password login, local username and profile, groups, permissions, boards, settings, and API keys. OIDC profile and group claims do not overwrite the credentials-owned data. Homarr requires the OIDC profile to contain `email_verified: true` while this option is enabled. Only enable this when your OIDC provider verifies email addresses, because a matching email could otherwise be used to take over an existing account.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>
|
<summary>
|
||||||
Example Setup
|
Example Setup
|
||||||
@@ -204,6 +206,7 @@ Homarr supports multiple authentication options, from internal userbase (credent
|
|||||||
| ``AUTH_OIDC_NAME_ATTRIBUTE_OVERWRITE`` | Overwrite name attribute. By default it will use preferred_username if it does not contain a `@` and otherwise name. | --- |
|
| ``AUTH_OIDC_NAME_ATTRIBUTE_OVERWRITE`` | Overwrite name attribute. By default it will use preferred_username if it does not contain a `@` and otherwise name. | --- |
|
||||||
| ``AUTH_OIDC_FORCE_USERINFO`` | Force userinfo endpoint to be used for user information. | false |
|
| ``AUTH_OIDC_FORCE_USERINFO`` | Force userinfo endpoint to be used for user information. | false |
|
||||||
| ``AUTH_OIDC_ENABLE_DANGEROUS_ACCOUNT_LINKING`` | Enable account linking for OIDC provider. This will link the OIDC accounts by email. Be sure that you have verified emails to prevent stealing accounts. | false |
|
| ``AUTH_OIDC_ENABLE_DANGEROUS_ACCOUNT_LINKING`` | Enable account linking for OIDC provider. This will link the OIDC accounts by email. Be sure that you have verified emails to prevent stealing accounts. | false |
|
||||||
|
| ``AUTH_OIDC_ENABLE_DANGEROUS_CREDENTIALS_LINKING`` | Link an OIDC identity to an existing credentials user with the same email. The credentials login and existing user data are preserved. Requires the OIDC profile to contain `email_verified: true`. | false |
|
||||||
| ``AUTH_OIDC_TOKEN_ENDPOINT_AUTH_METHOD`` | Override method for the token endpoint authentication. Supported values are `client_secret_basic`, `client_secret_post`, `client_secret_jwt` and `none`. | client_secret_basic |
|
| ``AUTH_OIDC_TOKEN_ENDPOINT_AUTH_METHOD`` | Override method for the token endpoint authentication. Supported values are `client_secret_basic`, `client_secret_post`, `client_secret_jwt` and `none`. | client_secret_basic |
|
||||||
|
|
||||||
### Permission System
|
### Permission System
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
<img src="https://raw.githubusercontent.com/homarr-labs/charts/refs/heads/main/charts/homarr/icon.svg" align="right" width="92" alt="homarr logo">
|
<img src="https://raw.githubusercontent.com/homarr-labs/charts/refs/heads/main/charts/homarr/icon.svg" align="right" width="92" alt="homarr logo">
|
||||||
|
|
||||||

|

|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
A Helm chart to deploy homarr for Kubernetes
|
A Helm chart to deploy homarr for Kubernetes
|
||||||
|
|
||||||
@@ -259,7 +259,7 @@ httproute:
|
|||||||
value: /
|
value: /
|
||||||
backendRefs:
|
backendRefs:
|
||||||
- name: homarr
|
- name: homarr
|
||||||
port: 8080
|
port: 7575
|
||||||
````
|
````
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
@@ -419,17 +419,17 @@ All available values are listed on the [artifacthub](https://artifacthub.io/pack
|
|||||||
| envSecrets.dbEncryption.key | string | `"db-encryption-key"` | Secret key for SECRET_ENCRYPTION_KEY can be generated with `openssl rand -hex 32` |
|
| envSecrets.dbEncryption.key | string | `"db-encryption-key"` | Secret key for SECRET_ENCRYPTION_KEY can be generated with `openssl rand -hex 32` |
|
||||||
| fullnameOverride | string | `""` | Overrides chart's fullname |
|
| fullnameOverride | string | `""` | Overrides chart's fullname |
|
||||||
| hostAliases | list | `[]` | Add static entries to /etc/hosts in the Pod. This is useful in the following cases: - You are running in a dual-stack cluster (IPv4 + IPv6) and want to force usage of IPv4 for specific hostnames - Your application is having DNS resolution issues or IPv6 preference issues - You need to override or simulate DNS entries without changing global DNS - You are running in an air-gapped or isolated environment without external DNS Example: hostAliases: - ip: "192.168.1.10" hostnames: - "example.com" - "example.internal" |
|
| hostAliases | list | `[]` | Add static entries to /etc/hosts in the Pod. This is useful in the following cases: - You are running in a dual-stack cluster (IPv4 + IPv6) and want to force usage of IPv4 for specific hostnames - Your application is having DNS resolution issues or IPv6 preference issues - You need to override or simulate DNS entries without changing global DNS - You are running in an air-gapped or isolated environment without external DNS Example: hostAliases: - ip: "192.168.1.10" hostnames: - "example.com" - "example.internal" |
|
||||||
| httproute | object | `{"enabled":false,"hostnames":["chart-example.local"],"parentRefs":[{"name":"my-gateway","namespace":"default"}],"rules":[{"backendRefs":[{"name":"homarr","port":8080}],"filters":[],"matches":[{"path":{"type":"PathPrefix","value":"/"}}]}]}` | Gateway API HTTPRoute configuration |
|
| httproute | object | `{"enabled":false,"hostnames":["chart-example.local"],"parentRefs":[{"name":"my-gateway","namespace":"default"}],"rules":[{"backendRefs":[{"name":"homarr","port":7575}],"filters":[],"matches":[{"path":{"type":"PathPrefix","value":"/"}}]}]}` | Gateway API HTTPRoute configuration |
|
||||||
| httproute.enabled | bool | `false` | Enable HTTPRoute |
|
| httproute.enabled | bool | `false` | Enable HTTPRoute |
|
||||||
| httproute.hostnames | list | `["chart-example.local"]` | Hostnames this route matches (similar to ingress.hosts.host) |
|
| httproute.hostnames | list | `["chart-example.local"]` | Hostnames this route matches (similar to ingress.hosts.host) |
|
||||||
| httproute.parentRefs | list | `[{"name":"my-gateway","namespace":"default"}]` | References to the parent Gateway(s) this route attaches to. Each item must include at least a `name`, and optionally a `namespace`. |
|
| httproute.parentRefs | list | `[{"name":"my-gateway","namespace":"default"}]` | References to the parent Gateway(s) this route attaches to. Each item must include at least a `name`, and optionally a `namespace`. |
|
||||||
| httproute.rules | list | `[{"backendRefs":[{"name":"homarr","port":8080}],"filters":[],"matches":[{"path":{"type":"PathPrefix","value":"/"}}]}]` | List of routing rules. Each rule can include: - matches: path/header/query matching - filters: optional transformations (redirects, header modifications, etc.) - backendRefs: one or more Kubernetes Services to forward traffic to |
|
| httproute.rules | list | `[{"backendRefs":[{"name":"homarr","port":7575}],"filters":[],"matches":[{"path":{"type":"PathPrefix","value":"/"}}]}]` | List of routing rules. Each rule can include: - matches: path/header/query matching - filters: optional transformations (redirects, header modifications, etc.) - backendRefs: one or more Kubernetes Services to forward traffic to |
|
||||||
| httproute.rules[0].filters | list | `[]` | Optional filters for this rule (default: empty) |
|
| httproute.rules[0].filters | list | `[]` | Optional filters for this rule (default: empty) |
|
||||||
| httproute.rules[0].matches[0].path.type | string | `"PathPrefix"` | Path match type. One of: Exact, PathPrefix, RegularExpression |
|
| httproute.rules[0].matches[0].path.type | string | `"PathPrefix"` | Path match type. One of: Exact, PathPrefix, RegularExpression |
|
||||||
| httproute.rules[0].matches[0].path.value | string | `"/"` | Path value to match |
|
| httproute.rules[0].matches[0].path.value | string | `"/"` | Path value to match |
|
||||||
| image.pullPolicy | string | `"IfNotPresent"` | Image pull policy |
|
| image.pullPolicy | string | `"IfNotPresent"` | Image pull policy |
|
||||||
| image.repository | string | `"ghcr.io/homarr-labs/homarr"` | Image repository |
|
| image.repository | string | `"ghcr.io/homarr-labs/homarr"` | Image repository |
|
||||||
| image.tag | string | `"v1.70.0"` | Overrides the image tag whose default is the chart appVersion |
|
| image.tag | string | `"v1.72.0"` | Overrides the image tag whose default is the chart appVersion |
|
||||||
| imagePullSecrets | list | `[]` | Secrets for Docker registry |
|
| imagePullSecrets | list | `[]` | Secrets for Docker registry |
|
||||||
| ingress.annotations | object | `{}` | Ingress annotations |
|
| ingress.annotations | object | `{}` | Ingress annotations |
|
||||||
| ingress.enabled | bool | `false` | Enable ingress |
|
| ingress.enabled | bool | `false` | Enable ingress |
|
||||||
|
|||||||
@@ -55,6 +55,74 @@ services:
|
|||||||
With docker run, add this parameter: `-v /var/run/docker.sock:/var/run/docker.sock`.
|
With docker run, add this parameter: `-v /var/run/docker.sock:/var/run/docker.sock`.
|
||||||
In Windows, you'll need to adjust the slashes: `-v //var/run/docker.sock:/var/run/docker.sock`
|
In Windows, you'll need to adjust the slashes: `-v //var/run/docker.sock:/var/run/docker.sock`
|
||||||
|
|
||||||
|
### Using Podman
|
||||||
|
|
||||||
|
On Linux, Homarr can connect to Podman's [Docker-compatible API](https://docs.podman.io/en/latest/markdown/podman-system-service.1.html).
|
||||||
|
The Podman API socket must be running and mounted into the Homarr container.
|
||||||
|
The socket grants full access to Podman, including arbitrary code execution as the user running the API, so only mount it into trusted containers.
|
||||||
|
|
||||||
|
For rootless Podman, enable the socket for the user that runs Homarr:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
systemctl --user enable --now podman.socket
|
||||||
|
```
|
||||||
|
|
||||||
|
The rootless socket is located at `$XDG_RUNTIME_DIR/podman/podman.sock` (usually `/run/user/<uid>/podman/podman.sock`).
|
||||||
|
You can confirm the path with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
podman info --format '{{.Host.RemoteSocket.Path}}'
|
||||||
|
```
|
||||||
|
|
||||||
|
Mount that socket into the Homarr container and point `DOCKER_SOCKET_PATHS` to its path **inside** the container:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
homarr:
|
||||||
|
container_name: homarr
|
||||||
|
image: ghcr.io/homarr-labs/homarr:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- ${XDG_RUNTIME_DIR}/podman/podman.sock:/var/run/podman.sock
|
||||||
|
- ./homarr/appdata:/appdata
|
||||||
|
environment:
|
||||||
|
SECRET_ENCRYPTION_KEY: your_64_character_hex_string
|
||||||
|
DOCKER_SOCKET_PATHS: /var/run/podman.sock
|
||||||
|
ports:
|
||||||
|
- "7575:7575"
|
||||||
|
```
|
||||||
|
|
||||||
|
Start Homarr with `podman compose up -d`.
|
||||||
|
Run the compose project as the same user that owns the rootless Podman socket so `$XDG_RUNTIME_DIR` resolves to the correct path.
|
||||||
|
To keep the user socket available after logout and across reboots, enable lingering with `loginctl enable-linger <user>`.
|
||||||
|
|
||||||
|
For rootful Podman, enable the system socket with `sudo systemctl enable --now podman.socket`.
|
||||||
|
Its default path is `/run/podman/podman.sock`; mount that path instead and start Homarr with `sudo podman compose up -d`.
|
||||||
|
|
||||||
|
:::note SELinux
|
||||||
|
On systems with SELinux enabled, Podman's documentation recommends disabling label separation for a container that accesses the API socket.
|
||||||
|
Add the following to the Homarr service:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
security_opt:
|
||||||
|
- label=disable
|
||||||
|
```
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
You can connect Homarr to multiple Docker-compatible sockets by mounting each socket and listing their in-container paths, separated by commas:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
homarr:
|
||||||
|
image: ghcr.io/homarr-labs/homarr:latest
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
- ${XDG_RUNTIME_DIR}/podman/podman.sock:/var/run/podman.sock
|
||||||
|
environment:
|
||||||
|
DOCKER_SOCKET_PATHS: /var/run/docker.sock,/var/run/podman.sock
|
||||||
|
```
|
||||||
|
|
||||||
### Managing your Docker containers within Homarr
|
### Managing your Docker containers within Homarr
|
||||||
Homarr allows you to interact with Docker containers running on your system.
|
Homarr allows you to interact with Docker containers running on your system.
|
||||||
Each container row has an action menu with the following options:
|
Each container row has an action menu with the following options:
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import beszelSystemStats from "./img/beszel-system-stats.png";
|
|||||||
|
|
||||||
<WidgetHeader widget={beszelSystemStatsWidget} categories={["System Monitoring", "Charts"]} />
|
<WidgetHeader widget={beszelSystemStatsWidget} categories={["System Monitoring", "Charts"]} />
|
||||||
|
|
||||||
This widget displays time-series charts for a selected Beszel system, including CPU, memory, disk, network, and Docker container metrics. The Disk Usage chart combines the root disk and every extra filesystem reported by Beszel. You can use the realtime Live view or select a historical period ranging from 1 hour to 30 days. If the live stream drops, the widget now shows the connection failure state immediately and can switch back to historical data.
|
This widget displays time-series charts for a selected Beszel system, including CPU, memory, disk, network, and Docker container metrics. The Disk Usage chart combines the root disk and every extra filesystem reported by Beszel. You can use the realtime Live view or select a historical period ranging from 1 hour to 30 days. Live view keeps a one-minute window and pauses while the browser tab is hidden. If the live stream drops, the widget now shows the connection failure state immediately and can switch back to historical data.
|
||||||
|
|
||||||
### Screenshots
|
### Screenshots
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 210 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 122 KiB |
@@ -4,6 +4,7 @@ description: 'Allows you to view and manage your Downloads from both Torrent and
|
|||||||
hide_title: true
|
hide_title: true
|
||||||
---
|
---
|
||||||
|
|
||||||
|
import { aria2Integration } from '@site/docs/integrations/aria2';
|
||||||
import { delugeIntegration } from '@site/docs/integrations/deluge';
|
import { delugeIntegration } from '@site/docs/integrations/deluge';
|
||||||
import { nzbgetIntegration } from '@site/docs/integrations/nzbget';
|
import { nzbgetIntegration } from '@site/docs/integrations/nzbget';
|
||||||
import { qBittorentIntegration } from '@site/docs/integrations/q-bittorent';
|
import { qBittorentIntegration } from '@site/docs/integrations/q-bittorent';
|
||||||
@@ -14,9 +15,6 @@ import { AddingWidget } from '@site/src/components/widgets/adding';
|
|||||||
import { WidgetConfig } from '@site/src/components/widgets/configuration';
|
import { WidgetConfig } from '@site/src/components/widgets/configuration';
|
||||||
import { WidgetHeader } from '@site/src/components/widgets/header';
|
import { WidgetHeader } from '@site/src/components/widgets/header';
|
||||||
import { WidgetIntegrations } from '@site/src/components/widgets/integrations';
|
import { WidgetIntegrations } from '@site/src/components/widgets/integrations';
|
||||||
import { IconAd } from "@tabler/icons-react";
|
|
||||||
import TabItem from '@theme/TabItem';
|
|
||||||
import Tabs from '@theme/Tabs';
|
|
||||||
import { downloadsWidget } from '.';
|
import { downloadsWidget } from '.';
|
||||||
|
|
||||||
|
|
||||||
@@ -25,16 +23,37 @@ import { downloadsWidget } from '.';
|
|||||||
categories={['Torrent client', 'Usenet client', 'Downloads']}
|
categories={['Torrent client', 'Usenet client', 'Downloads']}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
This widget displays a list of torrents or usenet-articles that are currently being downloaded, along with their progress and other relevant information.
|
This widget displays a list of torrents or usenet-articles that are currently being downloaded, along with their progress and other relevant information. It supports 7 download client integrations and provides a rich, responsive table interface.
|
||||||
|
|
||||||
### Screenshots
|
### Screenshots
|
||||||
|
|
||||||
import downloadsCard from './img/screenshot.png';
|
import downloadsCard from './img/screenshot.png';
|
||||||
|
import contextMenuImg from './img/context-menu.png';
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<img src={downloadsCard} alt="downloads" width={128 * 4} />
|
<img src={downloadsCard} alt="Downloads widget showing torrent and usenet items" width={128 * 4} />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
#### Right-click context menu
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<img src={contextMenuImg} alt="Downloads widget context menu with pause, delete, and copy actions" width={128 * 4} />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
- **Responsive table** — columns automatically adapt to widget width, hiding less important columns at smaller sizes
|
||||||
|
- **Sortable columns** — click any column header to sort ascending/descending
|
||||||
|
- **Column customization** — choose which columns to display via the widget options panel
|
||||||
|
- **Right-click context menu** — pause, resume, delete downloads, or copy download names directly from the context menu
|
||||||
|
- **Row expansion** — click any row to see full details inline without opening a separate modal
|
||||||
|
- **Hover tooltips** — hover a download name to see size, speeds, ETA, ratio, and category
|
||||||
|
- **Global stats bar** — toggle a summary bar showing queue progress, total size, speeds, ratio, and per-state counts
|
||||||
|
- **Client filtering** — filter downloads by integration or status using the footer filter panel
|
||||||
|
- **Global controls** — pause/resume all downloads across all clients from the footer bar
|
||||||
|
- **Status indicators** — color-coded badges show download state at a glance
|
||||||
|
- **Speed overview** — total download and upload speeds displayed in the footer
|
||||||
|
|
||||||
### Supported Integrations
|
### Supported Integrations
|
||||||
|
|
||||||
<WidgetIntegrations items={[{
|
<WidgetIntegrations items={[{
|
||||||
@@ -52,16 +71,23 @@ import downloadsCard from './img/screenshot.png';
|
|||||||
}, {
|
}, {
|
||||||
integration: qBittorentIntegration,
|
integration: qBittorentIntegration,
|
||||||
note: "Torrent client"
|
note: "Torrent client"
|
||||||
|
}, {
|
||||||
|
integration: aria2Integration,
|
||||||
|
note: "Multi-protocol download client"
|
||||||
}, {
|
}, {
|
||||||
integration: slskdIntegration,
|
integration: slskdIntegration,
|
||||||
note: "Soulseek client"
|
note: "Soulseek client (read-only)"
|
||||||
}]} />
|
}]} />
|
||||||
|
|
||||||
### Interactions
|
### Interactions
|
||||||
|
|
||||||
- Pause / Resume one download by clicking on the according icon.
|
- **Right-click** any download to open a context menu with pause/resume, delete, and copy actions
|
||||||
- Delete one download by clicking on the trash icon. (Can also delete the files)
|
- **Click** any row to expand it and see full download details inline
|
||||||
- Pause / Resume all downloads by using the bottom button.
|
- **Hover** a download name for a quick stats tooltip
|
||||||
|
- **Stats toggle** — show or hide the global stats bar from the footer
|
||||||
|
- **Pause / Resume** all downloads using the footer controls
|
||||||
|
- **Filter** by integration or status using the filter button in the footer
|
||||||
|
- **Sort** by clicking column headers (with persistent sort direction)
|
||||||
|
|
||||||
### Adding the widget
|
### Adding the widget
|
||||||
|
|
||||||
|
|||||||
@@ -2,26 +2,23 @@ import { WidgetDefinition } from "@site/src/types";
|
|||||||
import { IconDownload } from "@tabler/icons-react";
|
import { IconDownload } from "@tabler/icons-react";
|
||||||
|
|
||||||
const columnsList = [
|
const columnsList = [
|
||||||
"id",
|
|
||||||
"actions",
|
|
||||||
"added",
|
|
||||||
"category",
|
|
||||||
"downSpeed",
|
|
||||||
"index",
|
|
||||||
"integration",
|
|
||||||
"name",
|
"name",
|
||||||
"progress",
|
"progress",
|
||||||
|
"size",
|
||||||
|
"downSpeed",
|
||||||
|
"upSpeed",
|
||||||
|
"time",
|
||||||
|
"state",
|
||||||
|
"added",
|
||||||
"ratio",
|
"ratio",
|
||||||
"received",
|
"received",
|
||||||
"sent",
|
"sent",
|
||||||
"size",
|
"category",
|
||||||
"state",
|
"integration",
|
||||||
"time",
|
"index",
|
||||||
"type",
|
"type",
|
||||||
"upSpeed",
|
|
||||||
];
|
];
|
||||||
const sortingExclusion = ["actions", "id", "state"];
|
const sortColumns = columnsList.filter((c) => !["state", "category", "integration"].includes(c));
|
||||||
const columnsSort = columnsList.filter((column) => !sortingExclusion.some((exclusion) => exclusion === column));
|
|
||||||
|
|
||||||
export const downloadsWidget: WidgetDefinition = {
|
export const downloadsWidget: WidgetDefinition = {
|
||||||
icon: IconDownload,
|
icon: IconDownload,
|
||||||
@@ -32,25 +29,20 @@ export const downloadsWidget: WidgetDefinition = {
|
|||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
name: "Columns to show",
|
name: "Columns to show",
|
||||||
description: "Select the columns you want to display in the widget.",
|
description:
|
||||||
|
"Select the columns you want to display in the widget. Columns automatically hide/show based on widget width.",
|
||||||
values: `List of columns: ${columnsList.join(", ")}`,
|
values: `List of columns: ${columnsList.join(", ")}`,
|
||||||
defaultValue: ["integration", "name", "progress", "time", "actions"].join(", "),
|
defaultValue: ["name", "progress", "downSpeed", "time", "state"].join(", "),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Enable items sorting",
|
name: "Default sort column",
|
||||||
description: "Enables the sorting in the table.",
|
description: "The column used for initial sorting when the widget loads.",
|
||||||
values: { type: "boolean" },
|
defaultValue: "progress",
|
||||||
defaultValue: "no",
|
values: `List of columns: ${sortColumns.join(", ")}`,
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Column used for sorting by default",
|
|
||||||
description: "By default it will sort by this column.",
|
|
||||||
defaultValue: "type",
|
|
||||||
values: `List of columns: ${columnsSort.join(", ")}`,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Invert sorting",
|
name: "Invert sorting",
|
||||||
description: "This will invert the sorting order of the table.",
|
description: "This will invert the default sorting order.",
|
||||||
values: { type: "boolean" },
|
values: { type: "boolean" },
|
||||||
defaultValue: "no",
|
defaultValue: "no",
|
||||||
},
|
},
|
||||||
@@ -76,13 +68,13 @@ export const downloadsWidget: WidgetDefinition = {
|
|||||||
name: "Hide completed torrent under this threshold (in kiB/s)",
|
name: "Hide completed torrent under this threshold (in kiB/s)",
|
||||||
description:
|
description:
|
||||||
"This will hide completed torrent entries that have a download speed below the specified threshold.",
|
"This will hide completed torrent entries that have a download speed below the specified threshold.",
|
||||||
values: "Any number above 1, 0 to disable",
|
values: "Any number above 0, 0 to disable",
|
||||||
defaultValue: "0",
|
defaultValue: "0",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Categories/names to filter",
|
name: "Categories/labels to filter",
|
||||||
description: "You can filter the items by categories or names. Use a comma to separate multiple values.",
|
description: "You can filter the items by categories or labels. Use a comma to separate multiple values.",
|
||||||
values: "Comma-separated list of categories or names",
|
values: "Comma-separated list of categories or labels",
|
||||||
defaultValue: "-",
|
defaultValue: "-",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -94,13 +86,13 @@ export const downloadsWidget: WidgetDefinition = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Use filter to calculate Ratio",
|
name: "Use filter to calculate Ratio",
|
||||||
description: "This will use the filter to calculate the ratio of items shown in the widget.",
|
description: "This will use the category filter when calculating the global torrent ratio.",
|
||||||
values: { type: "boolean" },
|
values: { type: "boolean" },
|
||||||
defaultValue: "yes",
|
defaultValue: "yes",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Limit items per integration",
|
name: "Limit items per integration",
|
||||||
description: "This will limit the number of items shown per integration, not globally",
|
description: "This will limit the number of items shown per integration, not globally.",
|
||||||
values: "Any number above 1",
|
values: "Any number above 1",
|
||||||
defaultValue: "50",
|
defaultValue: "50",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ export default async function ManageLayout({ children }: PropsWithChildren) {
|
|||||||
icon: IconBox,
|
icon: IconBox,
|
||||||
href: "/manage/apps",
|
href: "/manage/apps",
|
||||||
label: t("items.apps"),
|
label: t("items.apps"),
|
||||||
hidden: !session?.user.permissions.includes("board-modify-all"),
|
hidden: !session?.user.permissions.includes("app-create"),
|
||||||
iconProps: {
|
iconProps: {
|
||||||
strokeWidth: 2.5,
|
strokeWidth: 2.5,
|
||||||
},
|
},
|
||||||
@@ -71,20 +71,20 @@ export default async function ManageLayout({ children }: PropsWithChildren) {
|
|||||||
icon: IconAffiliateFilled,
|
icon: IconAffiliateFilled,
|
||||||
href: "/manage/integrations",
|
href: "/manage/integrations",
|
||||||
label: t("items.integrations"),
|
label: t("items.integrations"),
|
||||||
hidden: !session,
|
hidden: !session?.user.permissions.includes("integration-create"),
|
||||||
"data-onboarding-tour-id": "manage-integrations",
|
"data-onboarding-tour-id": "manage-integrations",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: IconApi,
|
icon: IconApi,
|
||||||
href: "/manage/custom-widgets",
|
href: "/manage/custom-widgets",
|
||||||
label: t("items.customWidgets"),
|
label: t("items.customWidgets"),
|
||||||
hidden: !session,
|
hidden: !session?.user.permissions.includes("admin"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: IconSearch,
|
icon: IconSearch,
|
||||||
href: "/manage/search-engines",
|
href: "/manage/search-engines",
|
||||||
label: t("items.searchEngies"),
|
label: t("items.searchEngies"),
|
||||||
hidden: !session,
|
hidden: !session?.user.permissions.includes("search-engine-create"),
|
||||||
iconProps: {
|
iconProps: {
|
||||||
strokeWidth: 2.5,
|
strokeWidth: 2.5,
|
||||||
},
|
},
|
||||||
@@ -94,7 +94,7 @@ export default async function ManageLayout({ children }: PropsWithChildren) {
|
|||||||
icon: IconPhotoFilled,
|
icon: IconPhotoFilled,
|
||||||
href: "/manage/medias",
|
href: "/manage/medias",
|
||||||
label: t("items.medias"),
|
label: t("items.medias"),
|
||||||
hidden: !session,
|
hidden: !session?.user.permissions.includes("media-upload"),
|
||||||
"data-onboarding-tour-id": "manage-medias",
|
"data-onboarding-tour-id": "manage-medias",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ 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";
|
import { WidgetContextMenu } from "./widget-context-menu";
|
||||||
|
import { removePersistedWidgetQueries } from "./widget-query-recovery";
|
||||||
|
|
||||||
interface BoardItemContentProps {
|
interface BoardItemContentProps {
|
||||||
item: SectionItem;
|
item: SectionItem;
|
||||||
@@ -112,7 +113,7 @@ const InnerContent = ({ item, ...dimensions }: InnerContentProps) => {
|
|||||||
{({ reset }) => (
|
{({ reset }) => (
|
||||||
<ErrorBoundary
|
<ErrorBoundary
|
||||||
onReset={() => {
|
onReset={() => {
|
||||||
void queryClient.invalidateQueries({ queryKey: [["widget"]] });
|
removePersistedWidgetQueries(queryClient);
|
||||||
reset();
|
reset();
|
||||||
}}
|
}}
|
||||||
fallbackRender={({ resetErrorBoundary, error }) => (
|
fallbackRender={({ resetErrorBoundary, error }) => (
|
||||||
|
|||||||
@@ -0,0 +1,54 @@
|
|||||||
|
import { QueryClient } from "@tanstack/react-query";
|
||||||
|
import { describe, expect, test } from "vitest";
|
||||||
|
|
||||||
|
import { removePersistedWidgetQueries } from "./widget-query-recovery";
|
||||||
|
|
||||||
|
describe("removePersistedWidgetQueries", () => {
|
||||||
|
test("removes stale widget queries and allows fresh data to be fetched", async () => {
|
||||||
|
const queryClient = new QueryClient();
|
||||||
|
const crashedWidgetQueryKey = [["widget", "mediaServer", "getCurrentStreams"], { input: {} }];
|
||||||
|
const unrelatedQueryKey = [["user", "me"], { input: {} }];
|
||||||
|
|
||||||
|
queryClient.setQueryData(crashedWidgetQueryKey, "stale");
|
||||||
|
queryClient.setQueryData(unrelatedQueryKey, "unrelated");
|
||||||
|
|
||||||
|
removePersistedWidgetQueries(queryClient);
|
||||||
|
|
||||||
|
expect(queryClient.getQueryData(crashedWidgetQueryKey)).toBeUndefined();
|
||||||
|
expect(queryClient.getQueryData(unrelatedQueryKey)).toBe("unrelated");
|
||||||
|
await expect(
|
||||||
|
queryClient.fetchQuery({ queryKey: crashedWidgetQueryKey, queryFn: () => Promise.resolve("fresh") }),
|
||||||
|
).resolves.toBe("fresh");
|
||||||
|
});
|
||||||
|
|
||||||
|
test("removes persisted queries outside the widget router", () => {
|
||||||
|
const queryClient = new QueryClient();
|
||||||
|
const dockerQueryKey = [["docker", "getContainers"], { input: {} }];
|
||||||
|
const appQueryKey = [["app", "byId"], { input: {} }];
|
||||||
|
const unrelatedQueryKey = [["user", "me"], { input: {} }];
|
||||||
|
|
||||||
|
queryClient.setQueryData(dockerQueryKey, "stale");
|
||||||
|
queryClient.setQueryData(appQueryKey, "stale");
|
||||||
|
queryClient.setQueryData(unrelatedQueryKey, "unrelated");
|
||||||
|
|
||||||
|
removePersistedWidgetQueries(queryClient);
|
||||||
|
|
||||||
|
expect(queryClient.getQueryData(dockerQueryKey)).toBeUndefined();
|
||||||
|
expect(queryClient.getQueryData(appQueryKey)).toBeUndefined();
|
||||||
|
expect(queryClient.getQueryData(unrelatedQueryKey)).toBe("unrelated");
|
||||||
|
});
|
||||||
|
|
||||||
|
test("removes persisted widget queries when the widget kind and query path differ", () => {
|
||||||
|
const queryClient = new QueryClient();
|
||||||
|
const crashedWidgetQueryKey = [["widget", "anchorNotes", "getNote"], { input: {} }];
|
||||||
|
const unrelatedQueryKey = [["user", "me"], { input: {} }];
|
||||||
|
|
||||||
|
queryClient.setQueryData(crashedWidgetQueryKey, "stale");
|
||||||
|
queryClient.setQueryData(unrelatedQueryKey, "unrelated");
|
||||||
|
|
||||||
|
removePersistedWidgetQueries(queryClient);
|
||||||
|
|
||||||
|
expect(queryClient.getQueryData(crashedWidgetQueryKey)).toBeUndefined();
|
||||||
|
expect(queryClient.getQueryData(unrelatedQueryKey)).toBe("unrelated");
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
import type { QueryClient } from "@tanstack/react-query";
|
||||||
|
|
||||||
|
import { isPersistableWidgetQueryKey } from "@homarr/api/query-cache";
|
||||||
|
|
||||||
|
export const removePersistedWidgetQueries = (queryClient: QueryClient) => {
|
||||||
|
queryClient.removeQueries({ predicate: (query) => isPersistableWidgetQueryKey(query.queryKey) });
|
||||||
|
};
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=24.18.0",
|
"node": ">=24.18.0",
|
||||||
"pnpm": ">=11.13.1"
|
"pnpm": ">=11.15.1"
|
||||||
},
|
},
|
||||||
"packageManager": "pnpm@11.13.1"
|
"packageManager": "pnpm@11.15.1"
|
||||||
}
|
}
|
||||||
+3
-3
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "homarr",
|
"name": "homarr",
|
||||||
"version": "1.71.0",
|
"version": "1.72.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "cross-env CI=true turbo build",
|
"build": "cross-env CI=true turbo build",
|
||||||
@@ -69,7 +69,7 @@
|
|||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=24.18.0",
|
"node": ">=24.18.0",
|
||||||
"pnpm": ">=11.13.1"
|
"pnpm": ">=11.15.1"
|
||||||
},
|
},
|
||||||
"packageManager": "pnpm@11.13.1"
|
"packageManager": "pnpm@11.15.1"
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
import { describe, expect, test } from "vitest";
|
||||||
|
|
||||||
|
import { BoundedAsyncQueue } from "../bounded-async-queue";
|
||||||
|
|
||||||
|
describe("BoundedAsyncQueue", () => {
|
||||||
|
test("keeps only the newest values when the queue is full", async () => {
|
||||||
|
const queue = new BoundedAsyncQueue<number>(2);
|
||||||
|
queue.push(1);
|
||||||
|
queue.push(2);
|
||||||
|
queue.push(3);
|
||||||
|
queue.close();
|
||||||
|
|
||||||
|
await expect(queue.next()).resolves.toEqual({ value: 2, done: false });
|
||||||
|
await expect(queue.next()).resolves.toEqual({ value: 3, done: false });
|
||||||
|
await expect(queue.next()).resolves.toEqual({ value: undefined, done: true });
|
||||||
|
});
|
||||||
|
|
||||||
|
test("resolves a pending read as soon as a value arrives", async () => {
|
||||||
|
const queue = new BoundedAsyncQueue<string>(1);
|
||||||
|
const next = queue.next();
|
||||||
|
|
||||||
|
queue.push("latest");
|
||||||
|
|
||||||
|
await expect(next).resolves.toEqual({ value: "latest", done: false });
|
||||||
|
});
|
||||||
|
|
||||||
|
test("resolves a pending read when the producer closes", async () => {
|
||||||
|
const queue = new BoundedAsyncQueue<number>(1);
|
||||||
|
const next = queue.next();
|
||||||
|
|
||||||
|
queue.close();
|
||||||
|
|
||||||
|
await expect(next).resolves.toEqual({ value: undefined, done: true });
|
||||||
|
});
|
||||||
|
|
||||||
|
test("rejects a pending read when the producer fails", async () => {
|
||||||
|
const queue = new BoundedAsyncQueue<number>(1);
|
||||||
|
const next = queue.next();
|
||||||
|
const error = new Error("upstream failed");
|
||||||
|
|
||||||
|
queue.fail(error);
|
||||||
|
|
||||||
|
await expect(next).rejects.toBe(error);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { TRPCError } from "@trpc/server";
|
import { TRPCError } from "@trpc/server";
|
||||||
import { observable } from "@trpc/server/observable";
|
|
||||||
import { z } from "zod/v4";
|
import { z } from "zod/v4";
|
||||||
|
|
||||||
import { createLogger } from "@homarr/core/infrastructure/logs";
|
import { createLogger } from "@homarr/core/infrastructure/logs";
|
||||||
@@ -14,8 +13,10 @@ import {
|
|||||||
import { settleIntegrationQueries } from "../../settle-integrations";
|
import { settleIntegrationQueries } from "../../settle-integrations";
|
||||||
import { createManyIntegrationMiddleware } from "../../middlewares/integration";
|
import { createManyIntegrationMiddleware } from "../../middlewares/integration";
|
||||||
import { createTRPCRouter, publicProcedure } from "../../trpc";
|
import { createTRPCRouter, publicProcedure } from "../../trpc";
|
||||||
|
import { BoundedAsyncQueue } from "./bounded-async-queue";
|
||||||
|
|
||||||
const logger = createLogger({ module: "beszelRouter" });
|
const logger = createLogger({ module: "beszelRouter" });
|
||||||
|
const MAX_PENDING_LIVE_EVENTS = 4;
|
||||||
|
|
||||||
const errorMessage = (error: unknown) => (error instanceof Error ? error.message : String(error));
|
const errorMessage = (error: unknown) => (error instanceof Error ? error.message : String(error));
|
||||||
|
|
||||||
@@ -203,98 +204,94 @@ export const beszelRouter = createTRPCRouter({
|
|||||||
systemId: z.string(),
|
systemId: z.string(),
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.subscription(({ ctx, input }) => {
|
.subscription(async function* ({ ctx, input, signal }) {
|
||||||
return observable<LiveStatsEvent>((emit) => {
|
const integration = ctx.integrations[0];
|
||||||
const controller = new AbortController();
|
if (!integration) {
|
||||||
let isActive = true;
|
throw new TRPCError({ code: "BAD_REQUEST", message: "At least one Beszel integrationId is required" });
|
||||||
let emittedEventCount = 0;
|
}
|
||||||
|
|
||||||
logger.debug("Beszel realtime subscription started", {
|
const queue = new BoundedAsyncQueue<LiveStatsEvent>(MAX_PENDING_LIVE_EVENTS);
|
||||||
userId: ctx.session?.user?.id,
|
const controller = new AbortController();
|
||||||
integrationIds: ctx.integrations.map((integration) => integration.id),
|
let emittedEventCount = 0;
|
||||||
systemId: input.systemId,
|
|
||||||
});
|
|
||||||
|
|
||||||
|
const stop = () => {
|
||||||
|
controller.abort();
|
||||||
|
void queue.return();
|
||||||
|
};
|
||||||
|
if (signal?.aborted) return;
|
||||||
|
signal?.addEventListener("abort", stop, { once: true });
|
||||||
|
|
||||||
|
logger.debug("Beszel realtime subscription started", {
|
||||||
|
userId: ctx.session?.user?.id,
|
||||||
|
integrationIds: ctx.integrations.map((candidate) => candidate.id),
|
||||||
|
systemId: input.systemId,
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
const instance = await createIntegrationAsync(integration);
|
||||||
|
if (controller.signal.aborted) return;
|
||||||
void (async () => {
|
void (async () => {
|
||||||
const integration = ctx.integrations[0];
|
|
||||||
if (!integration) {
|
|
||||||
emit.error(
|
|
||||||
new TRPCError({ code: "BAD_REQUEST", message: "At least one Beszel integrationId is required" }),
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const instance = await createIntegrationAsync(integration);
|
if (typeof instance.subscribeRealtimeMetrics !== "function") {
|
||||||
if (typeof instance.subscribeRealtimeMetrics === "function") {
|
throw new TRPCError({
|
||||||
await instance.subscribeRealtimeMetrics(
|
code: "METHOD_NOT_SUPPORTED",
|
||||||
input.systemId,
|
message: `Integration ${integration.kind} does not support realtime metrics`,
|
||||||
(event) => {
|
|
||||||
if (!isActive) return;
|
|
||||||
emittedEventCount += 1;
|
|
||||||
if (emittedEventCount <= 2 || emittedEventCount % 60 === 0) {
|
|
||||||
logger.debug("Forwarding Beszel realtime events", {
|
|
||||||
userId: ctx.session?.user?.id,
|
|
||||||
integrationId: integration.id,
|
|
||||||
systemId: input.systemId,
|
|
||||||
eventType: event.type,
|
|
||||||
emittedEventCount,
|
|
||||||
statsCount: Array.isArray(event.record.stats) ? event.record.stats.length : undefined,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
emit.next(event);
|
|
||||||
},
|
|
||||||
controller.signal,
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
emit.error(
|
|
||||||
new TRPCError({
|
|
||||||
code: "METHOD_NOT_SUPPORTED",
|
|
||||||
message: `Integration ${integration.kind} does not support realtime metrics`,
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
if (isActive) {
|
|
||||||
logger.warn("Beszel realtime subscription failed", {
|
|
||||||
userId: ctx.session?.user?.id,
|
|
||||||
integrationId: integration.id,
|
|
||||||
systemId: input.systemId,
|
|
||||||
emittedEventCount,
|
|
||||||
error: errorMessage(error),
|
|
||||||
});
|
});
|
||||||
emit.error(
|
|
||||||
error instanceof TRPCError
|
|
||||||
? error
|
|
||||||
: new TRPCError({
|
|
||||||
code: "INTERNAL_SERVER_ERROR",
|
|
||||||
message: error instanceof Error ? error.message : String(error),
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (isActive) {
|
await instance.subscribeRealtimeMetrics(
|
||||||
logger.debug("Beszel realtime subscription completed", {
|
input.systemId,
|
||||||
|
(event) => {
|
||||||
|
emittedEventCount += 1;
|
||||||
|
if (emittedEventCount <= 2 || emittedEventCount % 60 === 0) {
|
||||||
|
logger.debug("Forwarding Beszel realtime events", {
|
||||||
|
userId: ctx.session?.user?.id,
|
||||||
|
integrationId: integration.id,
|
||||||
|
systemId: input.systemId,
|
||||||
|
eventType: event.type,
|
||||||
|
emittedEventCount,
|
||||||
|
statsCount: Array.isArray(event.record.stats) ? event.record.stats.length : undefined,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
queue.push(event);
|
||||||
|
},
|
||||||
|
controller.signal,
|
||||||
|
);
|
||||||
|
queue.close();
|
||||||
|
} catch (error) {
|
||||||
|
if (controller.signal.aborted) {
|
||||||
|
queue.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.warn("Beszel realtime subscription failed", {
|
||||||
userId: ctx.session?.user?.id,
|
userId: ctx.session?.user?.id,
|
||||||
integrationId: integration.id,
|
integrationId: integration.id,
|
||||||
systemId: input.systemId,
|
systemId: input.systemId,
|
||||||
emittedEventCount,
|
emittedEventCount,
|
||||||
|
error: errorMessage(error),
|
||||||
});
|
});
|
||||||
emit.complete();
|
queue.fail(
|
||||||
|
error instanceof TRPCError
|
||||||
|
? error
|
||||||
|
: new TRPCError({
|
||||||
|
code: "INTERNAL_SERVER_ERROR",
|
||||||
|
message: error instanceof Error ? error.message : String(error),
|
||||||
|
}),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|
||||||
return () => {
|
for await (const event of queue) yield event;
|
||||||
isActive = false;
|
} finally {
|
||||||
logger.debug("Beszel realtime subscription cancelled", {
|
stop();
|
||||||
userId: ctx.session?.user?.id,
|
signal?.removeEventListener("abort", stop);
|
||||||
integrationIds: ctx.integrations.map((integration) => integration.id),
|
logger.debug("Beszel realtime subscription stopped", {
|
||||||
systemId: input.systemId,
|
userId: ctx.session?.user?.id,
|
||||||
emittedEventCount,
|
integrationId: integration.id,
|
||||||
});
|
systemId: input.systemId,
|
||||||
controller.abort();
|
emittedEventCount,
|
||||||
};
|
});
|
||||||
});
|
}
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
type QueueResult<T> = IteratorResult<T, undefined>;
|
||||||
|
|
||||||
|
type PendingRead<T> = {
|
||||||
|
resolve: (result: QueueResult<T>) => void;
|
||||||
|
reject: (reason?: unknown) => void;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A small async queue for live streams.
|
||||||
|
*
|
||||||
|
* Live metrics are snapshots, so retaining every snapshot while a client is
|
||||||
|
* slow is both unnecessary and dangerous. When the queue is full, discard
|
||||||
|
* the oldest pending snapshot and keep the newest one.
|
||||||
|
*/
|
||||||
|
export class BoundedAsyncQueue<T> implements AsyncIterableIterator<T> {
|
||||||
|
private readonly values: T[] = [];
|
||||||
|
private pendingRead: PendingRead<T> | undefined;
|
||||||
|
private closed = false;
|
||||||
|
private failed = false;
|
||||||
|
private failure: unknown;
|
||||||
|
|
||||||
|
public constructor(private readonly maxSize: number) {
|
||||||
|
if (!Number.isInteger(maxSize) || maxSize < 1) {
|
||||||
|
throw new Error("A bounded async queue requires a positive integer max size");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public push(value: T): void {
|
||||||
|
if (this.closed) return;
|
||||||
|
|
||||||
|
if (this.pendingRead) {
|
||||||
|
const pendingRead = this.pendingRead;
|
||||||
|
this.pendingRead = undefined;
|
||||||
|
pendingRead.resolve({ value, done: false });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.values.length >= this.maxSize) this.values.shift();
|
||||||
|
this.values.push(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public close(): void {
|
||||||
|
if (this.closed) return;
|
||||||
|
this.closed = true;
|
||||||
|
|
||||||
|
if (this.pendingRead) {
|
||||||
|
const pendingRead = this.pendingRead;
|
||||||
|
this.pendingRead = undefined;
|
||||||
|
pendingRead.resolve({ value: undefined, done: true });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public fail(error: unknown): void {
|
||||||
|
if (this.closed) return;
|
||||||
|
this.closed = true;
|
||||||
|
this.failed = true;
|
||||||
|
this.failure = error;
|
||||||
|
this.values.length = 0;
|
||||||
|
|
||||||
|
if (this.pendingRead) {
|
||||||
|
const pendingRead = this.pendingRead;
|
||||||
|
this.pendingRead = undefined;
|
||||||
|
pendingRead.reject(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public next(): Promise<QueueResult<T>> {
|
||||||
|
if (this.values.length > 0) {
|
||||||
|
return Promise.resolve({ value: this.values.shift() as T, done: false });
|
||||||
|
}
|
||||||
|
if (this.failed) return Promise.reject(this.failure);
|
||||||
|
if (this.closed) return Promise.resolve({ value: undefined, done: true });
|
||||||
|
|
||||||
|
return new Promise<QueueResult<T>>((resolve, reject) => {
|
||||||
|
this.pendingRead = { resolve, reject };
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public return(): Promise<QueueResult<T>> {
|
||||||
|
this.values.length = 0;
|
||||||
|
this.close();
|
||||||
|
return Promise.resolve({ value: undefined, done: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
public [Symbol.asyncIterator](): AsyncIterableIterator<T> {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,8 +19,15 @@ export async function settleIntegrationQueries<TIntegration extends IntegrationL
|
|||||||
options?: Options<TIntegration, TResult>,
|
options?: Options<TIntegration, TResult>,
|
||||||
): Promise<TResult[]> {
|
): Promise<TResult[]> {
|
||||||
const settled = await Promise.allSettled(integrations.map(async (integration) => fn(integration)));
|
const settled = await Promise.allSettled(integrations.map(async (integration) => fn(integration)));
|
||||||
return settled.flatMap((result, index) => {
|
const results: TResult[] = [];
|
||||||
if (result.status === "fulfilled") return [result.value];
|
const errors: unknown[] = [];
|
||||||
|
|
||||||
|
settled.forEach((result, index) => {
|
||||||
|
if (result.status === "fulfilled") {
|
||||||
|
results.push(result.value);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const integration = integrations[index];
|
const integration = integrations[index];
|
||||||
logger.warn(
|
logger.warn(
|
||||||
new ErrorWithMetadata(
|
new ErrorWithMetadata(
|
||||||
@@ -29,7 +36,18 @@ export async function settleIntegrationQueries<TIntegration extends IntegrationL
|
|||||||
{ cause: result.reason },
|
{ cause: result.reason },
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
if (options?.fallback && integration) return [options.fallback(integration, result.reason)];
|
|
||||||
return [];
|
if (options?.fallback && integration) {
|
||||||
|
results.push(options.fallback(integration, result.reason));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
errors.push(result.reason);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (results.length === 0 && errors.length > 0) {
|
||||||
|
throw errors[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
return results;
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
import { describe, expect, test, vi } from "vitest";
|
||||||
|
|
||||||
|
import { settleIntegrationQueries } from "../settle-integrations";
|
||||||
|
|
||||||
|
const mocks = vi.hoisted(() => ({
|
||||||
|
logger: { warn: vi.fn() },
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("@homarr/core/infrastructure/logs", () => ({
|
||||||
|
createLogger: () => mocks.logger,
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("@homarr/core/infrastructure/logs/error", () => ({
|
||||||
|
ErrorWithMetadata: Error,
|
||||||
|
}));
|
||||||
|
|
||||||
|
const integrations = [
|
||||||
|
{ id: "first", name: "First", kind: "plex" },
|
||||||
|
{ id: "second", name: "Second", kind: "jellyfin" },
|
||||||
|
];
|
||||||
|
|
||||||
|
describe("settleIntegrationQueries", () => {
|
||||||
|
test("returns an empty result when no integrations are configured", async () => {
|
||||||
|
await expect(settleIntegrationQueries([], vi.fn())).resolves.toEqual([]);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("keeps successful integrations when another integration fails", async () => {
|
||||||
|
const error = new Error("Plex unavailable");
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
settleIntegrationQueries(integrations, (integration) =>
|
||||||
|
integration.id === "first" ? Promise.reject(error) : Promise.resolve(integration.name),
|
||||||
|
),
|
||||||
|
).resolves.toEqual(["Second"]);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("rejects when every integration fails", async () => {
|
||||||
|
const error = new Error("Integration unavailable");
|
||||||
|
|
||||||
|
await expect(settleIntegrationQueries(integrations, () => Promise.reject(error))).rejects.toBe(error);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("uses configured fallbacks when every integration fails", async () => {
|
||||||
|
await expect(
|
||||||
|
settleIntegrationQueries(integrations, () => Promise.reject(new Error("Integration unavailable")), {
|
||||||
|
fallback: (integration) => integration.name,
|
||||||
|
}),
|
||||||
|
).resolves.toEqual(["First", "Second"]);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -6,20 +6,24 @@ import { and, eq } from "@homarr/db";
|
|||||||
import { accounts, sessions, users } from "@homarr/db/schema";
|
import { accounts, sessions, users } from "@homarr/db/schema";
|
||||||
import type { SupportedAuthProvider } from "@homarr/definitions";
|
import type { SupportedAuthProvider } from "@homarr/definitions";
|
||||||
|
|
||||||
export const createAdapter = (db: Database, provider: SupportedAuthProvider | "unknown"): Adapter => {
|
export const createAdapter = (
|
||||||
|
db: Database,
|
||||||
|
provider: SupportedAuthProvider | "unknown",
|
||||||
|
enableDangerousCredentialsLinking = false,
|
||||||
|
): Adapter => {
|
||||||
const drizzleAdapter = DrizzleAdapter(db, { usersTable: users, sessionsTable: sessions, accountsTable: accounts });
|
const drizzleAdapter = DrizzleAdapter(db, { usersTable: users, sessionsTable: sessions, accountsTable: accounts });
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...drizzleAdapter,
|
...drizzleAdapter,
|
||||||
// We override the default implementation as we want to have a provider
|
// Keep users isolated by their primary provider. The explicit credentials-linking
|
||||||
// flag in the user instead of the account to not intermingle users from different providers
|
// opt-in is the only exception and keeps credentials as the primary provider.
|
||||||
// eslint-disable-next-line no-restricted-syntax
|
// eslint-disable-next-line no-restricted-syntax
|
||||||
getUserByEmail: async (email) => {
|
getUserByEmail: async (email) => {
|
||||||
if (provider === "unknown") {
|
if (provider === "unknown") {
|
||||||
throw new Error("Unable to get user by email for unknown provider");
|
throw new Error("Unable to get user by email for unknown provider");
|
||||||
}
|
}
|
||||||
|
|
||||||
const user = await db.query.users.findFirst({
|
let user = await db.query.users.findFirst({
|
||||||
where: and(eq(users.email, email), eq(users.provider, provider)),
|
where: and(eq(users.email, email), eq(users.provider, provider)),
|
||||||
columns: {
|
columns: {
|
||||||
id: true,
|
id: true,
|
||||||
@@ -30,6 +34,22 @@ export const createAdapter = (db: Database, provider: SupportedAuthProvider | "u
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (!user && provider === "oidc" && enableDangerousCredentialsLinking) {
|
||||||
|
// Credentials accounts do not have an email-verification flow, so their
|
||||||
|
// Auth.js emailVerified field is always null. The OIDC profile's strict
|
||||||
|
// email_verified check is the security boundary for this opt-in.
|
||||||
|
user = await db.query.users.findFirst({
|
||||||
|
where: and(eq(users.email, email), eq(users.provider, "credentials")),
|
||||||
|
columns: {
|
||||||
|
id: true,
|
||||||
|
name: true,
|
||||||
|
email: true,
|
||||||
|
emailVerified: true,
|
||||||
|
image: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (!user) {
|
if (!user) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ export const createConfiguration = (
|
|||||||
headers: ReadonlyHeaders | null,
|
headers: ReadonlyHeaders | null,
|
||||||
useSecureCookies: boolean,
|
useSecureCookies: boolean,
|
||||||
) => {
|
) => {
|
||||||
const adapter = createAdapter(db, provider);
|
const adapter = createAdapter(db, provider, env.AUTH_OIDC_ENABLE_DANGEROUS_CREDENTIALS_LINKING);
|
||||||
return NextAuth({
|
return NextAuth({
|
||||||
logger: {
|
logger: {
|
||||||
error: (error) => {
|
error: (error) => {
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ export const env = createEnv({
|
|||||||
AUTH_OIDC_NAME_ATTRIBUTE_OVERWRITE: z.string().optional(),
|
AUTH_OIDC_NAME_ATTRIBUTE_OVERWRITE: z.string().optional(),
|
||||||
AUTH_OIDC_FORCE_USERINFO: createBooleanSchema(false),
|
AUTH_OIDC_FORCE_USERINFO: createBooleanSchema(false),
|
||||||
AUTH_OIDC_ENABLE_DANGEROUS_ACCOUNT_LINKING: createBooleanSchema(false),
|
AUTH_OIDC_ENABLE_DANGEROUS_ACCOUNT_LINKING: createBooleanSchema(false),
|
||||||
|
AUTH_OIDC_ENABLE_DANGEROUS_CREDENTIALS_LINKING: createBooleanSchema(false),
|
||||||
AUTH_OIDC_TOKEN_ENDPOINT_AUTH_METHOD: z
|
AUTH_OIDC_TOKEN_ENDPOINT_AUTH_METHOD: z
|
||||||
.enum(["client_secret_basic", "client_secret_post", "client_secret_jwt", "none"])
|
.enum(["client_secret_basic", "client_secret_post", "client_secret_jwt", "none"])
|
||||||
.default("client_secret_basic"),
|
.default("client_secret_basic"),
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ export const createSignInEventHandler = (db: Database): Exclude<NextAuthConfig["
|
|||||||
name: true,
|
name: true,
|
||||||
image: true,
|
image: true,
|
||||||
colorScheme: true,
|
colorScheme: true,
|
||||||
|
provider: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -33,6 +34,7 @@ export const createSignInEventHandler = (db: Database): Exclude<NextAuthConfig["
|
|||||||
// Groups from oidc provider are provided from the profile, it's not typed.
|
// Groups from oidc provider are provided from the profile, it's not typed.
|
||||||
if (
|
if (
|
||||||
!env.AUTH_OIDC_GROUPS_LOCAL_MANAGEMENT &&
|
!env.AUTH_OIDC_GROUPS_LOCAL_MANAGEMENT &&
|
||||||
|
dbUser.provider === "oidc" &&
|
||||||
profile &&
|
profile &&
|
||||||
groupsKey in profile &&
|
groupsKey in profile &&
|
||||||
Array.isArray(profile[groupsKey])
|
Array.isArray(profile[groupsKey])
|
||||||
@@ -57,7 +59,7 @@ export const createSignInEventHandler = (db: Database): Exclude<NextAuthConfig["
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (profile) {
|
if (profile && dbUser.provider === "oidc") {
|
||||||
const profileUsername = extractProfileName(profile);
|
const profileUsername = extractProfileName(profile);
|
||||||
if (!profileUsername) {
|
if (!profileUsername) {
|
||||||
throw new Error(`OIDC provider did not return a name properties='${Object.keys(profile).join(",")}'`);
|
throw new Error(`OIDC provider did not return a name properties='${Object.keys(profile).join(",")}'`);
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import { fetchWithTrustedCertificatesAsync } from "@homarr/core/infrastructure/h
|
|||||||
|
|
||||||
import { env } from "../../env";
|
import { env } from "../../env";
|
||||||
import { createRedirectUri } from "../../redirect";
|
import { createRedirectUri } from "../../redirect";
|
||||||
|
import { assertVerifiedEmailForCredentialsLinking } from "./verified-email";
|
||||||
|
|
||||||
export const OidcProvider = (headers: ReadonlyHeaders | null): OIDCConfig<Profile> => ({
|
export const OidcProvider = (headers: ReadonlyHeaders | null): OIDCConfig<Profile> => ({
|
||||||
id: "oidc",
|
id: "oidc",
|
||||||
@@ -18,7 +19,8 @@ export const OidcProvider = (headers: ReadonlyHeaders | null): OIDCConfig<Profil
|
|||||||
token_endpoint_auth_method: env.AUTH_OIDC_TOKEN_ENDPOINT_AUTH_METHOD,
|
token_endpoint_auth_method: env.AUTH_OIDC_TOKEN_ENDPOINT_AUTH_METHOD,
|
||||||
},
|
},
|
||||||
issuer: env.AUTH_OIDC_ISSUER,
|
issuer: env.AUTH_OIDC_ISSUER,
|
||||||
allowDangerousEmailAccountLinking: env.AUTH_OIDC_ENABLE_DANGEROUS_ACCOUNT_LINKING,
|
allowDangerousEmailAccountLinking:
|
||||||
|
env.AUTH_OIDC_ENABLE_DANGEROUS_ACCOUNT_LINKING || env.AUTH_OIDC_ENABLE_DANGEROUS_CREDENTIALS_LINKING,
|
||||||
authorization: {
|
authorization: {
|
||||||
params: {
|
params: {
|
||||||
scope: env.AUTH_OIDC_SCOPE_OVERWRITE,
|
scope: env.AUTH_OIDC_SCOPE_OVERWRITE,
|
||||||
@@ -55,6 +57,7 @@ export const OidcProvider = (headers: ReadonlyHeaders | null): OIDCConfig<Profil
|
|||||||
if (!profile.sub) {
|
if (!profile.sub) {
|
||||||
throw new Error(`OIDC provider did not return a sub property='${Object.keys(profile).join(",")}'`);
|
throw new Error(`OIDC provider did not return a sub property='${Object.keys(profile).join(",")}'`);
|
||||||
}
|
}
|
||||||
|
assertVerifiedEmailForCredentialsLinking(profile, env.AUTH_OIDC_ENABLE_DANGEROUS_CREDENTIALS_LINKING);
|
||||||
const name = extractProfileName(profile);
|
const name = extractProfileName(profile);
|
||||||
if (!name) {
|
if (!name) {
|
||||||
throw new Error(`OIDC provider did not return a name properties='${Object.keys(profile).join(",")}'`);
|
throw new Error(`OIDC provider did not return a name properties='${Object.keys(profile).join(",")}'`);
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
export const assertVerifiedEmailForCredentialsLinking = (
|
||||||
|
profile: { email?: unknown; email_verified?: unknown },
|
||||||
|
isCredentialsLinkingEnabled: boolean,
|
||||||
|
) => {
|
||||||
|
if (
|
||||||
|
isCredentialsLinkingEnabled &&
|
||||||
|
(profile.email_verified !== true || typeof profile.email !== "string" || profile.email.trim().length === 0)
|
||||||
|
) {
|
||||||
|
throw new Error("OIDC provider did not return a verified email while credentials linking is enabled");
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
import { afterEach, describe, expect, test, vi } from "vitest";
|
||||||
|
|
||||||
|
import { OidcProvider } from "../oidc/oidc-provider";
|
||||||
|
import { assertVerifiedEmailForCredentialsLinking } from "../oidc/verified-email";
|
||||||
|
|
||||||
|
const mockEnv = vi.hoisted(() => ({
|
||||||
|
AUTH_OIDC_CLIENT_ID: "client-id",
|
||||||
|
AUTH_OIDC_CLIENT_NAME: "OIDC",
|
||||||
|
AUTH_OIDC_CLIENT_SECRET: "client-secret",
|
||||||
|
AUTH_OIDC_ENABLE_DANGEROUS_ACCOUNT_LINKING: false,
|
||||||
|
AUTH_OIDC_ENABLE_DANGEROUS_CREDENTIALS_LINKING: false,
|
||||||
|
AUTH_OIDC_FORCE_USERINFO: false,
|
||||||
|
AUTH_OIDC_ISSUER: "https://example.com",
|
||||||
|
AUTH_OIDC_NAME_ATTRIBUTE_OVERWRITE: undefined,
|
||||||
|
AUTH_OIDC_SCOPE_OVERWRITE: "openid email profile",
|
||||||
|
AUTH_OIDC_TOKEN_ENDPOINT_AUTH_METHOD: "client_secret_basic" as const,
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("../../env", () => ({ env: mockEnv }));
|
||||||
|
vi.mock("next-auth", () => ({ customFetch: Symbol("customFetch") }));
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
mockEnv.AUTH_OIDC_ENABLE_DANGEROUS_CREDENTIALS_LINKING = false;
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("assertVerifiedEmailForCredentialsLinking", () => {
|
||||||
|
test("allows a strictly verified OIDC email when credentials linking is enabled", () => {
|
||||||
|
expect(() =>
|
||||||
|
assertVerifiedEmailForCredentialsLinking({ email: "test@example.com", email_verified: true }, true),
|
||||||
|
).not.toThrow();
|
||||||
|
});
|
||||||
|
|
||||||
|
test.each([
|
||||||
|
{ email: "test@example.com", email_verified: false },
|
||||||
|
{ email: "test@example.com", email_verified: "true" },
|
||||||
|
{ email_verified: true },
|
||||||
|
{ email: null, email_verified: true },
|
||||||
|
{ email: " ", email_verified: true },
|
||||||
|
{},
|
||||||
|
])("rejects an OIDC profile without a strictly verified email when credentials linking is enabled", (profile) => {
|
||||||
|
expect(() => assertVerifiedEmailForCredentialsLinking(profile, true)).toThrow(
|
||||||
|
"OIDC provider did not return a verified email while credentials linking is enabled",
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("does not require the claim when credentials linking is disabled", () => {
|
||||||
|
expect(() => assertVerifiedEmailForCredentialsLinking({}, false)).not.toThrow();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("OIDC provider rejects an unverified profile when credentials linking is enabled", () => {
|
||||||
|
mockEnv.AUTH_OIDC_ENABLE_DANGEROUS_CREDENTIALS_LINKING = true;
|
||||||
|
const provider = OidcProvider(null);
|
||||||
|
expect(provider.allowDangerousEmailAccountLinking).toBe(true);
|
||||||
|
const mapProfile = provider.profile;
|
||||||
|
if (!mapProfile) throw new Error("Expected OIDC profile mapper to be defined");
|
||||||
|
|
||||||
|
expect(() =>
|
||||||
|
mapProfile(
|
||||||
|
{
|
||||||
|
sub: "subject",
|
||||||
|
preferred_username: "test",
|
||||||
|
email: "test@example.com",
|
||||||
|
email_verified: false,
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
),
|
||||||
|
).toThrow("OIDC provider did not return a verified email while credentials linking is enabled");
|
||||||
|
});
|
||||||
|
|
||||||
|
test("OIDC provider accepts an unverified profile when credentials linking is disabled", () => {
|
||||||
|
const provider = OidcProvider(null);
|
||||||
|
const mapProfile = provider.profile;
|
||||||
|
if (!mapProfile) throw new Error("Expected OIDC profile mapper to be defined");
|
||||||
|
|
||||||
|
expect(() =>
|
||||||
|
mapProfile(
|
||||||
|
{
|
||||||
|
sub: "subject",
|
||||||
|
preferred_username: "test",
|
||||||
|
email: "test@example.com",
|
||||||
|
email_verified: false,
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
),
|
||||||
|
).not.toThrow();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
import { describe, expect, test } from "vitest";
|
import { describe, expect, test } from "vitest";
|
||||||
|
|
||||||
import { users } from "@homarr/db/schema";
|
import { eq } from "@homarr/db";
|
||||||
|
import { accounts, apiKeys, groupMembers, groups, users } from "@homarr/db/schema";
|
||||||
import { createDb } from "@homarr/db/test";
|
import { createDb } from "@homarr/db/test";
|
||||||
|
|
||||||
import { createAdapter } from "../adapter";
|
import { createAdapter } from "../adapter";
|
||||||
@@ -64,4 +65,91 @@ describe("createAdapter should create drizzle adapter", () => {
|
|||||||
// Assert
|
// Assert
|
||||||
await expect(actAsync()).rejects.toThrow("Unable to get user by email for unknown provider");
|
await expect(actAsync()).rejects.toThrow("Unable to get user by email for unknown provider");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("getUserByEmail should return a credentials user for oidc when credentials linking is enabled", async () => {
|
||||||
|
const db = createDb();
|
||||||
|
const adapter = createAdapter(db, "oidc", true);
|
||||||
|
const email = "test@example.com";
|
||||||
|
await db.insert(users).values({ id: "credentials-user", name: "test", email, provider: "credentials" });
|
||||||
|
|
||||||
|
const user = await adapter.getUserByEmail?.(email);
|
||||||
|
|
||||||
|
expect(user?.id).toBe("credentials-user");
|
||||||
|
});
|
||||||
|
|
||||||
|
test("getUserByEmail should not return credentials users for non-oidc providers", async () => {
|
||||||
|
const db = createDb();
|
||||||
|
const adapter = createAdapter(db, "ldap", true);
|
||||||
|
const email = "test@example.com";
|
||||||
|
await db.insert(users).values({ id: "credentials-user", name: "test", email, provider: "credentials" });
|
||||||
|
|
||||||
|
const user = await adapter.getUserByEmail?.(email);
|
||||||
|
|
||||||
|
expect(user).toBeNull();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("getUserByEmail should prefer an existing oidc user over a credentials user", async () => {
|
||||||
|
const db = createDb();
|
||||||
|
const adapter = createAdapter(db, "oidc", true);
|
||||||
|
const email = "test@example.com";
|
||||||
|
await db.insert(users).values([
|
||||||
|
{ id: "credentials-user", name: "credentials", email, provider: "credentials" },
|
||||||
|
{ id: "oidc-user", name: "oidc", email, provider: "oidc" },
|
||||||
|
]);
|
||||||
|
|
||||||
|
const user = await adapter.getUserByEmail?.(email);
|
||||||
|
|
||||||
|
expect(user?.id).toBe("oidc-user");
|
||||||
|
});
|
||||||
|
|
||||||
|
test("linkAccount should preserve the credentials user and their data", async () => {
|
||||||
|
const db = createDb();
|
||||||
|
const adapter = createAdapter(db, "oidc", true);
|
||||||
|
const email = "test@example.com";
|
||||||
|
await db.insert(users).values({
|
||||||
|
id: "credentials-user",
|
||||||
|
name: "test",
|
||||||
|
email,
|
||||||
|
password: "hashed-password",
|
||||||
|
provider: "credentials",
|
||||||
|
colorScheme: "light",
|
||||||
|
completedBoardTour: true,
|
||||||
|
});
|
||||||
|
await db.insert(groups).values({ id: "group", name: "Test group", position: 1 });
|
||||||
|
await db.insert(groupMembers).values({ groupId: "group", userId: "credentials-user" });
|
||||||
|
await db.insert(apiKeys).values({ id: "api-key", apiKey: "secret", userId: "credentials-user" });
|
||||||
|
|
||||||
|
const user = await adapter.getUserByEmail?.(email);
|
||||||
|
if (!user) throw new Error("Expected credentials user to be found for OIDC linking");
|
||||||
|
await adapter.linkAccount?.({
|
||||||
|
userId: user.id,
|
||||||
|
type: "oidc",
|
||||||
|
provider: "oidc",
|
||||||
|
providerAccountId: "oidc-subject",
|
||||||
|
});
|
||||||
|
|
||||||
|
const linkedUser = await db.query.users.findFirst({ where: eq(users.id, "credentials-user") });
|
||||||
|
const account = await db.query.accounts.findFirst({ where: eq(accounts.providerAccountId, "oidc-subject") });
|
||||||
|
const membership = await db.query.groupMembers.findFirst({
|
||||||
|
where: eq(groupMembers.userId, "credentials-user"),
|
||||||
|
});
|
||||||
|
const apiKey = await db.query.apiKeys.findFirst({ where: eq(apiKeys.userId, "credentials-user") });
|
||||||
|
const userByAccount = await adapter.getUserByAccount?.({
|
||||||
|
provider: "oidc",
|
||||||
|
providerAccountId: "oidc-subject",
|
||||||
|
});
|
||||||
|
const allUsers = await db.query.users.findMany();
|
||||||
|
expect(linkedUser).toMatchObject({
|
||||||
|
id: "credentials-user",
|
||||||
|
password: "hashed-password",
|
||||||
|
provider: "credentials",
|
||||||
|
colorScheme: "light",
|
||||||
|
completedBoardTour: true,
|
||||||
|
});
|
||||||
|
expect(account?.userId).toBe("credentials-user");
|
||||||
|
expect(membership?.groupId).toBe("group");
|
||||||
|
expect(apiKey?.id).toBe("api-key");
|
||||||
|
expect(userByAccount?.id).toBe("credentials-user");
|
||||||
|
expect(allUsers).toHaveLength(1);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
@@ -135,7 +135,7 @@ describe("createSignInEventHandler should create signInEventHandler", () => {
|
|||||||
test("should add missing group membership", async () => {
|
test("should add missing group membership", async () => {
|
||||||
// Arrange
|
// Arrange
|
||||||
const db = createDb();
|
const db = createDb();
|
||||||
await createUserAsync(db);
|
await createUserAsync(db, "oidc");
|
||||||
await createGroupAsync(db);
|
await createGroupAsync(db);
|
||||||
const eventHandler = createSignInEventHandler(db);
|
const eventHandler = createSignInEventHandler(db);
|
||||||
|
|
||||||
@@ -155,7 +155,7 @@ describe("createSignInEventHandler should create signInEventHandler", () => {
|
|||||||
test("should remove group membership", async () => {
|
test("should remove group membership", async () => {
|
||||||
// Arrange
|
// Arrange
|
||||||
const db = createDb();
|
const db = createDb();
|
||||||
await createUserAsync(db);
|
await createUserAsync(db, "oidc");
|
||||||
await createGroupAsync(db);
|
await createGroupAsync(db);
|
||||||
await db.insert(groupMembers).values({
|
await db.insert(groupMembers).values({
|
||||||
userId: "1",
|
userId: "1",
|
||||||
@@ -179,7 +179,7 @@ describe("createSignInEventHandler should create signInEventHandler", () => {
|
|||||||
test("should not remove group membership for everyone group", async () => {
|
test("should not remove group membership for everyone group", async () => {
|
||||||
// Arrange
|
// Arrange
|
||||||
const db = createDb();
|
const db = createDb();
|
||||||
await createUserAsync(db);
|
await createUserAsync(db, "oidc");
|
||||||
await createGroupAsync(db, everyoneGroup);
|
await createGroupAsync(db, everyoneGroup);
|
||||||
await db.insert(groupMembers).values({
|
await db.insert(groupMembers).values({
|
||||||
userId: "1",
|
userId: "1",
|
||||||
@@ -204,7 +204,7 @@ describe("createSignInEventHandler should create signInEventHandler", () => {
|
|||||||
// Arrange
|
// Arrange
|
||||||
mockEnv.AUTH_OIDC_GROUPS_LOCAL_MANAGEMENT = true;
|
mockEnv.AUTH_OIDC_GROUPS_LOCAL_MANAGEMENT = true;
|
||||||
const db = createDb();
|
const db = createDb();
|
||||||
await createUserAsync(db);
|
await createUserAsync(db, "oidc");
|
||||||
await createGroupAsync(db);
|
await createGroupAsync(db);
|
||||||
const eventHandler = createSignInEventHandler(db);
|
const eventHandler = createSignInEventHandler(db);
|
||||||
|
|
||||||
@@ -229,10 +229,10 @@ describe("createSignInEventHandler should create signInEventHandler", () => {
|
|||||||
["ldap" as const, { name: "test-new" }, undefined],
|
["ldap" as const, { name: "test-new" }, undefined],
|
||||||
["oidc" as const, { name: "test" }, { preferred_username: "test-new" }],
|
["oidc" as const, { name: "test" }, { preferred_username: "test-new" }],
|
||||||
["oidc" as const, { name: "test" }, { preferred_username: "test@example.com", name: "test-new" }],
|
["oidc" as const, { name: "test" }, { preferred_username: "test@example.com", name: "test-new" }],
|
||||||
])("signInEventHandler should update username for %s provider", async (_provider, user, profile) => {
|
])("signInEventHandler should update username for %s provider", async (provider, user, profile) => {
|
||||||
// Arrange
|
// Arrange
|
||||||
const db = createDb();
|
const db = createDb();
|
||||||
await createUserAsync(db);
|
await createUserAsync(db, provider);
|
||||||
const eventHandler = createSignInEventHandler(db);
|
const eventHandler = createSignInEventHandler(db);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
@@ -251,6 +251,32 @@ describe("createSignInEventHandler should create signInEventHandler", () => {
|
|||||||
});
|
});
|
||||||
expect(dbUser?.name).toBe("test-new");
|
expect(dbUser?.name).toBe("test-new");
|
||||||
});
|
});
|
||||||
|
test("signInEventHandler should preserve credentials-owned data when the user signs in with linked oidc", async () => {
|
||||||
|
const db = createDb();
|
||||||
|
await createUserAsync(db, "credentials", "local-avatar");
|
||||||
|
await createGroupAsync(db);
|
||||||
|
await db.insert(groupMembers).values({ userId: "1", groupId: "1" });
|
||||||
|
const eventHandler = createSignInEventHandler(db);
|
||||||
|
|
||||||
|
await eventHandler?.({
|
||||||
|
user: { id: "1", name: "test" },
|
||||||
|
profile: {
|
||||||
|
preferred_username: "oidc-name",
|
||||||
|
picture: "oidc-avatar",
|
||||||
|
someRandomGroupsKey: [],
|
||||||
|
},
|
||||||
|
account: null,
|
||||||
|
});
|
||||||
|
|
||||||
|
const dbUser = await db.query.users.findFirst({ where: eq(users.id, "1") });
|
||||||
|
const membership = await db.query.groupMembers.findFirst({ where: eq(groupMembers.userId, "1") });
|
||||||
|
expect(dbUser).toMatchObject({
|
||||||
|
name: "test",
|
||||||
|
image: "local-avatar",
|
||||||
|
provider: "credentials",
|
||||||
|
});
|
||||||
|
expect(membership?.groupId).toBe("1");
|
||||||
|
});
|
||||||
test("signInEventHandler should set color-scheme cookie", async () => {
|
test("signInEventHandler should set color-scheme cookie", async () => {
|
||||||
// Arrange
|
// Arrange
|
||||||
const db = createDb();
|
const db = createDb();
|
||||||
@@ -275,11 +301,17 @@ describe("createSignInEventHandler should create signInEventHandler", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const createUserAsync = async (db: Database) =>
|
const createUserAsync = async (
|
||||||
|
db: Database,
|
||||||
|
provider: "credentials" | "ldap" | "oidc" = "credentials",
|
||||||
|
image?: string,
|
||||||
|
) =>
|
||||||
await db.insert(users).values({
|
await db.insert(users).values({
|
||||||
id: "1",
|
id: "1",
|
||||||
name: "test",
|
name: "test",
|
||||||
colorScheme: "dark",
|
colorScheme: "dark",
|
||||||
|
image,
|
||||||
|
provider,
|
||||||
});
|
});
|
||||||
|
|
||||||
const createGroupAsync = async (db: Database, name = "test") =>
|
const createGroupAsync = async (db: Database, name = "test") =>
|
||||||
|
|||||||
@@ -67,12 +67,14 @@ export const fetchWithTrustedCertificatesAsync = async (
|
|||||||
url: RequestInfo,
|
url: RequestInfo,
|
||||||
options?: RequestInit & { timeout?: number; bodyTimeout?: number },
|
options?: RequestInit & { timeout?: number; bodyTimeout?: number },
|
||||||
): Promise<Response> => {
|
): Promise<Response> => {
|
||||||
const agent = await createCertificateAgentAsync(
|
const agent =
|
||||||
undefined,
|
options?.dispatcher ??
|
||||||
options?.bodyTimeout !== undefined ? { bodyTimeout: options.bodyTimeout } : undefined,
|
(await createCertificateAgentAsync(
|
||||||
);
|
undefined,
|
||||||
|
options?.bodyTimeout !== undefined ? { bodyTimeout: options.bodyTimeout } : undefined,
|
||||||
|
));
|
||||||
if (options?.timeout) {
|
if (options?.timeout) {
|
||||||
const { bodyTimeout: _bodyTimeout, ...fetchOptions } = options;
|
const { bodyTimeout: _bodyTimeout, dispatcher: _dispatcher, ...fetchOptions } = options;
|
||||||
return await withTimeoutAsync(
|
return await withTimeoutAsync(
|
||||||
async (signal) =>
|
async (signal) =>
|
||||||
fetch(url, {
|
fetch(url, {
|
||||||
@@ -84,7 +86,7 @@ export const fetchWithTrustedCertificatesAsync = async (
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const { bodyTimeout: _bodyTimeout, ...fetchOptions } = options ?? {};
|
const { bodyTimeout: _bodyTimeout, dispatcher: _dispatcher, ...fetchOptions } = options ?? {};
|
||||||
return fetch(url, {
|
return fetch(url, {
|
||||||
...fetchOptions,
|
...fetchOptions,
|
||||||
dispatcher: agent,
|
dispatcher: agent,
|
||||||
|
|||||||
@@ -23,10 +23,15 @@ export const createSessionStore = <TValue>(integration: { id: string }) => {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async setAsync(value: TValue) {
|
/**
|
||||||
logger.debug("Updating session in store", { store: channelName });
|
* @param value session to store
|
||||||
|
* @param options pass `ttlSeconds` when the credential has a known lifetime, so a stored
|
||||||
|
* session can never outlive the token it holds
|
||||||
|
*/
|
||||||
|
async setAsync(value: TValue, options?: { ttlSeconds?: number }) {
|
||||||
|
logger.debug("Updating session in store", { store: channelName, ttlSeconds: options?.ttlSeconds });
|
||||||
try {
|
try {
|
||||||
await channel.setAsync(encryptSecret(superjson.stringify(value)));
|
await channel.setAsync(encryptSecret(superjson.stringify(value)), options);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(new ErrorWithMetadata("Failed to save session", { store: channelName }, { cause: error }));
|
logger.error(new ErrorWithMetadata("Failed to save session", { store: channelName }, { cause: error }));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import { ResponseError } from "@homarr/common/server";
|
import { ResponseError } from "@homarr/common/server";
|
||||||
import { createLogger } from "@homarr/core/infrastructure/logs";
|
import { createLogger } from "@homarr/core/infrastructure/logs";
|
||||||
import { fetchWithTrustedCertificatesAsync } from "@homarr/core/infrastructure/http";
|
import { ErrorWithMetadata } from "@homarr/core/infrastructure/logs/error";
|
||||||
|
import { createCertificateAgentAsync, fetchWithTrustedCertificatesAsync } from "@homarr/core/infrastructure/http";
|
||||||
|
import type { Response as UndiciResponse } from "undici";
|
||||||
|
|
||||||
import type { IntegrationInput, IntegrationTestingInput } from "../base/integration";
|
import type { IntegrationInput, IntegrationTestingInput } from "../base/integration";
|
||||||
import { Integration } from "../base/integration";
|
import { Integration } from "../base/integration";
|
||||||
@@ -80,11 +82,47 @@ export const normalizeRealtimeSnapshot = (
|
|||||||
return events;
|
return events;
|
||||||
};
|
};
|
||||||
|
|
||||||
interface BeszelSession {
|
export interface BeszelSession {
|
||||||
token: string;
|
token: string;
|
||||||
userId: string;
|
userId: string;
|
||||||
|
/** Epoch milliseconds, taken from the token's `exp` claim. Undefined when it could not be read. */
|
||||||
|
expiresAt?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Re-authenticate this long before the token actually lapses, so a request can never be sent
|
||||||
|
* with a token that expires while it is in flight.
|
||||||
|
*/
|
||||||
|
const sessionExpiryLeewayMs = 60_000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads the expiration out of a PocketBase auth token.
|
||||||
|
*
|
||||||
|
* @returns expiry as epoch milliseconds, or null when the token is malformed or carries no
|
||||||
|
* numeric `exp` claim — in which case we fall back to the existing 401 retry path.
|
||||||
|
*/
|
||||||
|
export const parseTokenExpiration = (token: string): number | null => {
|
||||||
|
const payload = token.split(".")[1];
|
||||||
|
if (!payload) return null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const decoded = Buffer.from(payload.replace(/-/g, "+").replace(/_/g, "/"), "base64").toString("utf8");
|
||||||
|
const { exp } = JSON.parse(decoded) as { exp?: unknown };
|
||||||
|
return typeof exp === "number" && Number.isFinite(exp) ? exp * 1000 : null;
|
||||||
|
} catch {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Beszel answers requests carrying an expired token with `200` and an empty list rather than `401`,
|
||||||
|
* because its collection rules filter on `@request.auth.id` instead of rejecting. The 401 retry in
|
||||||
|
* `fetchWithAuthAsync` therefore never fires, so a stored session would otherwise be trusted
|
||||||
|
* forever. Sessions have to expire themselves.
|
||||||
|
*/
|
||||||
|
export const isSessionExpired = (session: BeszelSession, now = Date.now()) =>
|
||||||
|
session.expiresAt !== undefined && session.expiresAt - sessionExpiryLeewayMs <= now;
|
||||||
|
|
||||||
export class BeszelIntegration extends Integration {
|
export class BeszelIntegration extends Integration {
|
||||||
private readonly sessionStore: SessionStore<BeszelSession>;
|
private readonly sessionStore: SessionStore<BeszelSession>;
|
||||||
|
|
||||||
@@ -95,11 +133,19 @@ export class BeszelIntegration extends Integration {
|
|||||||
|
|
||||||
private async authenticateAsync(): Promise<BeszelSession> {
|
private async authenticateAsync(): Promise<BeszelSession> {
|
||||||
const existingSession = await this.sessionStore.getAsync();
|
const existingSession = await this.sessionStore.getAsync();
|
||||||
if (existingSession) {
|
if (existingSession && !isSessionExpired(existingSession)) {
|
||||||
logger.debug("Using stored Beszel session", { integrationId: this.integration.id });
|
logger.debug("Using stored Beszel session", { integrationId: this.integration.id });
|
||||||
return existingSession;
|
return existingSession;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (existingSession) {
|
||||||
|
logger.info("Stored Beszel session expired, re-authenticating", {
|
||||||
|
integrationId: this.integration.id,
|
||||||
|
expiresAt: existingSession.expiresAt,
|
||||||
|
});
|
||||||
|
await this.sessionStore.clearAsync();
|
||||||
|
}
|
||||||
|
|
||||||
const authUrl = this.url("/api/collections/users/auth-with-password");
|
const authUrl = this.url("/api/collections/users/auth-with-password");
|
||||||
logger.debug("Authenticating with Beszel", { integrationId: this.integration.id, url: authUrl.pathname });
|
logger.debug("Authenticating with Beszel", { integrationId: this.integration.id, url: authUrl.pathname });
|
||||||
const response = await fetchWithTrustedCertificatesAsync(authUrl, {
|
const response = await fetchWithTrustedCertificatesAsync(authUrl, {
|
||||||
@@ -118,9 +164,30 @@ export class BeszelIntegration extends Integration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const data = (await response.json()) as BeszelAuthResponse;
|
const data = (await response.json()) as BeszelAuthResponse;
|
||||||
const session: BeszelSession = { token: data.token, userId: data.record.id };
|
const expiresAt = parseTokenExpiration(data.token) ?? undefined;
|
||||||
await this.sessionStore.setAsync(session);
|
|
||||||
logger.debug("Saved Beszel session", { integrationId: this.integration.id, userId: session.userId });
|
// A token that has already lapsed by the time it reaches us means our clock and Beszel's
|
||||||
|
// disagree by more than the token lifetime. Re-authenticating would only mint another dead
|
||||||
|
// token, and using this one would silently produce the empty responses this check exists to
|
||||||
|
// prevent — so fail loudly instead.
|
||||||
|
if (expiresAt !== undefined && expiresAt <= Date.now()) {
|
||||||
|
logger.warn("Beszel issued an already-expired token", { integrationId: this.integration.id, expiresAt });
|
||||||
|
throw new ErrorWithMetadata("Beszel issued an already-expired authentication token, check for clock skew", {
|
||||||
|
integrationId: this.integration.id,
|
||||||
|
expiresAt,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const session: BeszelSession = { token: data.token, userId: data.record.id, expiresAt };
|
||||||
|
// Give the stored entry the token's own lifetime, so the cache cannot outlive the credential
|
||||||
|
// even if the session is never read again before it lapses.
|
||||||
|
const ttlSeconds = expiresAt === undefined ? undefined : Math.max(1, Math.ceil((expiresAt - Date.now()) / 1000));
|
||||||
|
await this.sessionStore.setAsync(session, ttlSeconds === undefined ? undefined : { ttlSeconds });
|
||||||
|
logger.debug("Saved Beszel session", {
|
||||||
|
integrationId: this.integration.id,
|
||||||
|
userId: session.userId,
|
||||||
|
expiresAt,
|
||||||
|
});
|
||||||
return session;
|
return session;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -357,19 +424,41 @@ export class BeszelIntegration extends Integration {
|
|||||||
let emittedSnapshotCount = 0;
|
let emittedSnapshotCount = 0;
|
||||||
|
|
||||||
while (!signal.aborted) {
|
while (!signal.aborted) {
|
||||||
|
let streamResponse: UndiciResponse | undefined;
|
||||||
|
let streamAgent: Awaited<ReturnType<typeof createCertificateAgentAsync>> | undefined;
|
||||||
|
const closeStreamAsync = async () => {
|
||||||
|
const response = streamResponse;
|
||||||
|
streamResponse = undefined;
|
||||||
|
const agent = streamAgent;
|
||||||
|
streamAgent = undefined;
|
||||||
|
|
||||||
|
if (response?.body) await response.body.cancel().catch(() => {});
|
||||||
|
if (agent) await agent.close().catch(() => {});
|
||||||
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
let session = await this.authenticateAsync();
|
let session = await this.authenticateAsync();
|
||||||
const openStream = async () =>
|
const openStream = async () => {
|
||||||
await fetchWithTrustedCertificatesAsync(realtimeUrl, {
|
streamAgent = await createCertificateAgentAsync(undefined, { bodyTimeout: 0 });
|
||||||
headers: {
|
try {
|
||||||
Accept: "text/event-stream",
|
const response = await fetchWithTrustedCertificatesAsync(realtimeUrl, {
|
||||||
Authorization: session.token,
|
headers: {
|
||||||
"Cache-Control": "no-cache",
|
Accept: "text/event-stream",
|
||||||
Pragma: "no-cache",
|
Authorization: session.token,
|
||||||
},
|
"Cache-Control": "no-cache",
|
||||||
signal,
|
Pragma: "no-cache",
|
||||||
bodyTimeout: 0,
|
},
|
||||||
});
|
signal,
|
||||||
|
bodyTimeout: 0,
|
||||||
|
dispatcher: streamAgent,
|
||||||
|
});
|
||||||
|
streamResponse = response;
|
||||||
|
return response;
|
||||||
|
} catch (error) {
|
||||||
|
await closeStreamAsync();
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
logger.debug("Opening Beszel rt_metrics SSE connection", {
|
logger.debug("Opening Beszel rt_metrics SSE connection", {
|
||||||
integrationId: this.integration.id,
|
integrationId: this.integration.id,
|
||||||
@@ -378,6 +467,7 @@ export class BeszelIntegration extends Integration {
|
|||||||
});
|
});
|
||||||
let response = await openStream();
|
let response = await openStream();
|
||||||
if (response.status === 401) {
|
if (response.status === 401) {
|
||||||
|
await closeStreamAsync();
|
||||||
await this.sessionStore.clearAsync();
|
await this.sessionStore.clearAsync();
|
||||||
session = await this.authenticateAsync();
|
session = await this.authenticateAsync();
|
||||||
response = await openStream();
|
response = await openStream();
|
||||||
@@ -402,14 +492,21 @@ export class BeszelIntegration extends Integration {
|
|||||||
clientId = frame.id || fallbackClientId;
|
clientId = frame.id || fallbackClientId;
|
||||||
if (!clientId) throw new Error("PocketBase PB_CONNECT event did not include a client ID");
|
if (!clientId) throw new Error("PocketBase PB_CONNECT event did not include a client ID");
|
||||||
|
|
||||||
|
if (!streamAgent) throw new Error("Beszel realtime stream agent is not available");
|
||||||
const subscribeResponse = await fetchWithTrustedCertificatesAsync(realtimeUrl, {
|
const subscribeResponse = await fetchWithTrustedCertificatesAsync(realtimeUrl, {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
headers: { Authorization: session.token, "Content-Type": "application/json" },
|
headers: { Authorization: session.token, "Content-Type": "application/json" },
|
||||||
body: JSON.stringify({ clientId, subscriptions: [topic] }),
|
body: JSON.stringify({ clientId, subscriptions: [topic] }),
|
||||||
signal,
|
signal,
|
||||||
|
dispatcher: streamAgent,
|
||||||
});
|
});
|
||||||
if (subscribeResponse.status === 401) await this.sessionStore.clearAsync();
|
try {
|
||||||
if (!subscribeResponse.ok) throw new ResponseError(subscribeResponse);
|
if (subscribeResponse.status === 401) await this.sessionStore.clearAsync();
|
||||||
|
if (!subscribeResponse.ok) throw new ResponseError(subscribeResponse);
|
||||||
|
await subscribeResponse.arrayBuffer();
|
||||||
|
} finally {
|
||||||
|
if (subscribeResponse.body) await subscribeResponse.body.cancel().catch(() => {});
|
||||||
|
}
|
||||||
logger.debug("Subscribed to Beszel rt_metrics topic", {
|
logger.debug("Subscribed to Beszel rt_metrics topic", {
|
||||||
integrationId: this.integration.id,
|
integrationId: this.integration.id,
|
||||||
systemId,
|
systemId,
|
||||||
@@ -461,10 +558,12 @@ export class BeszelIntegration extends Integration {
|
|||||||
} finally {
|
} finally {
|
||||||
await reader.cancel().catch(() => {});
|
await reader.cancel().catch(() => {});
|
||||||
reader.releaseLock();
|
reader.releaseLock();
|
||||||
|
await closeStreamAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!signal.aborted) throw new Error("Beszel rt_metrics SSE stream ended unexpectedly");
|
if (!signal.aborted) throw new Error("Beszel rt_metrics SSE stream ended unexpectedly");
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
await closeStreamAsync();
|
||||||
if (signal.aborted) break;
|
if (signal.aborted) break;
|
||||||
if (error instanceof ResponseError && error.statusCode === 401 && retryAttempt === 0) {
|
if (error instanceof ResponseError && error.statusCode === 401 && retryAttempt === 0) {
|
||||||
retryAttempt += 1;
|
retryAttempt += 1;
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ vi.hoisted(() => {
|
|||||||
const BESZEL_URL = process.env.BESZEL_TEST_URL ?? "http://localhost:8090";
|
const BESZEL_URL = process.env.BESZEL_TEST_URL ?? "http://localhost:8090";
|
||||||
const BESZEL_EMAIL = process.env.BESZEL_TEST_EMAIL ?? "";
|
const BESZEL_EMAIL = process.env.BESZEL_TEST_EMAIL ?? "";
|
||||||
const BESZEL_PASSWORD = process.env.BESZEL_TEST_PASSWORD ?? "";
|
const BESZEL_PASSWORD = process.env.BESZEL_TEST_PASSWORD ?? "";
|
||||||
|
const closeAgent = vi.hoisted(() => vi.fn().mockResolvedValue(undefined));
|
||||||
|
|
||||||
vi.mock("@homarr/redis", () => ({
|
vi.mock("@homarr/redis", () => ({
|
||||||
createGetSetChannel: () => ({
|
createGetSetChannel: () => ({
|
||||||
@@ -32,7 +33,7 @@ vi.mock("@homarr/core/infrastructure/logs", () => ({
|
|||||||
vi.mock("@homarr/core/infrastructure/http", () => ({
|
vi.mock("@homarr/core/infrastructure/http", () => ({
|
||||||
fetchWithTrustedCertificatesAsync: (url: URL | string, init?: RequestInit) => fetch(url, init),
|
fetchWithTrustedCertificatesAsync: (url: URL | string, init?: RequestInit) => fetch(url, init),
|
||||||
createAxiosCertificateInstanceAsync: vi.fn().mockResolvedValue({}),
|
createAxiosCertificateInstanceAsync: vi.fn().mockResolvedValue({}),
|
||||||
createCertificateAgentAsync: vi.fn().mockResolvedValue(undefined),
|
createCertificateAgentAsync: vi.fn().mockResolvedValue({ close: closeAgent }),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
vi.mock("@homarr/core/infrastructure/certificates", () => ({
|
vi.mock("@homarr/core/infrastructure/certificates", () => ({
|
||||||
@@ -153,6 +154,7 @@ describe("subscribeRealtimeMetrics", () => {
|
|||||||
|
|
||||||
expect(subscriptionBodies).toEqual([{ clientId: "client-1", subscriptions: [topic] }]);
|
expect(subscriptionBodies).toEqual([{ clientId: "client-1", subscriptions: [topic] }]);
|
||||||
expect(events.map((event) => event.type)).toEqual(["system_stats", "container_stats"]);
|
expect(events.map((event) => event.type)).toEqual(["system_stats", "container_stats"]);
|
||||||
|
expect(closeAgent).toHaveBeenCalled();
|
||||||
} finally {
|
} finally {
|
||||||
globalThis.fetch = originalFetch;
|
globalThis.fetch = originalFetch;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,213 @@
|
|||||||
|
// @vitest-environment node
|
||||||
|
import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
|
||||||
|
|
||||||
|
vi.hoisted(() => {
|
||||||
|
process.env.SKIP_ENV_VALIDATION = "true";
|
||||||
|
process.env.SECRET_ENCRYPTION_KEY = "ff3f4f7ce30e870c9630de9e5d244ffa81101a24ed0dfe5f064beb53a7e684f1";
|
||||||
|
process.env.ENABLE_DNS_CACHING = "false";
|
||||||
|
});
|
||||||
|
|
||||||
|
// A stateful stand-in for redis, so a session actually survives between calls and the
|
||||||
|
// expiry logic can be exercised end to end.
|
||||||
|
const store = vi.hoisted(() => new Map<string, { value: string; ttlSeconds?: number }>());
|
||||||
|
|
||||||
|
vi.mock("@homarr/redis", () => ({
|
||||||
|
createGetSetChannel: (name: string) => ({
|
||||||
|
getAsync: () => Promise.resolve(store.get(name)?.value ?? null),
|
||||||
|
setAsync: (value: string, options?: { ttlSeconds?: number }) => {
|
||||||
|
store.set(name, { value, ttlSeconds: options?.ttlSeconds });
|
||||||
|
return Promise.resolve();
|
||||||
|
},
|
||||||
|
removeAsync: () => {
|
||||||
|
store.delete(name);
|
||||||
|
return Promise.resolve();
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("@homarr/core/infrastructure/logs", () => ({
|
||||||
|
createLogger: () => ({ debug: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn() }),
|
||||||
|
ErrorWithMetadata: class extends Error {},
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("@homarr/core/infrastructure/http", () => ({
|
||||||
|
fetchWithTrustedCertificatesAsync: (url: URL | string, init?: RequestInit) => fetch(url, init),
|
||||||
|
createAxiosCertificateInstanceAsync: vi.fn().mockResolvedValue({}),
|
||||||
|
createCertificateAgentAsync: vi.fn().mockResolvedValue({ close: vi.fn() }),
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("@homarr/core/infrastructure/certificates", () => ({
|
||||||
|
getTrustedCertificateHostnamesAsync: vi.fn().mockResolvedValue([]),
|
||||||
|
getAllTrustedCertificatesAsync: vi.fn().mockResolvedValue([]),
|
||||||
|
}));
|
||||||
|
|
||||||
|
import { BeszelIntegration, isSessionExpired, parseTokenExpiration } from "../beszel-integration";
|
||||||
|
|
||||||
|
const base64Url = (value: object) => Buffer.from(JSON.stringify(value)).toString("base64url");
|
||||||
|
const createToken = (expiresAtSeconds: number) => `header.${base64Url({ exp: expiresAtSeconds })}.signature`;
|
||||||
|
|
||||||
|
describe("parseTokenExpiration", () => {
|
||||||
|
test("reads the exp claim as epoch milliseconds", () => {
|
||||||
|
expect(parseTokenExpiration(createToken(1_800_000_000))).toBe(1_800_000_000_000);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("decodes base64url payloads containing - and _", () => {
|
||||||
|
// A payload that base64-encodes with both + and /, which must be url-decoded first.
|
||||||
|
const token = `header.${Buffer.from(JSON.stringify({ sub: "a>b?c>>", exp: 1_700_000_000 })).toString("base64url")}.sig`;
|
||||||
|
expect(parseTokenExpiration(token)).toBe(1_700_000_000_000);
|
||||||
|
});
|
||||||
|
|
||||||
|
test.each([
|
||||||
|
["not-a-jwt", "no segments"],
|
||||||
|
["header.%%%not-base64%%%.signature", "undecodable payload"],
|
||||||
|
[`header.${base64Url({ id: "user-1" })}.signature`, "no exp claim"],
|
||||||
|
[`header.${base64Url({ exp: "soon" })}.signature`, "non-numeric exp"],
|
||||||
|
])("returns null for %s (%s)", (token) => {
|
||||||
|
expect(parseTokenExpiration(token)).toBeNull();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const session = (expiresAt?: number) => ({ token: "t", userId: "u", expiresAt });
|
||||||
|
|
||||||
|
describe("isSessionExpired", () => {
|
||||||
|
const now = Date.UTC(2026, 6, 26, 12, 0, 0);
|
||||||
|
|
||||||
|
test("treats a session with an unknown expiry as valid, falling back to the 401 retry", () => {
|
||||||
|
expect(isSessionExpired(session(undefined), now)).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("keeps a session that is comfortably in the future", () => {
|
||||||
|
expect(isSessionExpired(session(now + 60 * 60 * 1000), now)).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("expires a session that lapses within the leeway window", () => {
|
||||||
|
expect(isSessionExpired(session(now + 30_000), now)).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("expires a session that has already lapsed", () => {
|
||||||
|
expect(isSessionExpired(session(now - 1), now)).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const createIntegration = () =>
|
||||||
|
new BeszelIntegration({
|
||||||
|
id: "test-beszel-session",
|
||||||
|
name: "Test Beszel",
|
||||||
|
url: "http://localhost:8090",
|
||||||
|
externalUrl: null,
|
||||||
|
decryptedSecrets: [
|
||||||
|
{ kind: "username", value: "user@example.com" },
|
||||||
|
{ kind: "password", value: "password" },
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("BeszelIntegration session lifecycle", () => {
|
||||||
|
const originalFetch = globalThis.fetch;
|
||||||
|
let authCount = 0;
|
||||||
|
let issuedToken = "";
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
store.clear();
|
||||||
|
authCount = 0;
|
||||||
|
globalThis.fetch = vi.fn((input: RequestInfo | URL) => {
|
||||||
|
const url = String(input);
|
||||||
|
if (url.endsWith("/api/collections/users/auth-with-password")) {
|
||||||
|
authCount++;
|
||||||
|
return Promise.resolve(Response.json({ token: issuedToken, record: { id: "user-1" } }));
|
||||||
|
}
|
||||||
|
if (url.includes("/api/collections/systems/records")) {
|
||||||
|
return Promise.resolve(Response.json({ page: 1, perPage: 500, totalItems: 0, totalPages: 0, items: [] }));
|
||||||
|
}
|
||||||
|
throw new Error(`Unexpected request: ${url}`);
|
||||||
|
}) as typeof fetch;
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
globalThis.fetch = originalFetch;
|
||||||
|
});
|
||||||
|
|
||||||
|
test("reuses a stored session while its token is still valid", async () => {
|
||||||
|
issuedToken = createToken(Math.floor(Date.now() / 1000) + 7 * 24 * 60 * 60);
|
||||||
|
const integration = createIntegration();
|
||||||
|
|
||||||
|
await integration.getSystemsAsync();
|
||||||
|
await integration.getSystemsAsync();
|
||||||
|
|
||||||
|
expect(authCount).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("persists the session with a ttl matching the token lifetime", async () => {
|
||||||
|
const lifetimeSeconds = 7 * 24 * 60 * 60;
|
||||||
|
issuedToken = createToken(Math.floor(Date.now() / 1000) + lifetimeSeconds);
|
||||||
|
|
||||||
|
await createIntegration().getSystemsAsync();
|
||||||
|
|
||||||
|
const stored = store.get("session-store:test-beszel-session");
|
||||||
|
expect(stored?.ttlSeconds).toBeGreaterThan(lifetimeSeconds - 60);
|
||||||
|
expect(stored?.ttlSeconds).toBeLessThanOrEqual(lifetimeSeconds);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("re-authenticates once the stored token has expired", async () => {
|
||||||
|
// Beszel replies 200 + empty list to an expired token instead of 401, so without an expiry
|
||||||
|
// check the stale session would be reused forever. See homarr-labs/homarr#6470.
|
||||||
|
vi.useFakeTimers();
|
||||||
|
|
||||||
|
try {
|
||||||
|
const lifetimeSeconds = 7 * 24 * 60 * 60;
|
||||||
|
const issuedAt = new Date("2026-07-26T00:00:00.000Z");
|
||||||
|
vi.setSystemTime(issuedAt);
|
||||||
|
issuedToken = createToken(Math.floor(issuedAt.getTime() / 1000) + lifetimeSeconds);
|
||||||
|
const integration = createIntegration();
|
||||||
|
|
||||||
|
await integration.getSystemsAsync();
|
||||||
|
expect(authCount).toBe(1);
|
||||||
|
|
||||||
|
// Step past the token's lifetime, exactly as an idle Homarr instance would.
|
||||||
|
vi.setSystemTime(new Date(issuedAt.getTime() + (lifetimeSeconds + 1) * 1000));
|
||||||
|
issuedToken = createToken(Math.floor(Date.now() / 1000) + lifetimeSeconds);
|
||||||
|
await integration.getSystemsAsync();
|
||||||
|
|
||||||
|
expect(authCount).toBe(2);
|
||||||
|
} finally {
|
||||||
|
vi.useRealTimers();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
test("uses a short-lived token that is valid now but lapses inside the leeway window", async () => {
|
||||||
|
// The leeway exists to stop a token expiring mid-request; it must not reject a token that is
|
||||||
|
// still valid, or an instance with a short authToken.duration could never authenticate.
|
||||||
|
issuedToken = createToken(Math.floor(Date.now() / 1000) + 30);
|
||||||
|
|
||||||
|
await expect(createIntegration().getSystemsAsync()).resolves.toEqual([]);
|
||||||
|
expect(authCount).toBe(1);
|
||||||
|
expect(store.get("session-store:test-beszel-session")?.ttlSeconds).toBeGreaterThan(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("fails loudly when Beszel issues an already-expired token instead of returning empty data", async () => {
|
||||||
|
issuedToken = createToken(Math.floor(Date.now() / 1000) - 600);
|
||||||
|
|
||||||
|
const caught = await createIntegration()
|
||||||
|
.getSystemsAsync()
|
||||||
|
.then(
|
||||||
|
() => null,
|
||||||
|
(error: unknown) => error,
|
||||||
|
);
|
||||||
|
|
||||||
|
// The integration base class wraps thrown errors, so assert against the cause chain.
|
||||||
|
const messages: string[] = [];
|
||||||
|
for (let error: unknown = caught; error instanceof Error; error = error.cause) messages.push(error.message);
|
||||||
|
expect(messages.join(" | ")).toMatch(/clock skew/i);
|
||||||
|
|
||||||
|
// The dead token must not be persisted, or it would be served to the next caller.
|
||||||
|
expect(store.has("session-store:test-beszel-session")).toBe(false);
|
||||||
|
expect(authCount).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("does not store a ttl when the token carries no readable expiry", async () => {
|
||||||
|
issuedToken = "opaque-token-without-claims";
|
||||||
|
|
||||||
|
await createIntegration().getSystemsAsync();
|
||||||
|
|
||||||
|
expect(store.get("session-store:test-beszel-session")?.ttlSeconds).toBeUndefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -30,7 +30,7 @@ export class QBitTorrentIntegration extends Integration implements IDownloadClie
|
|||||||
public async getClientJobsAndStatusAsync(input: { limit: number }): Promise<DownloadClientJobsAndStatus> {
|
public async getClientJobsAndStatusAsync(input: { limit: number }): Promise<DownloadClientJobsAndStatus> {
|
||||||
const type = "torrent";
|
const type = "torrent";
|
||||||
const client = await this.getClientAsync();
|
const client = await this.getClientAsync();
|
||||||
const torrents = await client.listTorrents({ limit: input.limit, sort: "progress", reverse: false });
|
const torrents = await client.listTorrents({ limit: input.limit });
|
||||||
const rates = torrents.reduce(
|
const rates = torrents.reduce(
|
||||||
({ down, up }, { dlspeed, upspeed }) => ({ down: down + dlspeed, up: up + upspeed }),
|
({ down, up }, { dlspeed, upspeed }) => ({ down: down + dlspeed, up: up + upspeed }),
|
||||||
{ down: 0, up: 0 },
|
{ down: 0, up: 0 },
|
||||||
|
|||||||
@@ -65,6 +65,9 @@ const optionMapping: OptionMapping = {
|
|||||||
useCustomTimezone: () => true,
|
useCustomTimezone: () => true,
|
||||||
customTimeFormat: () => undefined,
|
customTimeFormat: () => undefined,
|
||||||
customDateFormat: () => undefined,
|
customDateFormat: () => undefined,
|
||||||
|
showWeather: () => undefined,
|
||||||
|
weatherLocation: () => undefined,
|
||||||
|
isWeatherFormatFahrenheit: () => undefined,
|
||||||
},
|
},
|
||||||
downloads: {
|
downloads: {
|
||||||
activeTorrentThreshold: (oldOptions) =>
|
activeTorrentThreshold: (oldOptions) =>
|
||||||
@@ -74,15 +77,16 @@ const optionMapping: OptionMapping = {
|
|||||||
categoryFilter: (oldOptions) => ("labelFilter" in oldOptions ? oldOptions.labelFilter : undefined),
|
categoryFilter: (oldOptions) => ("labelFilter" in oldOptions ? oldOptions.labelFilter : undefined),
|
||||||
filterIsWhitelist: (oldOptions) =>
|
filterIsWhitelist: (oldOptions) =>
|
||||||
"labelFilterIsWhitelist" in oldOptions ? oldOptions.labelFilterIsWhitelist : undefined,
|
"labelFilterIsWhitelist" in oldOptions ? oldOptions.labelFilterIsWhitelist : undefined,
|
||||||
enableRowSorting: (oldOptions) => ("rowSorting" in oldOptions ? oldOptions.rowSorting : undefined),
|
|
||||||
showCompletedTorrent: (oldOptions) =>
|
showCompletedTorrent: (oldOptions) =>
|
||||||
"displayCompletedTorrents" in oldOptions ? oldOptions.displayCompletedTorrents : undefined,
|
"displayCompletedTorrents" in oldOptions ? oldOptions.displayCompletedTorrents : undefined,
|
||||||
columns: () => ["integration", "name", "progress", "time", "actions"],
|
columns: () => ["integration", "name", "progress", "time", "state"],
|
||||||
defaultSort: () => "type",
|
defaultSort: () => "progress",
|
||||||
descendingDefaultSort: () => false,
|
descendingDefaultSort: () => false,
|
||||||
showCompletedUsenet: () => true,
|
showCompletedUsenet: () => true,
|
||||||
showCompletedHttp: () => true,
|
showCompletedHttp: () => true,
|
||||||
limitPerIntegration: () => undefined,
|
limitPerIntegration: () => undefined,
|
||||||
|
columnOrder: () => undefined,
|
||||||
|
columnWidths: () => undefined,
|
||||||
},
|
},
|
||||||
weather: {
|
weather: {
|
||||||
forecastDayCount: (oldOptions) => oldOptions.forecastDays,
|
forecastDayCount: (oldOptions) => oldOptions.forecastDays,
|
||||||
|
|||||||
@@ -13,4 +13,6 @@ export const mediaReleaseRequestHandler = createIntegrationRequestHandler<
|
|||||||
const integrationInstance = await createIntegrationAsync(integration);
|
const integrationInstance = await createIntegrationAsync(integration);
|
||||||
return await integrationInstance.getMediaReleasesAsync();
|
return await integrationInstance.getMediaReleasesAsync();
|
||||||
},
|
},
|
||||||
|
cacheTtlMs: 5 * 60 * 1000,
|
||||||
|
fallbackToStaleOnError: true,
|
||||||
});
|
});
|
||||||
@@ -16,4 +16,6 @@ export const mediaRequestStatsRequestHandler = createIntegrationRequestHandler<
|
|||||||
users: await integrationInstance.getUsersAsync(),
|
users: await integrationInstance.getUsersAsync(),
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
cacheTtlMs: 60_000,
|
||||||
|
fallbackToStaleOnError: true,
|
||||||
});
|
});
|
||||||
@@ -787,11 +787,34 @@ const getLinuxServerIOReleaseAsync = async (
|
|||||||
error: { code: "noReleasesFound", message: `Image "${parsed.name}" not found in LinuxServer.io registry` },
|
error: { code: "noReleasesFound", message: `Image "${parsed.name}" not found in LinuxServer.io registry` },
|
||||||
};
|
};
|
||||||
|
|
||||||
// LSIO's /api/v1/images only exposes the single latest version, so a version
|
const regex = compileVersionRegex(versionRegex);
|
||||||
// filter can never surface an older release (#4351). When the image has a GitHub
|
if (versionRegex && !regex) {
|
||||||
// repository, delegate to the GitHub release provider to fetch the real release
|
return {
|
||||||
// history and apply the filter, while keeping LSIO's own image metadata. Any
|
success: false,
|
||||||
// GitHub failure (no repo, no releases, rate limit) falls back to the LSIO latest.
|
error: { code: "noMatchingVersion", message: `Invalid regex: /${versionRegex}/` },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!regex || regex.test(release.version)) {
|
||||||
|
return {
|
||||||
|
success: true,
|
||||||
|
data: {
|
||||||
|
latestRelease: release.version,
|
||||||
|
latestReleaseAt: release.version_timestamp,
|
||||||
|
releaseDescription: release.changelog?.shift()?.desc,
|
||||||
|
projectUrl: release.github_url,
|
||||||
|
projectDescription: release.description,
|
||||||
|
isArchived: release.deprecated,
|
||||||
|
createdAt: release.initial_date,
|
||||||
|
starsCount: release.stars,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// LSIO's /api/v1/images only exposes the single latest version, so a filter
|
||||||
|
// that does not match it cannot surface an older release (#4351). Delegate to
|
||||||
|
// the image's GitHub repository to fetch the real release history while
|
||||||
|
// keeping LSIO's own image metadata.
|
||||||
const githubRepo = parseGithubRepo(release.github_url);
|
const githubRepo = parseGithubRepo(release.github_url);
|
||||||
if (githubRepo) {
|
if (githubRepo) {
|
||||||
const githubResult = await getGithubReleaseAsync(getReleaseProviderDefaultUrl("github"), githubRepo, versionRegex);
|
const githubResult = await getGithubReleaseAsync(getReleaseProviderDefaultUrl("github"), githubRepo, versionRegex);
|
||||||
@@ -808,37 +831,14 @@ const getLinuxServerIOReleaseAsync = async (
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
return githubResult;
|
||||||
|
|
||||||
const regex = compileVersionRegex(versionRegex);
|
|
||||||
if (versionRegex && !regex) {
|
|
||||||
return {
|
|
||||||
success: false,
|
|
||||||
error: { code: "noMatchingVersion", message: `Invalid regex: /${versionRegex}/` },
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (regex && !regex.test(release.version)) {
|
|
||||||
return {
|
|
||||||
success: false,
|
|
||||||
error: {
|
|
||||||
code: "noMatchingVersion",
|
|
||||||
message: `Regex /${versionRegex}/ does not match LSIO version "${release.version}"`,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
success: true,
|
success: false,
|
||||||
data: {
|
error: {
|
||||||
latestRelease: release.version,
|
code: "noMatchingVersion",
|
||||||
latestReleaseAt: release.version_timestamp,
|
message: `Regex /${versionRegex}/ does not match LSIO version "${release.version}"`,
|
||||||
releaseDescription: release.changelog?.shift()?.desc,
|
|
||||||
projectUrl: release.github_url,
|
|
||||||
projectDescription: release.description,
|
|
||||||
isArchived: release.deprecated,
|
|
||||||
createdAt: release.initial_date,
|
|
||||||
starsCount: release.stars,
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
import type { MediaRelease } from "@homarr/integrations/types";
|
||||||
|
import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
|
||||||
|
|
||||||
|
import { mediaReleaseRequestHandler } from "../media-release";
|
||||||
|
|
||||||
|
const mocks = vi.hoisted(() => ({
|
||||||
|
createIntegrationAsync: vi.fn(),
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("@homarr/integrations", () => ({
|
||||||
|
createIntegrationAsync: mocks.createIntegrationAsync,
|
||||||
|
}));
|
||||||
|
|
||||||
|
const integration = {
|
||||||
|
id: "plex-integration",
|
||||||
|
kind: "plex",
|
||||||
|
} as Parameters<typeof mediaReleaseRequestHandler.handler>[0];
|
||||||
|
|
||||||
|
describe("mediaReleaseRequestHandler", () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
vi.useFakeTimers();
|
||||||
|
vi.setSystemTime(new Date("2026-07-28T00:00:00Z"));
|
||||||
|
mediaReleaseRequestHandler.invalidateCache();
|
||||||
|
mocks.createIntegrationAsync.mockReset();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
vi.useRealTimers();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("keeps the last successful releases when a refresh fails", async () => {
|
||||||
|
const releases = [{ id: "release-1" }] as MediaRelease[];
|
||||||
|
const getMediaReleasesAsync = vi.fn().mockResolvedValueOnce(releases).mockRejectedValueOnce(new Error("Plex down"));
|
||||||
|
mocks.createIntegrationAsync.mockResolvedValue({ getMediaReleasesAsync });
|
||||||
|
|
||||||
|
const handler = mediaReleaseRequestHandler.handler(integration, {});
|
||||||
|
const initial = await handler.getDataAsync();
|
||||||
|
|
||||||
|
vi.advanceTimersByTime(5 * 60 * 1000 + 1);
|
||||||
|
const fallback = await handler.getDataAsync();
|
||||||
|
|
||||||
|
expect(fallback).toEqual(initial);
|
||||||
|
expect(getMediaReleasesAsync).toHaveBeenCalledTimes(2);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -126,6 +126,128 @@ describe("getLatestMatchingReleaseAsync for GitHub Container Registry", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("getLatestMatchingReleaseAsync for LinuxServer.io", () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
mockedFetch.mockReset();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("uses the LinuxServer.io latest release without fetching GitHub history", async () => {
|
||||||
|
mockedFetch.mockResolvedValueOnce(createLinuxServerResponse());
|
||||||
|
|
||||||
|
const result = await getLatestMatchingReleaseAsync({
|
||||||
|
id: "tautulli",
|
||||||
|
provider: "linuxServerIO",
|
||||||
|
identifier: "lscr.io/linuxserver/tautulli:latest",
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(result).toEqual({
|
||||||
|
success: true,
|
||||||
|
data: {
|
||||||
|
latestRelease: "v2.17.2-ls237",
|
||||||
|
latestReleaseAt: new Date("2026-07-17T00:25:42.000Z"),
|
||||||
|
releaseDescription: "Rebase to Alpine 3.24.",
|
||||||
|
projectUrl: "https://github.com/linuxserver/docker-tautulli",
|
||||||
|
projectDescription: "Tautulli image",
|
||||||
|
isArchived: false,
|
||||||
|
createdAt: new Date("2015-08-10T00:00:00.000Z"),
|
||||||
|
starsCount: 934,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
expect(mockedFetch).toHaveBeenCalledOnce();
|
||||||
|
expectUrl(0, "https://api.linuxserver.io/api/v1/images");
|
||||||
|
});
|
||||||
|
|
||||||
|
test("fetches GitHub history when a version filter requires it", async () => {
|
||||||
|
mockedFetch.mockImplementation(async (input) => {
|
||||||
|
const url = new URL(input.toString());
|
||||||
|
|
||||||
|
if (url.origin === "https://api.linuxserver.io") return createLinuxServerResponse();
|
||||||
|
if (url.pathname === "/repos/linuxserver/docker-tautulli/releases") {
|
||||||
|
return createJsonResponse([
|
||||||
|
{
|
||||||
|
tag_name: "v2.16.0-ls200",
|
||||||
|
published_at: "2026-01-10T12:00:00.000Z",
|
||||||
|
html_url: "https://github.com/linuxserver/docker-tautulli/releases/tag/v2.16.0-ls200",
|
||||||
|
body: "Older supported image",
|
||||||
|
prerelease: false,
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
if (url.pathname === "/repos/linuxserver/docker-tautulli") {
|
||||||
|
return createJsonResponse({
|
||||||
|
html_url: "https://github.com/linuxserver/docker-tautulli",
|
||||||
|
description: "GitHub description",
|
||||||
|
fork: false,
|
||||||
|
archived: false,
|
||||||
|
created_at: "2015-08-10T00:00:00.000Z",
|
||||||
|
stargazers_count: 934,
|
||||||
|
open_issues_count: 2,
|
||||||
|
forks_count: 80,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return createJsonResponse({ message: "Not Found" }, { status: 404, statusText: "Not Found" });
|
||||||
|
});
|
||||||
|
|
||||||
|
const result = await getLatestMatchingReleaseAsync({
|
||||||
|
id: "tautulli",
|
||||||
|
provider: "linuxServerIO",
|
||||||
|
identifier: "linuxserver/tautulli",
|
||||||
|
versionRegex: "^v2\\.16\\..+-ls[0-9]+$",
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(result).toEqual({
|
||||||
|
success: true,
|
||||||
|
data: expect.objectContaining({
|
||||||
|
latestRelease: "v2.16.0-ls200",
|
||||||
|
projectUrl: "https://github.com/linuxserver/docker-tautulli",
|
||||||
|
projectDescription: "Tautulli image",
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
expect(mockedFetch).toHaveBeenCalledTimes(3);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("uses the LinuxServer.io latest release when it matches the version filter", async () => {
|
||||||
|
mockedFetch.mockResolvedValueOnce(createLinuxServerResponse());
|
||||||
|
|
||||||
|
const result = await getLatestMatchingReleaseAsync({
|
||||||
|
id: "tautulli",
|
||||||
|
provider: "linuxServerIO",
|
||||||
|
identifier: "linuxserver/tautulli",
|
||||||
|
versionRegex: "^v2\\.17\\..+-ls[0-9]+$",
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(result).toEqual({
|
||||||
|
success: true,
|
||||||
|
data: expect.objectContaining({ latestRelease: "v2.17.2-ls237" }),
|
||||||
|
});
|
||||||
|
expect(mockedFetch).toHaveBeenCalledOnce();
|
||||||
|
expectUrl(0, "https://api.linuxserver.io/api/v1/images");
|
||||||
|
});
|
||||||
|
|
||||||
|
test("returns the GitHub error when filtered release history cannot be fetched", async () => {
|
||||||
|
mockedFetch.mockImplementation(async (input) => {
|
||||||
|
const url = new URL(input.toString());
|
||||||
|
if (url.origin === "https://api.linuxserver.io") return createLinuxServerResponse();
|
||||||
|
|
||||||
|
return createJsonResponse({ message: "GitHub unavailable" }, { status: 404, statusText: "Not Found" });
|
||||||
|
});
|
||||||
|
|
||||||
|
const result = await getLatestMatchingReleaseAsync({
|
||||||
|
id: "tautulli",
|
||||||
|
provider: "linuxServerIO",
|
||||||
|
identifier: "linuxserver/tautulli",
|
||||||
|
versionRegex: "^v2\\.16\\..+-ls[0-9]+$",
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(result).toEqual({
|
||||||
|
success: false,
|
||||||
|
error: expect.objectContaining({ code: "unexpected", message: expect.stringContaining("GitHub unavailable") }),
|
||||||
|
});
|
||||||
|
expect(mockedFetch.mock.calls.length).toBeGreaterThan(1);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
interface MockGhcrResponsesInput {
|
interface MockGhcrResponsesInput {
|
||||||
registryOrigin?: string;
|
registryOrigin?: string;
|
||||||
repositoryName: string;
|
repositoryName: string;
|
||||||
@@ -185,6 +307,27 @@ const createJsonResponse = (body: unknown, init: JsonResponseInit = {}) =>
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const createLinuxServerResponse = () =>
|
||||||
|
createJsonResponse({
|
||||||
|
data: {
|
||||||
|
repositories: {
|
||||||
|
linuxserver: [
|
||||||
|
{
|
||||||
|
name: "tautulli",
|
||||||
|
initial_date: "2015-08-10",
|
||||||
|
github_url: "https://github.com/linuxserver/docker-tautulli",
|
||||||
|
description: "Tautulli image",
|
||||||
|
version: "v2.17.2-ls237",
|
||||||
|
version_timestamp: "2026-07-17 00:25:42+00:00",
|
||||||
|
stars: 934,
|
||||||
|
deprecated: false,
|
||||||
|
changelog: [{ date: "2026-07-05", desc: "Rebase to Alpine 3.24." }],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
const expectUrl = (callIndex: number, expectedUrl: string) => {
|
const expectUrl = (callIndex: number, expectedUrl: string) => {
|
||||||
expect(mockedFetch.mock.calls[callIndex]?.[0].toString().split("?")[0]).toBe(expectedUrl);
|
expect(mockedFetch.mock.calls[callIndex]?.[0].toString().split("?")[0]).toBe(expectedUrl);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "Utilitza icones pels pings"
|
"label": "Utilitza icones pels pings"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "Motor de cerca principal"
|
"label": "Motor de cerca principal"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "",
|
"clear": "",
|
||||||
"heading": "",
|
"heading": "",
|
||||||
"align": "",
|
"align": "",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "",
|
"blockquote": "",
|
||||||
"horizontalLine": "",
|
"horizontalLine": "",
|
||||||
"bulletList": "",
|
"bulletList": "",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "",
|
"sunrise": "",
|
||||||
"sunset": "",
|
"sunset": "",
|
||||||
"maxWindSpeed": "",
|
"maxWindSpeed": "",
|
||||||
"maxWindGusts": ""
|
"maxWindGusts": "",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "",
|
"clear": "",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "",
|
"user": "",
|
||||||
"name": "",
|
"name": "",
|
||||||
"id": "",
|
"id": "",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "",
|
"name": "",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "",
|
||||||
"noAlbumSelected": "",
|
|
||||||
"noPhotos": ""
|
"noPhotos": ""
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"noItems": "",
|
"noItems": "",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "",
|
"name": "",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "",
|
"updated": "",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "",
|
"search": "",
|
||||||
"selected": "",
|
"selected": "",
|
||||||
"footer": "",
|
"footer": "",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "为 ping 使用图标"
|
"label": "为 ping 使用图标"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "默认搜索引擎"
|
"label": "默认搜索引擎"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "API 密钥 (机密)",
|
"label": "API 密钥 (机密)",
|
||||||
"newLabel": "新建API密钥(机密)"
|
"newLabel": "新建API密钥(机密)"
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "应用 ID",
|
"label": "应用 ID",
|
||||||
"newLabel": "新应用 ID"
|
"newLabel": "新应用 ID"
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "自定义日期格式",
|
"label": "自定义日期格式",
|
||||||
"description": "使用 ISO 8601 格式化日期(这将覆盖其他选项)"
|
"description": "使用 ISO 8601 格式化日期(这将覆盖其他选项)"
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "清除格式",
|
"clear": "清除格式",
|
||||||
"heading": "标题 {level}",
|
"heading": "标题 {level}",
|
||||||
"align": "对齐文本: {position}",
|
"align": "对齐文本: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "引用",
|
"blockquote": "引用",
|
||||||
"horizontalLine": "横线",
|
"horizontalLine": "横线",
|
||||||
"bulletList": "符号列表",
|
"bulletList": "符号列表",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "日出",
|
"sunrise": "日出",
|
||||||
"sunset": "日落",
|
"sunset": "日落",
|
||||||
"maxWindSpeed": "最大风速:{maxWindSpeed} {unit}",
|
"maxWindSpeed": "最大风速:{maxWindSpeed} {unit}",
|
||||||
"maxWindGusts": "最大阵风:{maxWindGusts} {unit}"
|
"maxWindGusts": "最大阵风:{maxWindGusts} {unit}",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "晴朗",
|
"clear": "晴朗",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "用户",
|
"user": "用户",
|
||||||
"name": "名称",
|
"name": "名称",
|
||||||
"id": "ID",
|
"id": "ID",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "技术统计",
|
"title": "技术统计",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "Immich 服务器统计",
|
"name": "Immich 服务器统计",
|
||||||
"description": "有关您的 Immich 实例的信息",
|
"description": "有关您的 Immich 实例的信息",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "Immich 相册",
|
"name": "Immich 相册",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "相册ID",
|
"label": "相册ID",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "Immich 相册图片幻灯片",
|
"description": "Immich 相册图片幻灯片",
|
||||||
"noAlbumSelected": "未选择相册,请编辑组件并选择一个相册",
|
|
||||||
"noPhotos": "此相册中没有照片"
|
"noPhotos": "此相册中没有照片"
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "在新标签页中打开链接"
|
"label": "在新标签页中打开链接"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "RSS 订阅",
|
"name": "RSS 订阅",
|
||||||
"description": "监视和显示一个或多个通用 RSS、ATOM 或 JSON 源",
|
"description": "监视和显示一个或多个通用 RSS、ATOM 或 JSON 源",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "通知",
|
"name": "通知",
|
||||||
"description": "在集成中显示通知历史",
|
"description": "在集成中显示通知历史",
|
||||||
"noItems": "没有可显示的通知。",
|
"noItems": "没有可显示的通知。",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "网速测试追踪器",
|
"name": "网速测试追踪器",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "容器",
|
"title": "容器",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "已更新 {when}",
|
"updated": "已更新 {when}",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "搜索 {count} 容器",
|
"search": "搜索 {count} 容器",
|
||||||
"selected": "{totalCount} 容器的 {selectCount}",
|
"selected": "{totalCount} 容器的 {selectCount}",
|
||||||
"footer": "总计 {count} 容器",
|
"footer": "总计 {count} 容器",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "crwdns44:0crwdne44:0"
|
"label": "crwdns44:0crwdne44:0"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "crwdns6095:0crwdne6095:0",
|
||||||
|
"description": "crwdns6097:0crwdne6097:0"
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "crwdns2694:0crwdne2694:0"
|
"label": "crwdns2694:0crwdne2694:0"
|
||||||
},
|
},
|
||||||
@@ -862,7 +866,7 @@
|
|||||||
"created": "crwdns5553:0{name}crwdne5553:0",
|
"created": "crwdns5553:0{name}crwdne5553:0",
|
||||||
"updated": "crwdns5555:0{name}crwdne5555:0",
|
"updated": "crwdns5555:0{name}crwdne5555:0",
|
||||||
"deleted": "crwdns5557:0{name}crwdne5557:0",
|
"deleted": "crwdns5557:0{name}crwdne5557:0",
|
||||||
"imported": "crwdns5559:0crwdne5559:0",
|
"imported": "crwdns6079:0crwdne6079:0",
|
||||||
"aiPromptCopied": "crwdns5561:0crwdne5561:0",
|
"aiPromptCopied": "crwdns5561:0crwdne5561:0",
|
||||||
"aiPromptDescription": "crwdns5563:0crwdne5563:0",
|
"aiPromptDescription": "crwdns5563:0crwdne5563:0",
|
||||||
"aiPromptCopy": "crwdns5565:0crwdne5565:0",
|
"aiPromptCopy": "crwdns5565:0crwdne5565:0",
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "crwdns3618:0crwdne3618:0",
|
"label": "crwdns3618:0crwdne3618:0",
|
||||||
"newLabel": "crwdns3620:0crwdne3620:0"
|
"newLabel": "crwdns3620:0crwdne3620:0"
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "crwdns5859:0crwdne5859:0",
|
||||||
|
"newLabel": "crwdns5861:0crwdne5861:0"
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "crwdns5863:0crwdne5863:0",
|
||||||
|
"newLabel": "crwdns5865:0crwdne5865:0"
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "crwdns3676:0crwdne3676:0",
|
"label": "crwdns3676:0crwdne3676:0",
|
||||||
"newLabel": "crwdns3678:0crwdne3678:0"
|
"newLabel": "crwdns3678:0crwdne3678:0"
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "crwdns5753:0crwdne5753:0",
|
||||||
|
"description": "crwdns5755:0crwdne5755:0"
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "crwdns5003:0crwdne5003:0",
|
"name": "crwdns5003:0crwdne5003:0",
|
||||||
"description": "crwdns5005:0crwdne5005:0"
|
"description": "crwdns5005:0crwdne5005:0"
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "crwdns5867:0crwdne5867:0",
|
||||||
|
"description": "crwdns5869:0crwdne5869:0"
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "crwdns5799:0crwdne5799:0",
|
||||||
|
"description": "crwdns5801:0crwdne5801:0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "crwdns5739:0crwdne5739:0",
|
"refresh": "crwdns5739:0crwdne5739:0",
|
||||||
"options": "crwdns5709:0crwdne5709:0",
|
"options": "crwdns5709:0crwdne5709:0",
|
||||||
"actions": "crwdns5711:0crwdne5711:0"
|
"actions": "crwdns5711:0crwdne5711:0"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "crwdns6049:0crwdne6049:0",
|
||||||
|
"error": "crwdns6051:0crwdne6051:0",
|
||||||
|
"loading": "crwdns6053:0crwdne6053:0",
|
||||||
|
"idle": "crwdns6055:0crwdne6055:0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "crwdns2726:0crwdne2726:0",
|
"label": "crwdns2726:0crwdne2726:0",
|
||||||
"description": "crwdns2728:0crwdne2728:0"
|
"description": "crwdns2728:0crwdne2728:0"
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "crwdns6113:0crwdne6113:0",
|
||||||
|
"description": "crwdns6115:0crwdne6115:0"
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": "crwdns6117:0crwdne6117:0"
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": "crwdns6119:0crwdne6119:0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "crwdns884:0crwdne884:0",
|
"clear": "crwdns884:0crwdne884:0",
|
||||||
"heading": "crwdns886:0{level}crwdne886:0",
|
"heading": "crwdns886:0{level}crwdne886:0",
|
||||||
"align": "crwdns888:0{position}crwdne888:0",
|
"align": "crwdns888:0{position}crwdne888:0",
|
||||||
|
"directionLtr": "crwdns6043:0crwdne6043:0",
|
||||||
|
"directionRtl": "crwdns6045:0crwdne6045:0",
|
||||||
"blockquote": "crwdns890:0crwdne890:0",
|
"blockquote": "crwdns890:0crwdne890:0",
|
||||||
"horizontalLine": "crwdns892:0crwdne892:0",
|
"horizontalLine": "crwdns892:0crwdne892:0",
|
||||||
"bulletList": "crwdns894:0crwdne894:0",
|
"bulletList": "crwdns894:0crwdne894:0",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "crwdns2712:0crwdne2712:0",
|
"sunrise": "crwdns2712:0crwdne2712:0",
|
||||||
"sunset": "crwdns2714:0crwdne2714:0",
|
"sunset": "crwdns2714:0crwdne2714:0",
|
||||||
"maxWindSpeed": "crwdns3772:0{maxWindSpeed}crwdnd3772:0{unit}crwdne3772:0",
|
"maxWindSpeed": "crwdns3772:0{maxWindSpeed}crwdnd3772:0{unit}crwdne3772:0",
|
||||||
"maxWindGusts": "crwdns3774:0{maxWindGusts}crwdnd3774:0{unit}crwdne3774:0"
|
"maxWindGusts": "crwdns3774:0{maxWindGusts}crwdnd3774:0{unit}crwdne3774:0",
|
||||||
|
"humidity": "crwdns6111:0{humidity}crwdne6111:0"
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "crwdns1032:0crwdne1032:0",
|
"clear": "crwdns1032:0crwdne1032:0",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "crwdns2476:0crwdne2476:0",
|
"user": "crwdns2476:0crwdne2476:0",
|
||||||
"name": "crwdns2478:0crwdne2478:0",
|
"name": "crwdns2478:0crwdne2478:0",
|
||||||
"id": "crwdns2480:0crwdne2480:0",
|
"id": "crwdns2480:0crwdne2480:0",
|
||||||
|
"status": "crwdns6085:0crwdne6085:0",
|
||||||
|
"directPlay": "crwdns6087:0crwdne6087:0",
|
||||||
|
"transcoding": "crwdns6089:0crwdne6089:0",
|
||||||
|
"paused": "crwdns6091:0crwdne6091:0",
|
||||||
|
"remaining": "crwdns6093:0{minutes}crwdne6093:0",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "crwdns3744:0crwdne3744:0",
|
"title": "crwdns3744:0crwdne3744:0",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": "crwdns5055:0crwdne5055:0"
|
"internalServerError": "crwdns5055:0crwdne5055:0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "crwdns5871:0crwdne5871:0",
|
||||||
|
"description": "crwdns5873:0crwdne5873:0",
|
||||||
|
"title": "crwdns5875:0crwdne5875:0",
|
||||||
|
"totalHosts": "crwdns5877:0crwdne5877:0",
|
||||||
|
"hostsNeedingUpdates": "crwdns5879:0crwdne5879:0",
|
||||||
|
"securityUpdates": "crwdns5881:0crwdne5881:0",
|
||||||
|
"upToDateHosts": "crwdns5883:0crwdne5883:0",
|
||||||
|
"hostsWithSecurityUpdates": "crwdns5885:0crwdne5885:0",
|
||||||
|
"recentUpdates24h": "crwdns5887:0crwdne5887:0",
|
||||||
|
"totalOutdatedPackages": "crwdns5889:0crwdne5889:0",
|
||||||
|
"totalRepos": "crwdns5891:0crwdne5891:0",
|
||||||
|
"osDistribution": "crwdns5893:0crwdne5893:0",
|
||||||
|
"compliance": "crwdns5895:0crwdne5895:0",
|
||||||
|
"complianceRatio": "crwdns5897:0{upToDate}crwdnd5897:0{total}crwdne5897:0",
|
||||||
|
"lastUpdated": "crwdns5899:0{time}crwdne5899:0",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "crwdns5901:0crwdne5901:0",
|
||||||
|
"description": "crwdns5903:0crwdne5903:0"
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "crwdns5905:0crwdne5905:0",
|
||||||
|
"description": "crwdns5907:0crwdne5907:0"
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "crwdns5909:0crwdne5909:0",
|
||||||
|
"description": "crwdns5911:0crwdne5911:0"
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "crwdns5913:0crwdne5913:0",
|
||||||
|
"description": "crwdns5915:0crwdne5915:0"
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "crwdns5917:0crwdne5917:0",
|
||||||
|
"description": "crwdns5919:0crwdne5919:0"
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "crwdns5921:0crwdne5921:0",
|
||||||
|
"description": "crwdns5923:0crwdne5923:0"
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "crwdns5925:0crwdne5925:0",
|
||||||
|
"description": "crwdns5927:0crwdne5927:0"
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "crwdns5929:0crwdne5929:0",
|
||||||
|
"description": "crwdns5931:0crwdne5931:0"
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "crwdns5933:0crwdne5933:0",
|
||||||
|
"description": "crwdns5935:0crwdne5935:0"
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "crwdns5937:0crwdne5937:0",
|
||||||
|
"description": "crwdns5939:0crwdne5939:0"
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "crwdns5941:0crwdne5941:0",
|
||||||
|
"percent": "crwdns5943:0crwdne5943:0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "crwdns5945:0crwdne5945:0",
|
||||||
|
"description": "crwdns5947:0crwdne5947:0"
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "crwdns5949:0crwdne5949:0",
|
||||||
|
"description": "crwdns5951:0crwdne5951:0"
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "crwdns5953:0crwdne5953:0",
|
||||||
|
"description": "crwdns5955:0crwdne5955:0"
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "crwdns5957:0crwdne5957:0",
|
||||||
|
"description": "crwdns5959:0crwdne5959:0"
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "crwdns5961:0crwdne5961:0",
|
||||||
|
"description": "crwdns5963:0crwdne5963:0"
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "crwdns5965:0crwdne5965:0",
|
||||||
|
"description": "crwdns5967:0crwdne5967:0"
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "crwdns5969:0crwdne5969:0",
|
||||||
|
"description": "crwdns5971:0crwdne5971:0"
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "crwdns5973:0crwdne5973:0",
|
||||||
|
"description": "crwdns5975:0crwdne5975:0"
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "crwdns5977:0crwdne5977:0",
|
||||||
|
"description": "crwdns5979:0crwdne5979:0"
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "crwdns5981:0crwdne5981:0",
|
||||||
|
"description": "crwdns5983:0crwdne5983:0"
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "crwdns5985:0crwdne5985:0",
|
||||||
|
"description": "crwdns5987:0crwdne5987:0"
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "crwdns5989:0crwdne5989:0",
|
||||||
|
"description": "crwdns5991:0crwdne5991:0"
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "crwdns5993:0crwdne5993:0",
|
||||||
|
"description": "crwdns5995:0crwdne5995:0"
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "crwdns5997:0crwdne5997:0",
|
||||||
|
"description": "crwdns5999:0crwdne5999:0"
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "crwdns6001:0crwdne6001:0",
|
||||||
|
"description": "crwdns6003:0crwdne6003:0"
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "crwdns6005:0crwdne6005:0",
|
||||||
|
"description": "crwdns6007:0crwdne6007:0"
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "crwdns6009:0crwdne6009:0",
|
||||||
|
"description": "crwdns6011:0crwdne6011:0",
|
||||||
|
"option": {
|
||||||
|
"3": "crwdns6013:0crwdne6013:0",
|
||||||
|
"5": "crwdns6015:0crwdne6015:0",
|
||||||
|
"10": "crwdns6017:0crwdne6017:0",
|
||||||
|
"all": "crwdns6019:0crwdne6019:0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "crwdns6021:0crwdne6021:0",
|
||||||
|
"description": "crwdns6023:0crwdne6023:0"
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "crwdns6025:0crwdne6025:0",
|
||||||
|
"description": "crwdns6027:0crwdne6027:0"
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "crwdns6029:0crwdne6029:0",
|
||||||
|
"description": "crwdns6031:0crwdne6031:0",
|
||||||
|
"option": {
|
||||||
|
"bars": "crwdns6033:0crwdne6033:0",
|
||||||
|
"donut": "crwdns6035:0crwdne6035:0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": "crwdns6037:0crwdne6037:0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "crwdns5803:0crwdne5803:0",
|
||||||
|
"description": "crwdns5805:0crwdne5805:0",
|
||||||
|
"episodes": "crwdns5807:0crwdne5807:0",
|
||||||
|
"movies": "crwdns5809:0crwdne5809:0",
|
||||||
|
"providers": "crwdns5811:0crwdne5811:0",
|
||||||
|
"status": "crwdns5813:0crwdne5813:0",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "crwdns5815:0crwdne5815:0",
|
||||||
|
"description": "crwdns5817:0crwdne5817:0"
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "crwdns5819:0crwdne5819:0",
|
||||||
|
"description": "crwdns5821:0crwdne5821:0"
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "crwdns5823:0crwdne5823:0",
|
||||||
|
"description": "crwdns5825:0crwdne5825:0"
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "crwdns5827:0crwdne5827:0",
|
||||||
|
"description": "crwdns5829:0crwdne5829:0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": "crwdns5831:0crwdne5831:0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "crwdns3880:0crwdne3880:0",
|
"name": "crwdns3880:0crwdne3880:0",
|
||||||
"description": "crwdns3882:0crwdne3882:0",
|
"description": "crwdns3882:0crwdne3882:0",
|
||||||
@@ -2782,10 +3017,11 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "crwdns3908:0crwdne3908:0",
|
"name": "crwdns3908:0crwdne3908:0",
|
||||||
|
"allPhotos": "crwdns6103:0crwdne6103:0",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "crwdns5715:0crwdne5715:0",
|
"label": "crwdns5715:0crwdne5715:0",
|
||||||
"description": "crwdns5717:0crwdne5717:0"
|
"description": "crwdns6105:0crwdne6105:0"
|
||||||
},
|
},
|
||||||
"rotationIntervalSeconds": {
|
"rotationIntervalSeconds": {
|
||||||
"label": "crwdns3914:0crwdne3914:0",
|
"label": "crwdns3914:0crwdne3914:0",
|
||||||
@@ -2800,9 +3036,8 @@
|
|||||||
"description": "crwdns5721:0crwdne5721:0"
|
"description": "crwdns5721:0crwdne5721:0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "crwdns3922:0crwdne3922:0",
|
"description": "crwdns6107:0crwdne6107:0",
|
||||||
"noAlbumSelected": "crwdns3924:0crwdne3924:0",
|
"noPhotos": "crwdns6109:0crwdne6109:0"
|
||||||
"noPhotos": "crwdns3926:0crwdne3926:0"
|
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"name": "crwdns1170:0crwdne1170:0",
|
"name": "crwdns1170:0crwdne1170:0",
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "crwdns1306:0crwdne1306:0"
|
"label": "crwdns1306:0crwdne1306:0"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": "crwdns6081:0crwdne6081:0"
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": "crwdns6083:0crwdne6083:0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "crwdns5833:0crwdne5833:0",
|
||||||
|
"description": "crwdns5835:0crwdne5835:0",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": "crwdns5837:0crwdne5837:0"
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": "crwdns5839:0crwdne5839:0"
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": "crwdns5841:0crwdne5841:0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "crwdns5843:0crwdne5843:0",
|
||||||
|
"queued": "crwdns5845:0crwdne5845:0"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "crwdns5847:0crwdne5847:0",
|
||||||
|
"episode": "crwdns5849:0crwdne5849:0"
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "crwdns5851:0crwdne5851:0",
|
||||||
|
"queued": "crwdns5853:0crwdne5853:0",
|
||||||
|
"noTabsEnabled": "crwdns5855:0crwdne5855:0"
|
||||||
|
},
|
||||||
|
"timeLeft": "crwdns5857:0crwdne5857:0"
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "crwdns1352:0crwdne1352:0",
|
"name": "crwdns1352:0crwdne1352:0",
|
||||||
"description": "crwdns1354:0crwdne1354:0",
|
"description": "crwdns1354:0crwdne1354:0",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "crwdns3476:0crwdne3476:0",
|
"name": "crwdns3476:0crwdne3476:0",
|
||||||
"description": "crwdns3478:0crwdne3478:0",
|
"description": "crwdns3478:0crwdne3478:0",
|
||||||
"noItems": "crwdns3480:0crwdne3480:0",
|
"noItems": "crwdns3480:0crwdne3480:0",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": "crwdns5757:0crwdne5757:0"
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "crwdns4014:0crwdne4014:0",
|
"name": "crwdns4014:0crwdne4014:0",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": "crwdns5095:0crwdne5095:0"
|
"internalServerError": "crwdns5095:0crwdne5095:0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "crwdns5759:0crwdne5759:0",
|
||||||
|
"description": "crwdns5761:0crwdne5761:0",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": "crwdns5763:0crwdne5763:0"
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": "crwdns5765:0crwdne5765:0"
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": "crwdns5767:0crwdne5767:0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "crwdns5769:0crwdne5769:0",
|
||||||
|
"versionUnknown": "crwdns5771:0crwdne5771:0",
|
||||||
|
"summary": {
|
||||||
|
"routers": "crwdns5773:0crwdne5773:0",
|
||||||
|
"entryPoints": "crwdns5775:0crwdne5775:0"
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "crwdns5777:0crwdne5777:0",
|
||||||
|
"services": "crwdns5779:0crwdne5779:0",
|
||||||
|
"middlewares": "crwdns5781:0crwdne5781:0"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "crwdns5783:0crwdne5783:0",
|
||||||
|
"errors": "crwdns5785:0{count}crwdne5785:0",
|
||||||
|
"warnings": "crwdns5787:0{count}crwdne5787:0"
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": "crwdns5789:0crwdne5789:0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "crwdns5097:0crwdne5097:0",
|
"name": "crwdns5097:0crwdne5097:0",
|
||||||
"description": "crwdns5099:0crwdne5099:0",
|
"description": "crwdns5099:0crwdne5099:0",
|
||||||
@@ -3783,8 +4091,8 @@
|
|||||||
},
|
},
|
||||||
"disk": {
|
"disk": {
|
||||||
"title": "crwdns4943:0crwdne4943:0",
|
"title": "crwdns4943:0crwdne4943:0",
|
||||||
"subtitle": "crwdns4945:0crwdne4945:0",
|
"subtitle": "crwdns6039:0crwdne6039:0",
|
||||||
"series": "crwdns4947:0crwdne4947:0"
|
"series": "crwdns6041:0crwdne6041:0"
|
||||||
},
|
},
|
||||||
"diskIO": {
|
"diskIO": {
|
||||||
"title": "crwdns4949:0crwdne4949:0",
|
"title": "crwdns4949:0crwdne4949:0",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "crwdns4953:0crwdne4953:0",
|
"read": "crwdns4953:0crwdne4953:0",
|
||||||
"write": "crwdns4955:0crwdne4955:0"
|
"write": "crwdns4955:0crwdne4955:0"
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "crwdns5793:0crwdne5793:0",
|
||||||
|
"subtitle": "crwdns5795:0crwdne5795:0",
|
||||||
|
"series": "crwdns5797:0crwdne5797:0"
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "crwdns4957:0crwdne4957:0",
|
"title": "crwdns4957:0crwdne4957:0",
|
||||||
"subtitle": "crwdns4959:0crwdne4959:0",
|
"subtitle": "crwdns4959:0crwdne4959:0",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "crwdns1892:0crwdne1892:0",
|
"title": "crwdns1892:0crwdne1892:0",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "crwdns1894:0{when}crwdne1894:0",
|
"updated": "crwdns1894:0{when}crwdne1894:0",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": "crwdns6047:0{when}crwdne6047:0"
|
||||||
|
},
|
||||||
"search": "crwdns3432:0{count}crwdne3432:0",
|
"search": "crwdns3432:0{count}crwdne3432:0",
|
||||||
"selected": "crwdns1898:0{selectCount}crwdnd1898:0{totalCount}crwdne1898:0",
|
"selected": "crwdns1898:0{selectCount}crwdnd1898:0{totalCount}crwdne1898:0",
|
||||||
"footer": "crwdns3434:0{count}crwdne3434:0",
|
"footer": "crwdns3434:0{count}crwdne3434:0",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "crwdns6099:0crwdne6099:0",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": "crwdns6101:0crwdne6101:0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": "crwdns4367:0crwdne4367:0"
|
"label": "crwdns4367:0crwdne4367:0"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "Používat ikony pro pingy"
|
"label": "Používat ikony pro pingy"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Vymazat formátování",
|
"clear": "Vymazat formátování",
|
||||||
"heading": "Nadpis {level}",
|
"heading": "Nadpis {level}",
|
||||||
"align": "Zarovnat text: {position}",
|
"align": "Zarovnat text: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Citace",
|
"blockquote": "Citace",
|
||||||
"horizontalLine": "Vodorovná čára",
|
"horizontalLine": "Vodorovná čára",
|
||||||
"bulletList": "Odrážkový seznam",
|
"bulletList": "Odrážkový seznam",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "",
|
"sunrise": "",
|
||||||
"sunset": "",
|
"sunset": "",
|
||||||
"maxWindSpeed": "",
|
"maxWindSpeed": "",
|
||||||
"maxWindGusts": ""
|
"maxWindGusts": "",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Jasno",
|
"clear": "Jasno",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "Uživatel",
|
"user": "Uživatel",
|
||||||
"name": "Jméno",
|
"name": "Jméno",
|
||||||
"id": "Id",
|
"id": "Id",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "",
|
"name": "",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "",
|
||||||
"noAlbumSelected": "",
|
|
||||||
"noPhotos": ""
|
"noPhotos": ""
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Otevírat odkazy v nové kartě"
|
"label": "Otevírat odkazy v nové kartě"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"noItems": "",
|
"noItems": "",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "",
|
"name": "",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "Kontejnery",
|
"title": "Kontejnery",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "",
|
"updated": "",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "",
|
"search": "",
|
||||||
"selected": "",
|
"selected": "",
|
||||||
"footer": "",
|
"footer": "",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,9 +8,9 @@
|
|||||||
"action": {
|
"action": {
|
||||||
"scratch": "Start fra bunden",
|
"scratch": "Start fra bunden",
|
||||||
"importOldmarr": "Importer fra Homarr før 1.0",
|
"importOldmarr": "Importer fra Homarr før 1.0",
|
||||||
"restoreSqlite": "",
|
"restoreSqlite": "Gendan fra SQLite backup",
|
||||||
"restoreSqliteDescription": "",
|
"restoreSqliteDescription": "Upload en fuld SQLite database backup fra en tidligere Homarr instans. Dette vil gendanne alle tavler, brugere, apps, integrationer og indstillinger.",
|
||||||
"backToOptions": ""
|
"backToOptions": "← Tilbage til opsætningsmuligheder"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"import": {
|
"import": {
|
||||||
@@ -94,12 +94,12 @@
|
|||||||
"subtitle": "Konfigurer serverindstillinger."
|
"subtitle": "Konfigurer serverindstillinger."
|
||||||
},
|
},
|
||||||
"integrations": {
|
"integrations": {
|
||||||
"title": "",
|
"title": "Integrationer",
|
||||||
"subtitle": "",
|
"subtitle": "Vælg de tjenester, du bruger.",
|
||||||
"description": "",
|
"description": "Vælg de integrationer, du gerne vil forbinde. Vi konfigurerer dit dashboard med matchende widgets automatisk.",
|
||||||
"action": {
|
"action": {
|
||||||
"continue": "",
|
"continue": "Forsæt",
|
||||||
"skip": ""
|
"skip": "Spring over for nu"
|
||||||
},
|
},
|
||||||
"configure": {
|
"configure": {
|
||||||
"progress": "",
|
"progress": "",
|
||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "Brug ikoner til pings"
|
"label": "Brug ikoner til pings"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "Standardsøgemaskine"
|
"label": "Standardsøgemaskine"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "API-nøgle (Secret)",
|
"label": "API-nøgle (Secret)",
|
||||||
"newLabel": "Ny API-nøgle (Key)"
|
"newLabel": "Ny API-nøgle (Key)"
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "App Id",
|
"label": "App Id",
|
||||||
"newLabel": "Nyt App Id"
|
"newLabel": "Nyt App Id"
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "Brugerdefineret datoformat",
|
"label": "Brugerdefineret datoformat",
|
||||||
"description": "Brug ISO 8601 til at formatere dato (dette vil tilsidesætte andre valg)"
|
"description": "Brug ISO 8601 til at formatere dato (dette vil tilsidesætte andre valg)"
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Ryd formatering",
|
"clear": "Ryd formatering",
|
||||||
"heading": "Overskrift {level}",
|
"heading": "Overskrift {level}",
|
||||||
"align": "Juster tekst: {position}",
|
"align": "Juster tekst: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Citatblok",
|
"blockquote": "Citatblok",
|
||||||
"horizontalLine": "Horisontal linje",
|
"horizontalLine": "Horisontal linje",
|
||||||
"bulletList": "Punktopstillet liste",
|
"bulletList": "Punktopstillet liste",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "Solopgang",
|
"sunrise": "Solopgang",
|
||||||
"sunset": "Solnedgang",
|
"sunset": "Solnedgang",
|
||||||
"maxWindSpeed": "Maks. vindhastighed: {maxWindSpeed} {unit}",
|
"maxWindSpeed": "Maks. vindhastighed: {maxWindSpeed} {unit}",
|
||||||
"maxWindGusts": "Maks. vindstød {maxWindGusts} {unit}"
|
"maxWindGusts": "Maks. vindstød {maxWindGusts} {unit}",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Skyfrit",
|
"clear": "Skyfrit",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "Bruger",
|
"user": "Bruger",
|
||||||
"name": "Navn",
|
"name": "Navn",
|
||||||
"id": "Id",
|
"id": "Id",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "Statistik for nørder",
|
"title": "Statistik for nørder",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "Immich Server Statistik",
|
"name": "Immich Server Statistik",
|
||||||
"description": "Information om din Immich instans",
|
"description": "Information om din Immich instans",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "Immich album",
|
"name": "Immich album",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "Album ID",
|
"label": "Album ID",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "Diasshow af billeder i dit Immich album",
|
"description": "Diasshow af billeder i dit Immich album",
|
||||||
"noAlbumSelected": "Intet album valgt, rediger widget og vælg et album",
|
|
||||||
"noPhotos": "Ingen fotos i dette album"
|
"noPhotos": "Ingen fotos i dette album"
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Åbn links i ny fane"
|
"label": "Åbn links i ny fane"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "RSS feeds",
|
"name": "RSS feeds",
|
||||||
"description": "Overvåg og vis en eller flere generiske RSS, ATOM eller JSON feeds",
|
"description": "Overvåg og vis en eller flere generiske RSS, ATOM eller JSON feeds",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "Notifikationer",
|
"name": "Notifikationer",
|
||||||
"description": "Vis notifikationshistorik fra en integration",
|
"description": "Vis notifikationshistorik fra en integration",
|
||||||
"noItems": "Ingen notifikationer at vise.",
|
"noItems": "Ingen notifikationer at vise.",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "Speedtest Tracker",
|
"name": "Speedtest Tracker",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "Containere",
|
"title": "Containere",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "Opdateret {when}",
|
"updated": "Opdateret {when}",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "Søg {count} containere",
|
"search": "Søg {count} containere",
|
||||||
"selected": "{selectCount} af {totalCount} containere valgt",
|
"selected": "{selectCount} af {totalCount} containere valgt",
|
||||||
"footer": "Total {count} containere",
|
"footer": "Total {count} containere",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "Symbole für Pings verwenden"
|
"label": "Symbole für Pings verwenden"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "Standard Suchmaschine"
|
"label": "Standard Suchmaschine"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "Benutzerdefiniertes Datumsformat",
|
"label": "Benutzerdefiniertes Datumsformat",
|
||||||
"description": "ISO 8601 Standard benutzen um das Datum zu formatieren (dies wird andere Optionen überschreiben)"
|
"description": "ISO 8601 Standard benutzen um das Datum zu formatieren (dies wird andere Optionen überschreiben)"
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Formatierung entfernen",
|
"clear": "Formatierung entfernen",
|
||||||
"heading": "Überschrift {level}",
|
"heading": "Überschrift {level}",
|
||||||
"align": "Text ausrichten: {position}",
|
"align": "Text ausrichten: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Blockzitat",
|
"blockquote": "Blockzitat",
|
||||||
"horizontalLine": "Horizontale Linie",
|
"horizontalLine": "Horizontale Linie",
|
||||||
"bulletList": "Aufzählung",
|
"bulletList": "Aufzählung",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "Sonnenaufgang",
|
"sunrise": "Sonnenaufgang",
|
||||||
"sunset": "Sonnenuntergang",
|
"sunset": "Sonnenuntergang",
|
||||||
"maxWindSpeed": "Maximale Windgeschwindigkeit: {maxWindSpeed} km/h",
|
"maxWindSpeed": "Maximale Windgeschwindigkeit: {maxWindSpeed} km/h",
|
||||||
"maxWindGusts": "Maximale Windböen: {maxWindGusts} km/h"
|
"maxWindGusts": "Maximale Windböen: {maxWindGusts} km/h",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Klar",
|
"clear": "Klar",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "Benutzer",
|
"user": "Benutzer",
|
||||||
"name": "",
|
"name": "",
|
||||||
"id": "",
|
"id": "",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "",
|
"name": "",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "",
|
||||||
"noAlbumSelected": "",
|
|
||||||
"noPhotos": ""
|
"noPhotos": ""
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Links in neuem Tab öffnen"
|
"label": "Links in neuem Tab öffnen"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "RSS Feeds",
|
"name": "RSS Feeds",
|
||||||
"description": "Einen oder mehrere generische RSS, ATOM oder JSON-Feeds überwachen und anzeigen",
|
"description": "Einen oder mehrere generische RSS, ATOM oder JSON-Feeds überwachen und anzeigen",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"noItems": "",
|
"noItems": "",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "",
|
"name": "",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "Container",
|
"title": "Container",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "Aktualisiert {when}",
|
"updated": "Aktualisiert {when}",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "{count} Container durchsuchen",
|
"search": "{count} Container durchsuchen",
|
||||||
"selected": "{selectCount} von {totalCount} ausgewählten Containern",
|
"selected": "{selectCount} von {totalCount} ausgewählten Containern",
|
||||||
"footer": "",
|
"footer": "",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "Symbole für Pings verwenden"
|
"label": "Symbole für Pings verwenden"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "Standard Suchmaschine"
|
"label": "Standard Suchmaschine"
|
||||||
},
|
},
|
||||||
@@ -1021,7 +1025,7 @@
|
|||||||
"mediaMonitoring": "Überwachung",
|
"mediaMonitoring": "Überwachung",
|
||||||
"speedtest": "Geschwindigkeitstest",
|
"speedtest": "Geschwindigkeitstest",
|
||||||
"analytics": "Nutzungsdaten",
|
"analytics": "Nutzungsdaten",
|
||||||
"vpn": "",
|
"vpn": "VPN",
|
||||||
"mediaLibrary": "Medienbibliothek",
|
"mediaLibrary": "Medienbibliothek",
|
||||||
"uptimeMonitoring": "Überwachung der Betriebszeit"
|
"uptimeMonitoring": "Überwachung der Betriebszeit"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "API-Schlüssel (Secret)",
|
"label": "API-Schlüssel (Secret)",
|
||||||
"newLabel": "Neuer API-Schlüssel (Secret)"
|
"newLabel": "Neuer API-Schlüssel (Secret)"
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "API Key",
|
||||||
|
"newLabel": "Neuer API Key"
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "API Secret",
|
||||||
|
"newLabel": "Neues API Secret"
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "App ID",
|
"label": "App ID",
|
||||||
"newLabel": "Neue App ID"
|
"newLabel": "Neue App ID"
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "Traefik",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "Paperless-ngx",
|
"name": "Paperless-ngx",
|
||||||
"description": "Dokumentenverwaltungssystem zum Archivieren und Organisieren gescannter Dokumente"
|
"description": "Dokumentenverwaltungssystem zum Archivieren und Organisieren gescannter Dokumente"
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1599,9 +1623,15 @@
|
|||||||
"menu": {
|
"menu": {
|
||||||
"label": {
|
"label": {
|
||||||
"settings": "Einstellungen",
|
"settings": "Einstellungen",
|
||||||
"refresh": "",
|
"refresh": "Aktualisieren",
|
||||||
"options": "",
|
"options": "Optionen",
|
||||||
"actions": ""
|
"actions": "Aktionen"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "Fehler",
|
||||||
|
"loading": "Wird geladen",
|
||||||
|
"idle": "Leerlauf"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "Benutzerdefiniertes Datumsformat",
|
"label": "Benutzerdefiniertes Datumsformat",
|
||||||
"description": "ISO 8601 Standard benutzen um das Datum zu formatieren (dies wird andere Optionen überschreiben)"
|
"description": "ISO 8601 Standard benutzen um das Datum zu formatieren (dies wird andere Optionen überschreiben)"
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Formatierung entfernen",
|
"clear": "Formatierung entfernen",
|
||||||
"heading": "Überschrift {level}",
|
"heading": "Überschrift {level}",
|
||||||
"align": "Text ausrichten: {position}",
|
"align": "Text ausrichten: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Blockzitat",
|
"blockquote": "Blockzitat",
|
||||||
"horizontalLine": "Horizontale Linie",
|
"horizontalLine": "Horizontale Linie",
|
||||||
"bulletList": "Aufzählung",
|
"bulletList": "Aufzählung",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "Sonnenaufgang",
|
"sunrise": "Sonnenaufgang",
|
||||||
"sunset": "Sonnenuntergang",
|
"sunset": "Sonnenuntergang",
|
||||||
"maxWindSpeed": "Maximale Windgeschwindigkeit: {maxWindSpeed} {unit}",
|
"maxWindSpeed": "Maximale Windgeschwindigkeit: {maxWindSpeed} {unit}",
|
||||||
"maxWindGusts": "Maximale Windböen: {maxWindGusts} {unit}"
|
"maxWindGusts": "Maximale Windböen: {maxWindGusts} {unit}",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Klar",
|
"clear": "Klar",
|
||||||
@@ -2287,7 +2330,7 @@
|
|||||||
"visibleStorageVolumes": {
|
"visibleStorageVolumes": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"placeholder": ""
|
"placeholder": "Speichervolumen auswählen"
|
||||||
},
|
},
|
||||||
"defaultTab": {
|
"defaultTab": {
|
||||||
"label": "Standard Tab"
|
"label": "Standard Tab"
|
||||||
@@ -2426,8 +2469,8 @@
|
|||||||
},
|
},
|
||||||
"vpn": {
|
"vpn": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "Übersicht deiner VPN-Verbindungen",
|
||||||
"serviceUnavailable": "",
|
"serviceUnavailable": "VPN nicht verfügbar",
|
||||||
"option": {}
|
"option": {}
|
||||||
},
|
},
|
||||||
"ups": {
|
"ups": {
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "Benutzer",
|
"user": "Benutzer",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
"id": "Id",
|
"id": "Id",
|
||||||
|
"status": "Status",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "Statistiken für Nerds",
|
"title": "Statistiken für Nerds",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": "Fehler beim Abrufen der Paperless-ngx-Daten"
|
"internalServerError": "Fehler beim Abrufen der Paperless-ngx-Daten"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "Alle Hosts anzeigen",
|
||||||
|
"description": "Gesamtanzahl der überwachten Hosts anzeigen"
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "Hosts die Updates benötigen anzeigen",
|
||||||
|
"description": "Hosts mit mindestens einem veralteten Paket anzeigen"
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "Sicherheits-Updates anzeigen",
|
||||||
|
"description": "Gesamtzahl der verfügbaren Sicherheits-Updates anzeigen"
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "Immich Serverstatistik einblenden",
|
"name": "Immich Serverstatistik einblenden",
|
||||||
"description": "Informationen über Ihre Immich Instanz",
|
"description": "Informationen über Ihre Immich Instanz",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "Immich Album",
|
"name": "Immich Album",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "Album ID",
|
"label": "Album ID",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "Diashow der Bilder in Ihrem Immich Album",
|
"description": "Diashow der Bilder in Ihrem Immich Album",
|
||||||
"noAlbumSelected": "Kein Album ausgewählt, Widget bearbeiten und Album auswählen",
|
|
||||||
"noPhotos": "Keine Fotos in diesem Album"
|
"noPhotos": "Keine Fotos in diesem Album"
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Links in neuem Tab öffnen"
|
"label": "Links in neuem Tab öffnen"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "RSS Feeds",
|
"name": "RSS Feeds",
|
||||||
"description": "Einen oder mehrere generische RSS, ATOM oder JSON-Feeds überwachen und anzeigen",
|
"description": "Einen oder mehrere generische RSS, ATOM oder JSON-Feeds überwachen und anzeigen",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "Benachrichtigungen",
|
"name": "Benachrichtigungen",
|
||||||
"description": "Benachrichtigungshistorie von einer Integration anzeigen",
|
"description": "Benachrichtigungshistorie von einer Integration anzeigen",
|
||||||
"noItems": "Keine Benachrichtigungen zum Anzeigen.",
|
"noItems": "Keine Benachrichtigungen zum Anzeigen.",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "Speedtest Tracker",
|
"name": "Speedtest Tracker",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": "Fehler beim Abrufen der Laufzeit Daten"
|
"internalServerError": "Fehler beim Abrufen der Laufzeit Daten"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "Audiostatistiken",
|
"name": "Audiostatistiken",
|
||||||
"description": "Bibliotheks- und Wiedergabestatistiken von Navidrome oder Audiobookshelf",
|
"description": "Bibliotheks- und Wiedergabestatistiken von Navidrome oder Audiobookshelf",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "Container",
|
"title": "Container",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "Aktualisiert {when}",
|
"updated": "Aktualisiert {when}",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "{count} Container durchsuchen",
|
"search": "{count} Container durchsuchen",
|
||||||
"selected": "{selectCount} von {totalCount} ausgewählten Containern",
|
"selected": "{selectCount} von {totalCount} ausgewählten Containern",
|
||||||
"footer": "Insgesamt {count} Container",
|
"footer": "Insgesamt {count} Container",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": "Alle Einstellungen öffnen"
|
"label": "Alle Einstellungen öffnen"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "Προεπιλεγμένη μηχανή αναζήτησης"
|
"label": "Προεπιλεγμένη μηχανή αναζήτησης"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "Κλειδί API (Μυστικό)",
|
"label": "Κλειδί API (Μυστικό)",
|
||||||
"newLabel": "Νέο Κλειδί API (Μυστικό)"
|
"newLabel": "Νέο Κλειδί API (Μυστικό)"
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Εκκαθάριση μορφοποίησης",
|
"clear": "Εκκαθάριση μορφοποίησης",
|
||||||
"heading": "Επικεφαλίδα {level}",
|
"heading": "Επικεφαλίδα {level}",
|
||||||
"align": "Στοίχιση κειμένου: {position}",
|
"align": "Στοίχιση κειμένου: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Μπλοκ κειμένου παράθεσης",
|
"blockquote": "Μπλοκ κειμένου παράθεσης",
|
||||||
"horizontalLine": "Οριζόντια γραμμή",
|
"horizontalLine": "Οριζόντια γραμμή",
|
||||||
"bulletList": "Λίστα με κουκκίδες",
|
"bulletList": "Λίστα με κουκκίδες",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "",
|
"sunrise": "",
|
||||||
"sunset": "",
|
"sunset": "",
|
||||||
"maxWindSpeed": "",
|
"maxWindSpeed": "",
|
||||||
"maxWindGusts": ""
|
"maxWindGusts": "",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Καθαρός",
|
"clear": "Καθαρός",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "",
|
"user": "",
|
||||||
"name": "",
|
"name": "",
|
||||||
"id": "",
|
"id": "",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "",
|
"name": "",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "",
|
||||||
"noAlbumSelected": "",
|
|
||||||
"noPhotos": ""
|
"noPhotos": ""
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Άνοιγμα συνδέσμων σε νέα καρτέλα"
|
"label": "Άνοιγμα συνδέσμων σε νέα καρτέλα"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"noItems": "",
|
"noItems": "",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "",
|
"name": "",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "",
|
"updated": "",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "",
|
"search": "",
|
||||||
"selected": "",
|
"selected": "",
|
||||||
"footer": "",
|
"footer": "",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "Use icons for pings"
|
"label": "Use icons for pings"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "Enable right-click on widgets",
|
||||||
|
"description": "Show Homarr's context menu when right-clicking a widget. Disable to use the browser's default menu (e.g. \"Open link in new tab\")."
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "Default search engine"
|
"label": "Default search engine"
|
||||||
},
|
},
|
||||||
@@ -709,76 +713,76 @@
|
|||||||
"addMapping": "Add Mapping",
|
"addMapping": "Add Mapping",
|
||||||
"addColumn": "Add Column",
|
"addColumn": "Add Column",
|
||||||
"edit": "Edit",
|
"edit": "Edit",
|
||||||
"removeMapping": "",
|
"removeMapping": "Remove mapping",
|
||||||
"removeColumn": "",
|
"removeColumn": "Remove column",
|
||||||
"addItem": "",
|
"addItem": "Add Item",
|
||||||
"removeItem": "",
|
"removeItem": "Remove item",
|
||||||
"addBar": "",
|
"addBar": "Add Bar",
|
||||||
"duplicate": "",
|
"duplicate": "Duplicate",
|
||||||
"copyAiPrompt": "",
|
"copyAiPrompt": "Copy AI prompt",
|
||||||
"enable": "",
|
"enable": "Enable",
|
||||||
"disable": "",
|
"disable": "Disable",
|
||||||
"menu": ""
|
"menu": "Actions"
|
||||||
},
|
},
|
||||||
"field": {
|
"field": {
|
||||||
"name": "",
|
"name": "Name",
|
||||||
"description": "",
|
"description": "Description",
|
||||||
"iconUrl": "",
|
"iconUrl": "Icon URL",
|
||||||
"url": "",
|
"url": "URL",
|
||||||
"authType": "",
|
"authType": "Auth Type",
|
||||||
"headerName": "",
|
"headerName": "Header/Query Parameter Name",
|
||||||
"method": "",
|
"method": "Method",
|
||||||
"requestBody": "",
|
"requestBody": "Request Body",
|
||||||
"displayType": "",
|
"displayType": "Display Type",
|
||||||
"jsonPath": "",
|
"jsonPath": "JSON Path",
|
||||||
"jsonPathHint": "",
|
"jsonPathHint": "Use JSONPath syntax to extract values, e.g. $.data.temperature or $.items[0].name",
|
||||||
"label": "",
|
"label": "Label",
|
||||||
"unit": "",
|
"unit": "Unit",
|
||||||
"mappings": "",
|
"mappings": "Mappings",
|
||||||
"tablePath": "",
|
"tablePath": "Array JSON Path",
|
||||||
"tablePathHint": "",
|
"tablePathHint": "Path to the array in the response, e.g. $.data.items",
|
||||||
"columns": "",
|
"columns": "Columns",
|
||||||
"header": "",
|
"header": "Header",
|
||||||
"items": "",
|
"items": "Items",
|
||||||
"gridColumns": "",
|
"gridColumns": "Grid Columns",
|
||||||
"cardStyle": "",
|
"cardStyle": "Card Style",
|
||||||
"bars": "",
|
"bars": "Bars",
|
||||||
"valuePath": "",
|
"valuePath": "Value JSON Path",
|
||||||
"maxPath": "",
|
"maxPath": "Max Value JSON Path",
|
||||||
"showPercentage": "",
|
"showPercentage": "Show Percentage",
|
||||||
"barSize": "",
|
"barSize": "Bar Size",
|
||||||
"goodValues": "",
|
"goodValues": "Good Values (comma-separated)",
|
||||||
"dotSize": "",
|
"dotSize": "Dot Size",
|
||||||
"valueSize": "",
|
"valueSize": "Value Size",
|
||||||
"labelPosition": "",
|
"labelPosition": "Label Position",
|
||||||
"kvLayout": "",
|
"kvLayout": "Layout",
|
||||||
"striped": "",
|
"striped": "Striped Rows",
|
||||||
"compact": "",
|
"compact": "Compact Mode",
|
||||||
"maxHeight": "",
|
"maxHeight": "Max Height (px)",
|
||||||
"color": "",
|
"color": "Colour",
|
||||||
"buttonLabel": "",
|
"buttonLabel": "Button Label",
|
||||||
"buttonColor": "",
|
"buttonColor": "Button Colour",
|
||||||
"confirmText": "",
|
"confirmText": "Confirmation Text",
|
||||||
"confirmTextHint": "",
|
"confirmTextHint": "If set, a confirmation dialogue will appear before executing the request",
|
||||||
"successMessage": "",
|
"successMessage": "Success Message",
|
||||||
"successMessageHint": "",
|
"successMessageHint": "Message shown after successful execution",
|
||||||
"enabled": "",
|
"enabled": "Enabled",
|
||||||
"template": {
|
"template": {
|
||||||
"label": "",
|
"label": "JSX Template",
|
||||||
"description": ""
|
"description": "Mantine JSX template. Access API response fields via data bindings (e.g. data.name). Use whitelisted components only. Forbidden: constructor, __proto__, eval, Function, window, document."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"exampleLabel": "",
|
"exampleLabel": "CPU Temperature",
|
||||||
"exampleLabelShort": "",
|
"exampleLabelShort": "CPU Temp",
|
||||||
"exampleHeader": "",
|
"exampleHeader": "Name",
|
||||||
"exampleUnit": "",
|
"exampleUnit": "°C",
|
||||||
"iconUrl": "",
|
"iconUrl": "https://...",
|
||||||
"url": "",
|
"url": "https://api.example.com/api/v1/status",
|
||||||
"headerName": "",
|
"headerName": "X-API-Key",
|
||||||
"jsonPath": "",
|
"jsonPath": "$.data.value",
|
||||||
"tablePath": "",
|
"tablePath": "$.data.items",
|
||||||
"columnJsonPath": "",
|
"columnJsonPath": "$.name",
|
||||||
"valuePath": "",
|
"valuePath": "",
|
||||||
"maxPath": "",
|
"maxPath": "",
|
||||||
"goodValues": "",
|
"goodValues": "",
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "API Key (Secret)",
|
"label": "API Key (Secret)",
|
||||||
"newLabel": "New API Key (Secret)"
|
"newLabel": "New API Key (Secret)"
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "App Id",
|
"label": "App Id",
|
||||||
"newLabel": "New App Id"
|
"newLabel": "New App Id"
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1598,7 +1622,7 @@
|
|||||||
},
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
"label": {
|
"label": {
|
||||||
"settings": "",
|
"settings": "Settings",
|
||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
@@ -1881,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "Custom date format",
|
"label": "Custom date format",
|
||||||
"description": "Use ISO 8601 to format date (this will override other options)"
|
"description": "Use ISO 8601 to format date (this will override other options)"
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1942,6 +1976,8 @@
|
|||||||
"clear": "Clear formatting",
|
"clear": "Clear formatting",
|
||||||
"heading": "Heading {level}",
|
"heading": "Heading {level}",
|
||||||
"align": "Align text: {position}",
|
"align": "Align text: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Blockquote",
|
"blockquote": "Blockquote",
|
||||||
"horizontalLine": "Horizontal line",
|
"horizontalLine": "Horizontal line",
|
||||||
"bulletList": "Bullet list",
|
"bulletList": "Bullet list",
|
||||||
@@ -2231,7 +2267,8 @@
|
|||||||
"sunrise": "Sunrise",
|
"sunrise": "Sunrise",
|
||||||
"sunset": "Sunset",
|
"sunset": "Sunset",
|
||||||
"maxWindSpeed": "Max wind speed: {maxWindSpeed} {unit}",
|
"maxWindSpeed": "Max wind speed: {maxWindSpeed} {unit}",
|
||||||
"maxWindGusts": "Max wind gusts: {maxWindGusts} {unit}"
|
"maxWindGusts": "Max wind gusts: {maxWindGusts} {unit}",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Clear",
|
"clear": "Clear",
|
||||||
@@ -2695,6 +2732,11 @@
|
|||||||
"user": "User",
|
"user": "User",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
"id": "Id",
|
"id": "Id",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "Stats for nerds",
|
"title": "Stats for nerds",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2760,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "Immich Server Stats",
|
"name": "Immich Server Stats",
|
||||||
"description": "Information about your Immich instance",
|
"description": "Information about your Immich instance",
|
||||||
@@ -2788,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "Immich Album",
|
"name": "Immich Album",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "Album ID",
|
"label": "Album ID",
|
||||||
@@ -2807,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "",
|
||||||
"noAlbumSelected": "",
|
|
||||||
"noPhotos": ""
|
"noPhotos": ""
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2992,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3099,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3342,7 +3606,11 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"noItems": "",
|
"noItems": "",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "",
|
"name": "",
|
||||||
@@ -3423,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3798,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4930,6 +5237,9 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "",
|
"updated": "",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "",
|
"search": "",
|
||||||
"selected": "",
|
"selected": "",
|
||||||
"footer": "",
|
"footer": "",
|
||||||
@@ -5584,10 +5894,10 @@
|
|||||||
},
|
},
|
||||||
"searchEngine": {
|
"searchEngine": {
|
||||||
"none": "",
|
"none": "",
|
||||||
"unavailable": ""
|
"unavailable": "Currently selected (unavailable)"
|
||||||
},
|
},
|
||||||
"colorScheme": {
|
"colorScheme": {
|
||||||
"label": "",
|
"label": "Colour scheme",
|
||||||
"children": {
|
"children": {
|
||||||
"detail": {
|
"detail": {
|
||||||
"title": "Select your colour scheme"
|
"title": "Select your colour scheme"
|
||||||
@@ -5658,8 +5968,16 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "Enable right-click on widgets",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": "Enable right-click on widgets"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": "Open full preferences page"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1905,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "Custom date format",
|
"label": "Custom date format",
|
||||||
"description": "Use ISO 8601 to format date (this will override other options)"
|
"description": "Use ISO 8601 to format date (this will override other options)"
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "Show weather",
|
||||||
|
"description": "Display a small animated weather icon and temperature in the corner of the card"
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": "Weather location"
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": "Use Fahrenheit"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -3069,11 +3079,20 @@
|
|||||||
"limitPerIntegration": {
|
"limitPerIntegration": {
|
||||||
"label": "Limit items per integration",
|
"label": "Limit items per integration",
|
||||||
"description": "This will limit the number of items shown per integration, not globally"
|
"description": "This will limit the number of items shown per integration, not globally"
|
||||||
|
},
|
||||||
|
"columnOrder": {
|
||||||
|
"label": "Column order"
|
||||||
|
},
|
||||||
|
"columnWidths": {
|
||||||
|
"label": "Column widths"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"noColumns": "Select Columns in Items",
|
"noColumns": "Select Columns in Items",
|
||||||
"noCommunications": "Can't load data from integration"
|
"noCommunications": "Can't load data from integration",
|
||||||
|
"noItems": "No downloads found",
|
||||||
|
"actionFailed": "Action failed",
|
||||||
|
"actionFailedMessage": "The action could not be completed. Please try again."
|
||||||
},
|
},
|
||||||
"items": {
|
"items": {
|
||||||
"actions": {
|
"actions": {
|
||||||
@@ -3096,7 +3115,8 @@
|
|||||||
"detailsTitle": "Current index within client"
|
"detailsTitle": "Current index within client"
|
||||||
},
|
},
|
||||||
"id": {
|
"id": {
|
||||||
"columnTitle": "Id"
|
"columnTitle": "Id",
|
||||||
|
"detailsTitle": "Item ID"
|
||||||
},
|
},
|
||||||
"integration": {
|
"integration": {
|
||||||
"columnTitle": "Integration"
|
"columnTitle": "Integration"
|
||||||
@@ -3130,7 +3150,8 @@
|
|||||||
},
|
},
|
||||||
"time": {
|
"time": {
|
||||||
"columnTitle": "Finish time",
|
"columnTitle": "Finish time",
|
||||||
"detailsTitle": "Time since/to completion"
|
"detailsTitle": "Time since/to completion",
|
||||||
|
"eta": "ETA"
|
||||||
},
|
},
|
||||||
"type": {
|
"type": {
|
||||||
"columnTitle": "Type",
|
"columnTitle": "Type",
|
||||||
@@ -3174,7 +3195,23 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"globalRatio": "Global Ratio"
|
"globalRatio": "Global Ratio",
|
||||||
|
"contextMenu": {
|
||||||
|
"copyName": "Copy name",
|
||||||
|
"copyId": "Copy ID",
|
||||||
|
"clearFilters": "Clear filters"
|
||||||
|
},
|
||||||
|
"footer": {
|
||||||
|
"filter": "Filter downloads"
|
||||||
|
},
|
||||||
|
"stats": {
|
||||||
|
"show": "Show global stats",
|
||||||
|
"hide": "Hide global stats",
|
||||||
|
"overallProgress": "Overall queue progress",
|
||||||
|
"totalSize": "Total queue size",
|
||||||
|
"clients": "{count, plural, one {# client} other {# clients}}"
|
||||||
|
},
|
||||||
|
"disconnected": "(disconnected)"
|
||||||
},
|
},
|
||||||
"mediaReleases": {
|
"mediaReleases": {
|
||||||
"name": "Media releases",
|
"name": "Media releases",
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "Usar iconos para pings"
|
"label": "Usar iconos para pings"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "Motor de búsqueda predeterminado"
|
"label": "Motor de búsqueda predeterminado"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "Clave API (Credencial)",
|
"label": "Clave API (Credencial)",
|
||||||
"newLabel": "Nueva clave API (Credencial)"
|
"newLabel": "Nueva clave API (Credencial)"
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "ID de aplicación",
|
"label": "ID de aplicación",
|
||||||
"newLabel": "Nuevo ID de aplicación"
|
"newLabel": "Nuevo ID de aplicación"
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "Formato de fecha personalizado",
|
"label": "Formato de fecha personalizado",
|
||||||
"description": "Usar ISO 8601 para dar formato a la hora (esto anulará otras opciones)"
|
"description": "Usar ISO 8601 para dar formato a la hora (esto anulará otras opciones)"
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Borrar formato",
|
"clear": "Borrar formato",
|
||||||
"heading": "Encabezado {level}",
|
"heading": "Encabezado {level}",
|
||||||
"align": "Alinear texto: {position}",
|
"align": "Alinear texto: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Cita",
|
"blockquote": "Cita",
|
||||||
"horizontalLine": "Línea horizontal",
|
"horizontalLine": "Línea horizontal",
|
||||||
"bulletList": "Lista sin ordenar",
|
"bulletList": "Lista sin ordenar",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "Amanecer",
|
"sunrise": "Amanecer",
|
||||||
"sunset": "Atardecer",
|
"sunset": "Atardecer",
|
||||||
"maxWindSpeed": "Velocidad máxima del viento: {maxWindSpeed} {unit}",
|
"maxWindSpeed": "Velocidad máxima del viento: {maxWindSpeed} {unit}",
|
||||||
"maxWindGusts": "Máximas ráfagas de viento: {maxWindGusts} {unit}"
|
"maxWindGusts": "Máximas ráfagas de viento: {maxWindGusts} {unit}",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Despejado",
|
"clear": "Despejado",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "Usuario",
|
"user": "Usuario",
|
||||||
"name": "Nombre",
|
"name": "Nombre",
|
||||||
"id": "ID",
|
"id": "ID",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "Estadísticas",
|
"title": "Estadísticas",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "Estadísticas del servidor Immich",
|
"name": "Estadísticas del servidor Immich",
|
||||||
"description": "Información del servidor Immich",
|
"description": "Información del servidor Immich",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "Álbum de Immich",
|
"name": "Álbum de Immich",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "ID de álbum",
|
"label": "ID de álbum",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "Presentación de fotos de un álbum de Immich",
|
"description": "Presentación de fotos de un álbum de Immich",
|
||||||
"noAlbumSelected": "No se ha seleccionado ningún álbum. Edita el widget y selecciona uno.",
|
|
||||||
"noPhotos": "No hay fotos en este álbum"
|
"noPhotos": "No hay fotos en este álbum"
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Abrir enlaces en una pestaña nueva"
|
"label": "Abrir enlaces en una pestaña nueva"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "Fuentes RSS",
|
"name": "Fuentes RSS",
|
||||||
"description": "Monitorear y mostrar una o más RSS genéricas, ATOM o JSON",
|
"description": "Monitorear y mostrar una o más RSS genéricas, ATOM o JSON",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "Notificaciones",
|
"name": "Notificaciones",
|
||||||
"description": "Mostrar el historial de notificaciones desde una integración",
|
"description": "Mostrar el historial de notificaciones desde una integración",
|
||||||
"noItems": "Ninguna notificación para mostrar.",
|
"noItems": "Ninguna notificación para mostrar.",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "Speedtest Tracker",
|
"name": "Speedtest Tracker",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "Contenedores",
|
"title": "Contenedores",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "Actualizado {when}",
|
"updated": "Actualizado {when}",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "Buscar {count} contenedores",
|
"search": "Buscar {count} contenedores",
|
||||||
"selected": "{selectCount} de {totalCount} contenedores seleccionados",
|
"selected": "{selectCount} de {totalCount} contenedores seleccionados",
|
||||||
"footer": "{count} contenedores en total",
|
"footer": "{count} contenedores en total",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "",
|
"clear": "",
|
||||||
"heading": "",
|
"heading": "",
|
||||||
"align": "",
|
"align": "",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "",
|
"blockquote": "",
|
||||||
"horizontalLine": "",
|
"horizontalLine": "",
|
||||||
"bulletList": "",
|
"bulletList": "",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "",
|
"sunrise": "",
|
||||||
"sunset": "",
|
"sunset": "",
|
||||||
"maxWindSpeed": "",
|
"maxWindSpeed": "",
|
||||||
"maxWindGusts": ""
|
"maxWindGusts": "",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "",
|
"clear": "",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "",
|
"user": "",
|
||||||
"name": "",
|
"name": "",
|
||||||
"id": "",
|
"id": "",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "",
|
"name": "",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "",
|
||||||
"noAlbumSelected": "",
|
|
||||||
"noPhotos": ""
|
"noPhotos": ""
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"noItems": "",
|
"noItems": "",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "",
|
"name": "",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "",
|
"updated": "",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "",
|
"search": "",
|
||||||
"selected": "",
|
"selected": "",
|
||||||
"footer": "",
|
"footer": "",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "Käytä ping-kuvakkeita"
|
"label": "Käytä ping-kuvakkeita"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "Oletushakukone"
|
"label": "Oletushakukone"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "Sovellustunniste",
|
"label": "Sovellustunniste",
|
||||||
"newLabel": "Uusi sovellustunniste"
|
"newLabel": "Uusi sovellustunniste"
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "Oma päiväyksen esitystapa",
|
"label": "Oma päiväyksen esitystapa",
|
||||||
"description": "Määritä ISO 8601 -standardin mukainen päiväyksen muoto (korvaa muut valinnat)."
|
"description": "Määritä ISO 8601 -standardin mukainen päiväyksen muoto (korvaa muut valinnat)."
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "",
|
"clear": "",
|
||||||
"heading": "",
|
"heading": "",
|
||||||
"align": "",
|
"align": "",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "",
|
"blockquote": "",
|
||||||
"horizontalLine": "",
|
"horizontalLine": "",
|
||||||
"bulletList": "",
|
"bulletList": "",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "Auringonnousu",
|
"sunrise": "Auringonnousu",
|
||||||
"sunset": "Auringonlasku",
|
"sunset": "Auringonlasku",
|
||||||
"maxWindSpeed": "Tuulen nopeus: {maxWindSpeed} {unit}",
|
"maxWindSpeed": "Tuulen nopeus: {maxWindSpeed} {unit}",
|
||||||
"maxWindGusts": "Puuskien nopeus: {maxWindSpeed} {unit}"
|
"maxWindGusts": "Puuskien nopeus: {maxWindSpeed} {unit}",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "",
|
"clear": "",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "",
|
"user": "",
|
||||||
"name": "",
|
"name": "",
|
||||||
"id": "",
|
"id": "",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "",
|
"name": "",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "",
|
||||||
"noAlbumSelected": "",
|
|
||||||
"noPhotos": ""
|
"noPhotos": ""
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Avaa linkit uudessa välilehdessä"
|
"label": "Avaa linkit uudessa välilehdessä"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "Näytä integraation ilmoitushistoria",
|
"description": "Näytä integraation ilmoitushistoria",
|
||||||
"noItems": "",
|
"noItems": "",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "",
|
"name": "",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "Kontit",
|
"title": "Kontit",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "Päivitetty {when}",
|
"updated": "Päivitetty {when}",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "Suodata {count} konttia...",
|
"search": "Suodata {count} konttia...",
|
||||||
"selected": "{selectCount}/{totalCount} kontista valittu",
|
"selected": "{selectCount}/{totalCount} kontista valittu",
|
||||||
"footer": "Yhteensä {count} konttia",
|
"footer": "Yhteensä {count} konttia",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": "Avaa täysi asetussivu"
|
"label": "Avaa täysi asetussivu"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "Utiliser les icônes pour les pings"
|
"label": "Utiliser les icônes pour les pings"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "Moteur de recherche par défaut"
|
"label": "Moteur de recherche par défaut"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "Clé API (secrète)",
|
"label": "Clé API (secrète)",
|
||||||
"newLabel": "Nouvelle clé API (secrète)"
|
"newLabel": "Nouvelle clé API (secrète)"
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "Identifiant de l'application",
|
"label": "Identifiant de l'application",
|
||||||
"newLabel": "Nouvel Id de l'Application"
|
"newLabel": "Nouvel Id de l'Application"
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "Actualiser",
|
"refresh": "Actualiser",
|
||||||
"options": "Options",
|
"options": "Options",
|
||||||
"actions": "Actions"
|
"actions": "Actions"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "Format de date personnalisé",
|
"label": "Format de date personnalisé",
|
||||||
"description": "Utiliser ISO 8601 pour formater la date (cela remplacera les autres options)"
|
"description": "Utiliser ISO 8601 pour formater la date (cela remplacera les autres options)"
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Effacer la mise en forme",
|
"clear": "Effacer la mise en forme",
|
||||||
"heading": "Titre {level}",
|
"heading": "Titre {level}",
|
||||||
"align": "Aligner le texte : {position}",
|
"align": "Aligner le texte : {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Citation",
|
"blockquote": "Citation",
|
||||||
"horizontalLine": "Ligne horizontale",
|
"horizontalLine": "Ligne horizontale",
|
||||||
"bulletList": "Liste à puces",
|
"bulletList": "Liste à puces",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "Lever du Soleil",
|
"sunrise": "Lever du Soleil",
|
||||||
"sunset": "Coucher du soleil",
|
"sunset": "Coucher du soleil",
|
||||||
"maxWindSpeed": "Vitesse maximale du vent : {maxWindSpeed} km/h",
|
"maxWindSpeed": "Vitesse maximale du vent : {maxWindSpeed} km/h",
|
||||||
"maxWindGusts": "Rafales de vent maximales : {maxWindGusts} km/h"
|
"maxWindGusts": "Rafales de vent maximales : {maxWindGusts} km/h",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Clair",
|
"clear": "Clair",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "Utilisateur",
|
"user": "Utilisateur",
|
||||||
"name": "Nom",
|
"name": "Nom",
|
||||||
"id": "Id",
|
"id": "Id",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "Statistiques détaillées",
|
"title": "Statistiques détaillées",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "Statistiques du serveur Immich",
|
"name": "Statistiques du serveur Immich",
|
||||||
"description": "Informations sur votre instance Immich",
|
"description": "Informations sur votre instance Immich",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "Album Immich",
|
"name": "Album Immich",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "Identifiant de l'album",
|
"label": "Identifiant de l'album",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "Diaporama de photos dans votre album Immich",
|
"description": "Diaporama de photos dans votre album Immich",
|
||||||
"noAlbumSelected": "Aucun album sélectionné, modifier le widget et choisissez un album",
|
|
||||||
"noPhotos": "Aucune photo dans cet album"
|
"noPhotos": "Aucune photo dans cet album"
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Ouvrir les liens dans un nouvel onglet"
|
"label": "Ouvrir les liens dans un nouvel onglet"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "Flux RSS",
|
"name": "Flux RSS",
|
||||||
"description": "Surveiller et afficher un ou plusieurs flux RSS, ATOM ou JSON génériques",
|
"description": "Surveiller et afficher un ou plusieurs flux RSS, ATOM ou JSON génériques",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "Notifications",
|
"name": "Notifications",
|
||||||
"description": "Afficher l'historique des notifications à partir d'une intégration",
|
"description": "Afficher l'historique des notifications à partir d'une intégration",
|
||||||
"noItems": "Aucune notification à afficher.",
|
"noItems": "Aucune notification à afficher.",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "Suivi de test de vitesse",
|
"name": "Suivi de test de vitesse",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": "Impossible de récupérer les données de disponibilité"
|
"internalServerError": "Impossible de récupérer les données de disponibilité"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "Statistiques audio",
|
"name": "Statistiques audio",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "Conteneurs",
|
"title": "Conteneurs",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "Mis à jour {when}",
|
"updated": "Mis à jour {when}",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "Rechercher dans {count} conteneurs",
|
"search": "Rechercher dans {count} conteneurs",
|
||||||
"selected": "{selectCount} sur {totalCount} conteneurs sélectionnés",
|
"selected": "{selectCount} sur {totalCount} conteneurs sélectionnés",
|
||||||
"footer": "Total des conteneurs {count}",
|
"footer": "Total des conteneurs {count}",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "השתמש בסמלים עבור פינגים"
|
"label": "השתמש בסמלים עבור פינגים"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "מנוע חיפוש ברירת מחדל"
|
"label": "מנוע חיפוש ברירת מחדל"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "מפתח API (סודי)",
|
"label": "מפתח API (סודי)",
|
||||||
"newLabel": "מפתח API חדש (סודי)"
|
"newLabel": "מפתח API חדש (סודי)"
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "מזהה אפליקציה",
|
"label": "מזהה אפליקציה",
|
||||||
"newLabel": "מזהה אפליקציה חדש"
|
"newLabel": "מזהה אפליקציה חדש"
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "פורמט זמן מותאם אישית",
|
"label": "פורמט זמן מותאם אישית",
|
||||||
"description": "השתמש ב-ISO 8601 כדי לעצב תצוגת זמן (זה ידרוס אפשרויות אחרות)"
|
"description": "השתמש ב-ISO 8601 כדי לעצב תצוגת זמן (זה ידרוס אפשרויות אחרות)"
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "נקה עיצוב",
|
"clear": "נקה עיצוב",
|
||||||
"heading": "כותרת {level}",
|
"heading": "כותרת {level}",
|
||||||
"align": "יישור טקסט: {position}",
|
"align": "יישור טקסט: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "ציטוט",
|
"blockquote": "ציטוט",
|
||||||
"horizontalLine": "קו אופקי",
|
"horizontalLine": "קו אופקי",
|
||||||
"bulletList": "רשימת תבליט",
|
"bulletList": "רשימת תבליט",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "זריחה",
|
"sunrise": "זריחה",
|
||||||
"sunset": "שקיעה",
|
"sunset": "שקיעה",
|
||||||
"maxWindSpeed": "מהירות רוח מקסימלית: {maxWindSpeed} קמ״ש",
|
"maxWindSpeed": "מהירות רוח מקסימלית: {maxWindSpeed} קמ״ש",
|
||||||
"maxWindGusts": "משבי רוח מקסימלים: {maxWindGusts} קמ״ש"
|
"maxWindGusts": "משבי רוח מקסימלים: {maxWindGusts} קמ״ש",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "בהיר",
|
"clear": "בהיר",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "משתמש",
|
"user": "משתמש",
|
||||||
"name": "שם",
|
"name": "שם",
|
||||||
"id": "מזהה",
|
"id": "מזהה",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "סטטיסטיקות לחנונים",
|
"title": "סטטיסטיקות לחנונים",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "",
|
"name": "",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "",
|
||||||
"noAlbumSelected": "",
|
|
||||||
"noPhotos": ""
|
"noPhotos": ""
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "פתח לינק בלשונית חדשה"
|
"label": "פתח לינק בלשונית חדשה"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "הזנות RSS",
|
"name": "הזנות RSS",
|
||||||
"description": "מעקב והצג עדכוני RSS, ATOM או JSON גנרי אחד או יותר",
|
"description": "מעקב והצג עדכוני RSS, ATOM או JSON גנרי אחד או יותר",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "התראות",
|
"name": "התראות",
|
||||||
"description": "הצגת היסטוריית התראות מאינטגרציה",
|
"description": "הצגת היסטוריית התראות מאינטגרציה",
|
||||||
"noItems": "אין התראות להצגה.",
|
"noItems": "אין התראות להצגה.",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "",
|
"name": "",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "מיכלים",
|
"title": "מיכלים",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "עודכן ב- {when}",
|
"updated": "עודכן ב- {when}",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "חפש {count} קונטיינרים",
|
"search": "חפש {count} קונטיינרים",
|
||||||
"selected": "{selectCount} מ- {totalCount} קונטיינרים נבחרו",
|
"selected": "{selectCount} מ- {totalCount} קונטיינרים נבחרו",
|
||||||
"footer": "סה״כ {count} קונטיינרים",
|
"footer": "סה״כ {count} קונטיינרים",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "",
|
"clear": "",
|
||||||
"heading": "",
|
"heading": "",
|
||||||
"align": "",
|
"align": "",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "",
|
"blockquote": "",
|
||||||
"horizontalLine": "",
|
"horizontalLine": "",
|
||||||
"bulletList": "",
|
"bulletList": "",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "",
|
"sunrise": "",
|
||||||
"sunset": "",
|
"sunset": "",
|
||||||
"maxWindSpeed": "",
|
"maxWindSpeed": "",
|
||||||
"maxWindGusts": ""
|
"maxWindGusts": "",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Vedro",
|
"clear": "Vedro",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "",
|
"user": "",
|
||||||
"name": "",
|
"name": "",
|
||||||
"id": "",
|
"id": "",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "",
|
"name": "",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "",
|
||||||
"noAlbumSelected": "",
|
|
||||||
"noPhotos": ""
|
"noPhotos": ""
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Otvori veze u novoj kartici"
|
"label": "Otvori veze u novoj kartici"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"noItems": "",
|
"noItems": "",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "",
|
"name": "",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "",
|
"updated": "",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "",
|
"search": "",
|
||||||
"selected": "",
|
"selected": "",
|
||||||
"footer": "",
|
"footer": "",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "Ikonok használata a pingekhez"
|
"label": "Ikonok használata a pingekhez"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "Alapértelmezett kereső"
|
"label": "Alapértelmezett kereső"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "Api Kulcs (Titkos)",
|
"label": "Api Kulcs (Titkos)",
|
||||||
"newLabel": "Új API Kulcs (Titkos)"
|
"newLabel": "Új API Kulcs (Titkos)"
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "App Azonosító",
|
"label": "App Azonosító",
|
||||||
"newLabel": "Új App Azonosító"
|
"newLabel": "Új App Azonosító"
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "Egyedi dátumformátum",
|
"label": "Egyedi dátumformátum",
|
||||||
"description": "A dátum formázásához használja az ISO 8601 szabványt (ez felülírja az egyéb beállításokat)"
|
"description": "A dátum formázásához használja az ISO 8601 szabványt (ez felülírja az egyéb beállításokat)"
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Formázás törlése",
|
"clear": "Formázás törlése",
|
||||||
"heading": "Címsor {level}",
|
"heading": "Címsor {level}",
|
||||||
"align": "Szöveg igazítása: {position}",
|
"align": "Szöveg igazítása: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Idézet",
|
"blockquote": "Idézet",
|
||||||
"horizontalLine": "Vízszintes vonal",
|
"horizontalLine": "Vízszintes vonal",
|
||||||
"bulletList": "Lista",
|
"bulletList": "Lista",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "Napkelte",
|
"sunrise": "Napkelte",
|
||||||
"sunset": "Naplemente",
|
"sunset": "Naplemente",
|
||||||
"maxWindSpeed": "Legnagyobb szélsebesség: {maxWindSpeed} {unit}",
|
"maxWindSpeed": "Legnagyobb szélsebesség: {maxWindSpeed} {unit}",
|
||||||
"maxWindGusts": "Legerősebb széllökés: {maxWindGusts} {unit}"
|
"maxWindGusts": "Legerősebb széllökés: {maxWindGusts} {unit}",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Tiszta",
|
"clear": "Tiszta",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "Felhasználó",
|
"user": "Felhasználó",
|
||||||
"name": "Név",
|
"name": "Név",
|
||||||
"id": "Azonosító",
|
"id": "Azonosító",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "Statisztikák a rajongóknak",
|
"title": "Statisztikák a rajongóknak",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "Immich szerver statisztikák",
|
"name": "Immich szerver statisztikák",
|
||||||
"description": "Információk az Immich-példányodról",
|
"description": "Információk az Immich-példányodról",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "Immich Album",
|
"name": "Immich Album",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "Album ID",
|
"label": "Album ID",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "Képek diavetítése az Immich-albumodból",
|
"description": "Képek diavetítése az Immich-albumodból",
|
||||||
"noAlbumSelected": "Nincs kiválasztott album; szerkeszd a widgetet, és válassz ki egy albumot",
|
|
||||||
"noPhotos": "Ebben az albumban nincs fénykép"
|
"noPhotos": "Ebben az albumban nincs fénykép"
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Linkek megnyitása új fülön"
|
"label": "Linkek megnyitása új fülön"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "RSS feedek",
|
"name": "RSS feedek",
|
||||||
"description": "Egy vagy több általános RSS-, ATOM- vagy JSON-hírcsatorna figyelése és megjelenítése",
|
"description": "Egy vagy több általános RSS-, ATOM- vagy JSON-hírcsatorna figyelése és megjelenítése",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "Értesítések",
|
"name": "Értesítések",
|
||||||
"description": "Egy integráció értesítési előzményeinek megjelenítése",
|
"description": "Egy integráció értesítési előzményeinek megjelenítése",
|
||||||
"noItems": "Nincs megjelenítendő üzenet.",
|
"noItems": "Nincs megjelenítendő üzenet.",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "Hálózatsebesség Monitorozó",
|
"name": "Hálózatsebesség Monitorozó",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "Tartály",
|
"title": "Tartály",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "",
|
"updated": "",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "",
|
"search": "",
|
||||||
"selected": "",
|
"selected": "",
|
||||||
"footer": "",
|
"footer": "",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "Usa le icone per i ping"
|
"label": "Usa le icone per i ping"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "Abilita clic destro sui widget",
|
||||||
|
"description": "Mostra il menu contestuale di Homarr quando si fa clic destro su un widget. Disabilita per usare il menu predefinito del browser (es. \"Apri collegamento in una nuova scheda\")."
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "Motore di ricerca predefinito"
|
"label": "Motore di ricerca predefinito"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "Chiave API (Secret)",
|
"label": "Chiave API (Secret)",
|
||||||
"newLabel": "Nuova Chiave API (Secret)"
|
"newLabel": "Nuova Chiave API (Secret)"
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "Chiave API",
|
||||||
|
"newLabel": "Nuova chiave API"
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "Secret API",
|
||||||
|
"newLabel": "Nuova API Secret"
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "Id App",
|
"label": "Id App",
|
||||||
"newLabel": "Nuovo Id App"
|
"newLabel": "Nuovo Id App"
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "Traefik",
|
||||||
|
"description": "Cloud-native reverse proxy e bilanciatore del carico"
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "Paperless-ngx",
|
"name": "Paperless-ngx",
|
||||||
"description": "Sistema di gestione documentale per archiviare e organizzare documenti scansionati"
|
"description": "Sistema di gestione documentale per archiviare e organizzare documenti scansionati"
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "PatchMon",
|
||||||
|
"description": "Gestione delle patch e monitoraggio per gli host Linux"
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "Bazarr",
|
||||||
|
"description": "Applicazione complementare a Sonarr e Radarr che gestisce e scarica i sottotitoli"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "Aggiorna",
|
"refresh": "Aggiorna",
|
||||||
"options": "Opzioni",
|
"options": "Opzioni",
|
||||||
"actions": "Azioni"
|
"actions": "Azioni"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "OK",
|
||||||
|
"error": "Errore",
|
||||||
|
"loading": "Caricamento",
|
||||||
|
"idle": "Inattivo"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "Formato data personalizzato",
|
"label": "Formato data personalizzato",
|
||||||
"description": "Usa ISO 8601 per formattare la data (questo sovrascriverà altre opzioni)"
|
"description": "Usa ISO 8601 per formattare la data (questo sovrascriverà altre opzioni)"
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Rimuovi formattazione",
|
"clear": "Rimuovi formattazione",
|
||||||
"heading": "Intestazione {level}",
|
"heading": "Intestazione {level}",
|
||||||
"align": "Allinea testo: {position}",
|
"align": "Allinea testo: {position}",
|
||||||
|
"directionLtr": "Imposta la direzione del testo da sinistra a sinistra",
|
||||||
|
"directionRtl": "Imposta la direzione del testo da destra a destra",
|
||||||
"blockquote": "Citazione",
|
"blockquote": "Citazione",
|
||||||
"horizontalLine": "Linea orizzontale",
|
"horizontalLine": "Linea orizzontale",
|
||||||
"bulletList": "Elenco puntato",
|
"bulletList": "Elenco puntato",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "Alba",
|
"sunrise": "Alba",
|
||||||
"sunset": "Tramonto",
|
"sunset": "Tramonto",
|
||||||
"maxWindSpeed": "Max velocità vento: {maxWindSpeed} km/h",
|
"maxWindSpeed": "Max velocità vento: {maxWindSpeed} km/h",
|
||||||
"maxWindGusts": "Max raffiche di vento: {maxWindGusts} km/h"
|
"maxWindGusts": "Max raffiche di vento: {maxWindGusts} km/h",
|
||||||
|
"humidity": "Umidità: {humidity}%"
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Sereno",
|
"clear": "Sereno",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "Utente",
|
"user": "Utente",
|
||||||
"name": "Nome",
|
"name": "Nome",
|
||||||
"id": "Id",
|
"id": "Id",
|
||||||
|
"status": "Stato",
|
||||||
|
"directPlay": "Riproduzione diretta",
|
||||||
|
"transcoding": "Transcodifica",
|
||||||
|
"paused": "In pausa",
|
||||||
|
"remaining": "{minutes} min rimanenti",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "Statistiche per nerd",
|
"title": "Statistiche per nerd",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": "Impossibile recuperare i dati di Paperless-ngx"
|
"internalServerError": "Impossibile recuperare i dati di Paperless-ngx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "PatchMon",
|
||||||
|
"description": "Panoramica dello stato delle patch host da PatchMon",
|
||||||
|
"title": "Statistiche PatchMon",
|
||||||
|
"totalHosts": "Host Totali",
|
||||||
|
"hostsNeedingUpdates": "Necessita di aggiornamenti",
|
||||||
|
"securityUpdates": "Aggiornamenti di sicurezza",
|
||||||
|
"upToDateHosts": "Host aggiornati",
|
||||||
|
"hostsWithSecurityUpdates": "Host con aggiornamenti di sicurezza",
|
||||||
|
"recentUpdates24h": "Aggiornamenti (24h)",
|
||||||
|
"totalOutdatedPackages": "Pacchetti obsoleti",
|
||||||
|
"totalRepos": "Repository",
|
||||||
|
"osDistribution": "Distribuzione OS",
|
||||||
|
"compliance": "Conformità Patch",
|
||||||
|
"complianceRatio": "{upToDate} / {total}",
|
||||||
|
"lastUpdated": "Aggiornato {time}",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "Mostra host totali",
|
||||||
|
"description": "Visualizzare il numero totale di host monitorati"
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "Mostra host che necessitano di aggiornamenti",
|
||||||
|
"description": "Visualizza gli host con almeno un pacchetto obsoleto"
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "Mostra aggiornamenti di sicurezza",
|
||||||
|
"description": "Mostra il numero totale di aggiornamenti di sicurezza disponibili"
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "Mostra host aggiornati",
|
||||||
|
"description": "Visualizza host con zero pacchetti obsoleti"
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "Mostra host con aggiornamenti di sicurezza",
|
||||||
|
"description": "Visualizza host che richiedono patch di sicurezza"
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "Mostra aggiornamenti recenti (24h)",
|
||||||
|
"description": "Mostra il numero di aggiornamenti applicati nelle ultime 24 ore"
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "Mostra pacchetti obsoleti",
|
||||||
|
"description": "Mostra il numero totale di pacchetti obsoleti su tutti gli host"
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "Mostra repository",
|
||||||
|
"description": "Mostra il numero di repository attivi che vengono controllati"
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "Abilita colori di soglia",
|
||||||
|
"description": "Valori della statistica di colore verde, giallo, o rosso in base alle preimpostazioni di gravità"
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "Soglie avanzate",
|
||||||
|
"description": "Personalizza gli avvisi e le soglie critiche per stat utilizzando conteggi assoluti o percentuali del totale degli host"
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "Conteggio assoluto",
|
||||||
|
"percent": "Percentuale degli host totali"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "Modalità soglia aggiornamenti richiesti",
|
||||||
|
"description": "Confronta il numero di aggiornamenti richiesti come valore assoluto o percentuale su host totali"
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "Soglia di avviso aggiornamenti richiesti",
|
||||||
|
"description": "Inserisci il giallo quando il valore raggiunge questa soglia"
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "Soglia critica aggiornamenti richiesti",
|
||||||
|
"description": "Inserisci il rosso quando il valore raggiunge questa soglia"
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "Modalità soglia aggiornamenti di sicurezza",
|
||||||
|
"description": "Confronta il valore degli aggiornamenti di sicurezza come valore assoluto o percentuale del totale degli host"
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "Soglia di avviso aggiornamenti di sicurezza",
|
||||||
|
"description": "Inserisci il giallo quando il valore raggiunge questa soglia"
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "Soglia critica aggiornamenti di sicurezza",
|
||||||
|
"description": "Inserisci il rosso quando il valore raggiunge questa soglia"
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "Modalità soglia host con aggiornamenti di sicurezza",
|
||||||
|
"description": "Confronta il numero di host come valore assoluto o percentuale su host totali"
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "Soglia di avviso host con aggiornamenti di sicurezza",
|
||||||
|
"description": "Inserisci il giallo quando il valore raggiunge questa soglia"
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "Soglia critica host con aggiornamenti di sicurezza",
|
||||||
|
"description": "Inserisci il rosso quando il valore raggiunge questa soglia"
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "Modalità soglia host aggiornati",
|
||||||
|
"description": "Confronta il numero di host aggiornati come valore assoluto o percentuale su host totali"
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "Soglia di avviso host aggiornati",
|
||||||
|
"description": "Inserisci il giallo quando il valore è pari o superiore a questa soglia ma al di sotto della copertura completa"
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "Soglia critica host aggiornati",
|
||||||
|
"description": "Inserisci rosso quando il valore scende al di sotto di questa soglia"
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "Modalità soglia pacchetti obsoleti",
|
||||||
|
"description": "Confronta il numero di pacchetti obsoleti come valore assoluto o percentuale sui host totali"
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "Soglia di avviso pacchetti obsoleti",
|
||||||
|
"description": "Inserisci il giallo quando il valore raggiunge questa soglia"
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "Soglia critica pacchetti obsoleti",
|
||||||
|
"description": "Inserisci il rosso quando il valore raggiunge questa soglia"
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "Mostra distribuzione OS",
|
||||||
|
"description": "Mostra un dettaglio degli host monitorati per sistema operativo"
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "Limite distribuzione OS",
|
||||||
|
"description": "Numero massimo di sistemi operativi da visualizzare",
|
||||||
|
"option": {
|
||||||
|
"3": "Top 3",
|
||||||
|
"5": "Top 5",
|
||||||
|
"10": "Top 10",
|
||||||
|
"all": "Tutto"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "Mostra versione OS",
|
||||||
|
"description": "Aggiungi la versione del sistema operativo a ogni etichetta di distribuzione quando disponibile"
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "Mostra sezione principale conformità",
|
||||||
|
"description": "Mostra un anello di conformità con la percentuale di host aggiornati"
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "Modalità di visualizzazione OS",
|
||||||
|
"description": "Scegli come visualizzare la distribuzione del sistema operativo",
|
||||||
|
"option": {
|
||||||
|
"bars": "Barre orizzontali",
|
||||||
|
"donut": "Grafico a ciambella"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": "Impossibile recuperare i dati di PatchMon"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "Bazarr",
|
||||||
|
"description": "Panoramica dei sottotitoli mancanti e dello stato di salute della tua istanza Bazarr",
|
||||||
|
"episodes": "Episodi Mancanti",
|
||||||
|
"movies": "Film Mancanti",
|
||||||
|
"providers": "Problemi del Provider",
|
||||||
|
"status": "Problemi di stato",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "Mostra episodi mancanti",
|
||||||
|
"description": "Mostra il numero di episodi con sottotitoli mancanti"
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "Mostra film mancanti",
|
||||||
|
"description": "Mostra il numero di film con sottotitoli mancanti"
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "Mostra problemi del provider",
|
||||||
|
"description": "Mostra i provider di sottotitoli con problemi"
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "Mostra problemi di stato",
|
||||||
|
"description": "Mostra il numero di problemi di stato di Bazarr"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": "Impossibile recuperare i dati Bazarr"
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "Statistiche Server Immich",
|
"name": "Statistiche Server Immich",
|
||||||
"description": "Informazioni sulla tua istanza Immich",
|
"description": "Informazioni sulla tua istanza Immich",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "Album Immich",
|
"name": "Album Immich",
|
||||||
|
"allPhotos": "Tutte le foto",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "ID Album",
|
"label": "ID Album",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "Presentazione delle immagini nel tuo album Immich",
|
"description": "Presentazione delle immagini nel tuo album Immich",
|
||||||
"noAlbumSelected": "Nessun album selezionato, modifica il widget e scegli un album",
|
|
||||||
"noPhotos": "Nessuna foto in questo album"
|
"noPhotos": "Nessuna foto in questo album"
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Apri i link in nuova scheda"
|
"label": "Apri i link in nuova scheda"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": "Stati da mostrare"
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": "Mostra solo le richieste recenti"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "Contenuti multimediali mancanti & in coda",
|
||||||
|
"description": "Mostra i film e gli episodi mancanti e in coda da Radarr e Sonarr",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": "Mostra elementi mancanti"
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": "Mostra elementi in coda"
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": "Elementi per pagina"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "Mancanti",
|
||||||
|
"queued": "In coda"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "Film",
|
||||||
|
"episode": "Episodio"
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "Nessun elemento mancante",
|
||||||
|
"queued": "Nessun elemento in coda",
|
||||||
|
"noTabsEnabled": "Abilita almeno una scheda nelle impostazioni del widget"
|
||||||
|
},
|
||||||
|
"timeLeft": "Tempo residuo"
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "Feed RSS",
|
"name": "Feed RSS",
|
||||||
"description": "Monitora e visualizza uno o più feed generici RSS, ATOM o JSON",
|
"description": "Monitora e visualizza uno o più feed generici RSS, ATOM o JSON",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "Notifiche",
|
"name": "Notifiche",
|
||||||
"description": "Visualizza la cronologia delle notifiche da un'integrazione",
|
"description": "Visualizza la cronologia delle notifiche da un'integrazione",
|
||||||
"noItems": "Nessuna notifica da visualizzare.",
|
"noItems": "Nessuna notifica da visualizzare.",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": "Nascondi loghi"
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "SpeedTest Tracker",
|
"name": "SpeedTest Tracker",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": "Impossibile recuperare i dati di uptime"
|
"internalServerError": "Impossibile recuperare i dati di uptime"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "Traefik",
|
||||||
|
"description": "Panoramica dei router, dei servizi, dei middleware e dei punti di ingresso di Traefik",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": "Mostrare TCP"
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": "Mostra UDP"
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": "Mostra punti di accesso"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "Istanze di Traefik",
|
||||||
|
"versionUnknown": "Versione sconosciuta",
|
||||||
|
"summary": {
|
||||||
|
"routers": "Routers",
|
||||||
|
"entryPoints": "Punti di accesso"
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "Routers",
|
||||||
|
"services": "Servizi",
|
||||||
|
"middlewares": "Middleware"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "Normale funzionamento",
|
||||||
|
"errors": "{count} errori",
|
||||||
|
"warnings": "{count} avvisi"
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": "Recupero dei dati Traefik non riuscito"
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "Statistiche audio",
|
"name": "Statistiche audio",
|
||||||
"description": "Statistiche della libreria e di riproduzione da Navidrome o Audiobookshelf",
|
"description": "Statistiche della libreria e di riproduzione da Navidrome o Audiobookshelf",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "Lettura",
|
"read": "Lettura",
|
||||||
"write": "Scrittura"
|
"write": "Scrittura"
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "Spazio di archiviazione",
|
||||||
|
"subtitle": "Utilizzo del disco per filesystem",
|
||||||
|
"series": "Usato"
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "Larghezza di Banda",
|
"title": "Larghezza di Banda",
|
||||||
"subtitle": "Traffico di rete delle interfacce pubbliche",
|
"subtitle": "Traffico di rete delle interfacce pubbliche",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "Containers",
|
"title": "Containers",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "Aggiornato {when}",
|
"updated": "Aggiornato {when}",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": "Ultimo aggiornamento {when}"
|
||||||
|
},
|
||||||
"search": "Cerca {count} container",
|
"search": "Cerca {count} container",
|
||||||
"selected": "{selectCount} di {totalCount} containers selezionati",
|
"selected": "{selectCount} di {totalCount} containers selezionati",
|
||||||
"footer": "Totale container {count}",
|
"footer": "Totale container {count}",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "Abilita clic destro sui widget",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": "Abilita clic destro sui widget"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": "Apri la pagina completa delle preferenze"
|
"label": "Apri la pagina completa delle preferenze"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "Pingにアイコンを使う"
|
"label": "Pingにアイコンを使う"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "既定の検索エンジン"
|
"label": "既定の検索エンジン"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "API キー (シークレット)",
|
"label": "API キー (シークレット)",
|
||||||
"newLabel": "新しい API キー (シークレット)"
|
"newLabel": "新しい API キー (シークレット)"
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "App Id",
|
"label": "App Id",
|
||||||
"newLabel": "新規App Id"
|
"newLabel": "新規App Id"
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "日付の書式をカスタマイズ",
|
"label": "日付の書式をカスタマイズ",
|
||||||
"description": "日付の書式に ISO-8601を使用します(これは他のオプションを上書きします)"
|
"description": "日付の書式に ISO-8601を使用します(これは他のオプションを上書きします)"
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "書式をクリア",
|
"clear": "書式をクリア",
|
||||||
"heading": "見出し {level}",
|
"heading": "見出し {level}",
|
||||||
"align": "テキストの整列: {position}",
|
"align": "テキストの整列: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "引用",
|
"blockquote": "引用",
|
||||||
"horizontalLine": "水平線",
|
"horizontalLine": "水平線",
|
||||||
"bulletList": "箇条書きリスト",
|
"bulletList": "箇条書きリスト",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "日出",
|
"sunrise": "日出",
|
||||||
"sunset": "日没",
|
"sunset": "日没",
|
||||||
"maxWindSpeed": "最大風速: {maxWindSpeed} {unit}",
|
"maxWindSpeed": "最大風速: {maxWindSpeed} {unit}",
|
||||||
"maxWindGusts": "最大瞬間風速: {maxWindGusts} {unit}"
|
"maxWindGusts": "最大瞬間風速: {maxWindGusts} {unit}",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "晴れ",
|
"clear": "晴れ",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "ユーザー",
|
"user": "ユーザー",
|
||||||
"name": "名称",
|
"name": "名称",
|
||||||
"id": "Id",
|
"id": "Id",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "詳細統計情報",
|
"title": "詳細統計情報",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "Immich サーバーの統計",
|
"name": "Immich サーバーの統計",
|
||||||
"description": "Immich インスタンスに関する情報",
|
"description": "Immich インスタンスに関する情報",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "Immich アルバム",
|
"name": "Immich アルバム",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "アルバム ID",
|
"label": "アルバム ID",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "Immichアルバムの写真のスライド",
|
"description": "Immichアルバムの写真のスライド",
|
||||||
"noAlbumSelected": "アルバムが選択されていない、ウィジェットを編集してアルバムを選択してください",
|
|
||||||
"noPhotos": "このアルバムには写真がありません"
|
"noPhotos": "このアルバムには写真がありません"
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "リンクを新しいタブで開く"
|
"label": "リンクを新しいタブで開く"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "RSS フィード",
|
"name": "RSS フィード",
|
||||||
"description": "1つまたは複数の一般的な RSS、ATOM、または JSON フィードを監視して表示します",
|
"description": "1つまたは複数の一般的な RSS、ATOM、または JSON フィードを監視して表示します",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "通知",
|
"name": "通知",
|
||||||
"description": "連携機能からの通知履歴を表示する",
|
"description": "連携機能からの通知履歴を表示する",
|
||||||
"noItems": "表示する通知はありません。",
|
"noItems": "表示する通知はありません。",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "スピードテストトラッカー",
|
"name": "スピードテストトラッカー",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "コンテナ",
|
"title": "コンテナ",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "{when} に更新しました",
|
"updated": "{when} に更新しました",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "{count} 個のコンテナを検索",
|
"search": "{count} 個のコンテナを検索",
|
||||||
"selected": "{totalCount} 個のうち、{selectCount} 個のコンテナが選択されています",
|
"selected": "{totalCount} 個のうち、{selectCount} 個のコンテナが選択されています",
|
||||||
"footer": "合計 {count} 個のコンテナ",
|
"footer": "合計 {count} 個のコンテナ",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large.
Load diff
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Išvalyti formatavimą",
|
"clear": "Išvalyti formatavimą",
|
||||||
"heading": "Antraštė {level}",
|
"heading": "Antraštė {level}",
|
||||||
"align": "Teksto lygiavimas: {position}",
|
"align": "Teksto lygiavimas: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Kabutės",
|
"blockquote": "Kabutės",
|
||||||
"horizontalLine": "Horizontali linija",
|
"horizontalLine": "Horizontali linija",
|
||||||
"bulletList": "Suženklintasis sąrašas",
|
"bulletList": "Suženklintasis sąrašas",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "",
|
"sunrise": "",
|
||||||
"sunset": "",
|
"sunset": "",
|
||||||
"maxWindSpeed": "",
|
"maxWindSpeed": "",
|
||||||
"maxWindGusts": ""
|
"maxWindGusts": "",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "",
|
"clear": "",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "",
|
"user": "",
|
||||||
"name": "",
|
"name": "",
|
||||||
"id": "",
|
"id": "",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "",
|
"name": "",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "",
|
||||||
"noAlbumSelected": "",
|
|
||||||
"noPhotos": ""
|
"noPhotos": ""
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Atidaryti naujame skirtuke"
|
"label": "Atidaryti naujame skirtuke"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"noItems": "",
|
"noItems": "",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "",
|
"name": "",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "",
|
"updated": "",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "",
|
"search": "",
|
||||||
"selected": "",
|
"selected": "",
|
||||||
"footer": "",
|
"footer": "",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Notīrīt formatējumu",
|
"clear": "Notīrīt formatējumu",
|
||||||
"heading": "Virsraksts {level}",
|
"heading": "Virsraksts {level}",
|
||||||
"align": "Teksta līdzināšana: {position}",
|
"align": "Teksta līdzināšana: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Citāts",
|
"blockquote": "Citāts",
|
||||||
"horizontalLine": "Horizontāla līnija",
|
"horizontalLine": "Horizontāla līnija",
|
||||||
"bulletList": "Aizzīmju saraksts",
|
"bulletList": "Aizzīmju saraksts",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "",
|
"sunrise": "",
|
||||||
"sunset": "",
|
"sunset": "",
|
||||||
"maxWindSpeed": "",
|
"maxWindSpeed": "",
|
||||||
"maxWindGusts": ""
|
"maxWindGusts": "",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Skaidrs",
|
"clear": "Skaidrs",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "",
|
"user": "",
|
||||||
"name": "",
|
"name": "",
|
||||||
"id": "",
|
"id": "",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "",
|
"name": "",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "",
|
||||||
"noAlbumSelected": "",
|
|
||||||
"noPhotos": ""
|
"noPhotos": ""
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Atvērt saites jaunā cilnē"
|
"label": "Atvērt saites jaunā cilnē"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"noItems": "",
|
"noItems": "",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "",
|
"name": "",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "",
|
"updated": "",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "",
|
"search": "",
|
||||||
"selected": "",
|
"selected": "",
|
||||||
"footer": "",
|
"footer": "",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "Gebruik iconen voor pings"
|
"label": "Gebruik iconen voor pings"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "Standaard zoekmachine"
|
"label": "Standaard zoekmachine"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "API-sleutel (geheim)",
|
"label": "API-sleutel (geheim)",
|
||||||
"newLabel": "Nieuwe API-sleutel (geheim)"
|
"newLabel": "Nieuwe API-sleutel (geheim)"
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "App ID",
|
"label": "App ID",
|
||||||
"newLabel": "Nieuwe App ID"
|
"newLabel": "Nieuwe App ID"
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "Aangepast datumformaat",
|
"label": "Aangepast datumformaat",
|
||||||
"description": "Gebruik ISO 8601 om datum op te maken (dit overschrijft andere opties)"
|
"description": "Gebruik ISO 8601 om datum op te maken (dit overschrijft andere opties)"
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Opmaak wissen",
|
"clear": "Opmaak wissen",
|
||||||
"heading": "Koptekst {level}",
|
"heading": "Koptekst {level}",
|
||||||
"align": "Tekst uitlijnen: {position}",
|
"align": "Tekst uitlijnen: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Blokquote",
|
"blockquote": "Blokquote",
|
||||||
"horizontalLine": "Horizontale lijn",
|
"horizontalLine": "Horizontale lijn",
|
||||||
"bulletList": "Opsommingslijst",
|
"bulletList": "Opsommingslijst",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "Zonsopgang",
|
"sunrise": "Zonsopgang",
|
||||||
"sunset": "Zonsondergang",
|
"sunset": "Zonsondergang",
|
||||||
"maxWindSpeed": "Max. windsnelheid: {maxWindSpeed} {unit}",
|
"maxWindSpeed": "Max. windsnelheid: {maxWindSpeed} {unit}",
|
||||||
"maxWindGusts": "Max. windstoten: {maxWindGusts} {unit}"
|
"maxWindGusts": "Max. windstoten: {maxWindGusts} {unit}",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Wissen",
|
"clear": "Wissen",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "Gebruiker",
|
"user": "Gebruiker",
|
||||||
"name": "Naam",
|
"name": "Naam",
|
||||||
"id": "Id",
|
"id": "Id",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "Statistieken voor nerds",
|
"title": "Statistieken voor nerds",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "",
|
"name": "",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "",
|
||||||
"noAlbumSelected": "",
|
|
||||||
"noPhotos": ""
|
"noPhotos": ""
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Links in nieuw tabblad openen"
|
"label": "Links in nieuw tabblad openen"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "RSS-feeds",
|
"name": "RSS-feeds",
|
||||||
"description": "Eén of meer algemene RSS-, ATOM- of JSON-feeds monitoren en weergeven",
|
"description": "Eén of meer algemene RSS-, ATOM- of JSON-feeds monitoren en weergeven",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "Meldingen",
|
"name": "Meldingen",
|
||||||
"description": "",
|
"description": "",
|
||||||
"noItems": "Geen meldingen om weer te geven.",
|
"noItems": "Geen meldingen om weer te geven.",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "",
|
"name": "",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "Containers",
|
"title": "Containers",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "{when} bijgewerkt",
|
"updated": "{when} bijgewerkt",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "{count} containers zoeken",
|
"search": "{count} containers zoeken",
|
||||||
"selected": "{selectCount} van {totalCount} containers geselecteerd",
|
"selected": "{selectCount} van {totalCount} containers geselecteerd",
|
||||||
"footer": "Totaal {count} containers",
|
"footer": "Totaal {count} containers",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "Bruk ikoner for pinger"
|
"label": "Bruk ikoner for pinger"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "Standard søkemotor"
|
"label": "Standard søkemotor"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "API Nøkkel (Hemliglet)",
|
"label": "API Nøkkel (Hemliglet)",
|
||||||
"newLabel": "Ny API Key (Secret)"
|
"newLabel": "Ny API Key (Secret)"
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "App Id",
|
"label": "App Id",
|
||||||
"newLabel": "Ny App Id"
|
"newLabel": "Ny App Id"
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "Egendefinert dato format",
|
"label": "Egendefinert dato format",
|
||||||
"description": "Bruk ISO 8601 til å formatere datoen (dette vil overstyre andre alternativer)"
|
"description": "Bruk ISO 8601 til å formatere datoen (dette vil overstyre andre alternativer)"
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Fjern formatering",
|
"clear": "Fjern formatering",
|
||||||
"heading": "Overskrift {level}",
|
"heading": "Overskrift {level}",
|
||||||
"align": "Juster tekst: {position}",
|
"align": "Juster tekst: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Blokksitat",
|
"blockquote": "Blokksitat",
|
||||||
"horizontalLine": "Horisontal linje",
|
"horizontalLine": "Horisontal linje",
|
||||||
"bulletList": "Punktliste",
|
"bulletList": "Punktliste",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "Soloppgang",
|
"sunrise": "Soloppgang",
|
||||||
"sunset": "Solnedgang",
|
"sunset": "Solnedgang",
|
||||||
"maxWindSpeed": "Maks vindhastighet: {maxWindSpeed} {unit}",
|
"maxWindSpeed": "Maks vindhastighet: {maxWindSpeed} {unit}",
|
||||||
"maxWindGusts": "Maks vindkast: {maxWindGusts} {unit}"
|
"maxWindGusts": "Maks vindkast: {maxWindGusts} {unit}",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Tøm",
|
"clear": "Tøm",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "Bruker",
|
"user": "Bruker",
|
||||||
"name": "Navn",
|
"name": "Navn",
|
||||||
"id": "Id",
|
"id": "Id",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "Statistikk for nerder",
|
"title": "Statistikk for nerder",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "Immich-serverstatistikk",
|
"name": "Immich-serverstatistikk",
|
||||||
"description": "Informasjon om din Immich-instans",
|
"description": "Informasjon om din Immich-instans",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "Immich Album",
|
"name": "Immich Album",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "Album ID",
|
"label": "Album ID",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "Lysbildefremvisning av bilder i ditt Immich-album",
|
"description": "Lysbildefremvisning av bilder i ditt Immich-album",
|
||||||
"noAlbumSelected": "Ingen album valgt, rediger widgeten og velg et album",
|
|
||||||
"noPhotos": "Ingen bilder i dette albumet"
|
"noPhotos": "Ingen bilder i dette albumet"
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Åpne lenker i ny fane"
|
"label": "Åpne lenker i ny fane"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "RSS feed",
|
"name": "RSS feed",
|
||||||
"description": "Overvåk og vis en eller flere generiske RSS, ATOM eller JSON-feeder",
|
"description": "Overvåk og vis en eller flere generiske RSS, ATOM eller JSON-feeder",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "Varsler",
|
"name": "Varsler",
|
||||||
"description": "Vis varselhistorikk fra en integrasjon",
|
"description": "Vis varselhistorikk fra en integrasjon",
|
||||||
"noItems": "Ingen varsler å vise.",
|
"noItems": "Ingen varsler å vise.",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "Speedtest tracker",
|
"name": "Speedtest tracker",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "Containere",
|
"title": "Containere",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "Oppdatert {when}",
|
"updated": "Oppdatert {when}",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "Søk {count} containere",
|
"search": "Søk {count} containere",
|
||||||
"selected": "{selectCount} av {totalCount} containere valgt",
|
"selected": "{selectCount} av {totalCount} containere valgt",
|
||||||
"footer": "Totalt {count} containere",
|
"footer": "Totalt {count} containere",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "Użyj ikon dla pingów"
|
"label": "Użyj ikon dla pingów"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "Domyślna wyszukiwarka"
|
"label": "Domyślna wyszukiwarka"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "Klucz API (Secret)",
|
"label": "Klucz API (Secret)",
|
||||||
"newLabel": "Nowy klucz API (Secret)"
|
"newLabel": "Nowy klucz API (Secret)"
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "Identyfikator aplikacji",
|
"label": "Identyfikator aplikacji",
|
||||||
"newLabel": "Nowy identyfikator aplikacji"
|
"newLabel": "Nowy identyfikator aplikacji"
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "Paperless-ngx",
|
"name": "Paperless-ngx",
|
||||||
"description": "System zarządzania dokumentami do archiwizacji i organizacji zeskanowaych dokumnteów"
|
"description": "System zarządzania dokumentami do archiwizacji i organizacji zeskanowaych dokumnteów"
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "Odśwież",
|
"refresh": "Odśwież",
|
||||||
"options": "Opcje",
|
"options": "Opcje",
|
||||||
"actions": "Akcje"
|
"actions": "Akcje"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "Niestandardowy format daty",
|
"label": "Niestandardowy format daty",
|
||||||
"description": "Użyj ISO 8601 do formatu daty (spowoduje to nadpisanie innych opcji)"
|
"description": "Użyj ISO 8601 do formatu daty (spowoduje to nadpisanie innych opcji)"
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Wyczyść formatowanie",
|
"clear": "Wyczyść formatowanie",
|
||||||
"heading": "Nagłówek {level}",
|
"heading": "Nagłówek {level}",
|
||||||
"align": "Wyrównanie tekstu: {position}",
|
"align": "Wyrównanie tekstu: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Cytat",
|
"blockquote": "Cytat",
|
||||||
"horizontalLine": "Linia pozioma",
|
"horizontalLine": "Linia pozioma",
|
||||||
"bulletList": "Lista punktowana",
|
"bulletList": "Lista punktowana",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "Wschód słońca",
|
"sunrise": "Wschód słońca",
|
||||||
"sunset": "Zachód słońca",
|
"sunset": "Zachód słońca",
|
||||||
"maxWindSpeed": "Maksymalna prędkość wiatru: {maxWindSpeed} km/h",
|
"maxWindSpeed": "Maksymalna prędkość wiatru: {maxWindSpeed} km/h",
|
||||||
"maxWindGusts": "Maksymalne porywy wiatru: {maxWindGusts} km/h"
|
"maxWindGusts": "Maksymalne porywy wiatru: {maxWindGusts} km/h",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Bezchmurnie",
|
"clear": "Bezchmurnie",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "Użytkownik",
|
"user": "Użytkownik",
|
||||||
"name": "Nazwa",
|
"name": "Nazwa",
|
||||||
"id": "ID",
|
"id": "ID",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "Statystyki dla nerdów",
|
"title": "Statystyki dla nerdów",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": "Nie udało się pobrać danych Paperless-ngx"
|
"internalServerError": "Nie udało się pobrać danych Paperless-ngx"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "Statystyki serwera Immich",
|
"name": "Statystyki serwera Immich",
|
||||||
"description": "Informacje o Twojej instancji Immich",
|
"description": "Informacje o Twojej instancji Immich",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "Album Immich",
|
"name": "Album Immich",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "ID albumu",
|
"label": "ID albumu",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "Pokaz slajdów zdjęć z Twojego albumu w Immich",
|
"description": "Pokaz slajdów zdjęć z Twojego albumu w Immich",
|
||||||
"noAlbumSelected": "Nie wybrano albumu. Edytuj widget i wybierz album",
|
|
||||||
"noPhotos": "Brak zdjęć w tym albumie"
|
"noPhotos": "Brak zdjęć w tym albumie"
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Otwieraj linki w nowej karcie"
|
"label": "Otwieraj linki w nowej karcie"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "Kanały RSS",
|
"name": "Kanały RSS",
|
||||||
"description": "Monitoruj i wyświetlaj jeden lub więcej ogólnych kanałów RSS, ATOM lub JSON",
|
"description": "Monitoruj i wyświetlaj jeden lub więcej ogólnych kanałów RSS, ATOM lub JSON",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "Powiadomienia",
|
"name": "Powiadomienia",
|
||||||
"description": "Wyświetl historię powiadomień z integracji",
|
"description": "Wyświetl historię powiadomień z integracji",
|
||||||
"noItems": "Brak powiadomień do wyświetlenia.",
|
"noItems": "Brak powiadomień do wyświetlenia.",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "Speedtest Tracker",
|
"name": "Speedtest Tracker",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": "Nie udało się pobrać danych czasu pracy"
|
"internalServerError": "Nie udało się pobrać danych czasu pracy"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "Audio stats",
|
"name": "Audio stats",
|
||||||
"description": "Statystyki biblioteki i odtwarzania z Navidrome lub Audiobookshelf",
|
"description": "Statystyki biblioteki i odtwarzania z Navidrome lub Audiobookshelf",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "Odczyt",
|
"read": "Odczyt",
|
||||||
"write": "Zapis"
|
"write": "Zapis"
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "Przepustowość",
|
"title": "Przepustowość",
|
||||||
"subtitle": "Ruch sieciowy interfejsów publicznych",
|
"subtitle": "Ruch sieciowy interfejsów publicznych",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "Kontenery",
|
"title": "Kontenery",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "Zaktualizowano {when}",
|
"updated": "Zaktualizowano {when}",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "Szukaj wśród {count} kontenerów",
|
"search": "Szukaj wśród {count} kontenerów",
|
||||||
"selected": "Wybrano {selectCount} z {totalCount} kontenerów",
|
"selected": "Wybrano {selectCount} z {totalCount} kontenerów",
|
||||||
"footer": "Łącznie {count} kontenerów",
|
"footer": "Łącznie {count} kontenerów",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": "Otwórz pełną stronę preferencji"
|
"label": "Otwórz pełną stronę preferencji"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "Usar ícone para pings"
|
"label": "Usar ícone para pings"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "Mecanismo de pesquisa padrão"
|
"label": "Mecanismo de pesquisa padrão"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "Chave de API (Key)",
|
"label": "Chave de API (Key)",
|
||||||
"newLabel": "Nova Chave de API (Key)"
|
"newLabel": "Nova Chave de API (Key)"
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "ID do Aplicativo",
|
"label": "ID do Aplicativo",
|
||||||
"newLabel": "Novo ID de Aplicativo"
|
"newLabel": "Novo ID de Aplicativo"
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "Sistema de gerenciamento de documentos para arquivamento e organização de documentos digitalizados"
|
"description": "Sistema de gerenciamento de documentos para arquivamento e organização de documentos digitalizados"
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "Formato de data personalizado",
|
"label": "Formato de data personalizado",
|
||||||
"description": "Usar ISO 8601 para formatar datas (Isso sobrescreverá outras opções)"
|
"description": "Usar ISO 8601 para formatar datas (Isso sobrescreverá outras opções)"
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Limpar formatação",
|
"clear": "Limpar formatação",
|
||||||
"heading": "Cabeçalho {level}",
|
"heading": "Cabeçalho {level}",
|
||||||
"align": "Alinhar texto: {position}",
|
"align": "Alinhar texto: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Bloco de Citação",
|
"blockquote": "Bloco de Citação",
|
||||||
"horizontalLine": "Linha horizontal",
|
"horizontalLine": "Linha horizontal",
|
||||||
"bulletList": "Lista de marcadores",
|
"bulletList": "Lista de marcadores",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "Nascer do sol",
|
"sunrise": "Nascer do sol",
|
||||||
"sunset": "Pôr do sol",
|
"sunset": "Pôr do sol",
|
||||||
"maxWindSpeed": "Velocidade máxima do vento: {maxWindSpeed} {unit}",
|
"maxWindSpeed": "Velocidade máxima do vento: {maxWindSpeed} {unit}",
|
||||||
"maxWindGusts": "Rajadas máximas de vento: {maxWindGusts} {unit}"
|
"maxWindGusts": "Rajadas máximas de vento: {maxWindGusts} {unit}",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Limpar",
|
"clear": "Limpar",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "Usuário",
|
"user": "Usuário",
|
||||||
"name": "Nome",
|
"name": "Nome",
|
||||||
"id": "Id",
|
"id": "Id",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "Estatísticas para nerds",
|
"title": "Estatísticas para nerds",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "Estatísticas do Servidor Immich",
|
"name": "Estatísticas do Servidor Immich",
|
||||||
"description": "Informações sobre sua instância do Immich",
|
"description": "Informações sobre sua instância do Immich",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "Álbum do Immich",
|
"name": "Álbum do Immich",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "ID do Álbum",
|
"label": "ID do Álbum",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "Apresentação de imagens em seu álbum Imich",
|
"description": "Apresentação de imagens em seu álbum Imich",
|
||||||
"noAlbumSelected": "Nenhum álbum selecionado, edite o widget e escolha um álbum",
|
|
||||||
"noPhotos": "Nenhuma foto neste álbum"
|
"noPhotos": "Nenhuma foto neste álbum"
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Abrir links em uma nova guia"
|
"label": "Abrir links em uma nova guia"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "Feeds RSS",
|
"name": "Feeds RSS",
|
||||||
"description": "Monitora e exibe um ou mais feeds RSS, ATOM ou JSON genéricos",
|
"description": "Monitora e exibe um ou mais feeds RSS, ATOM ou JSON genéricos",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "Notificações",
|
"name": "Notificações",
|
||||||
"description": "Exibe histórico de notificações de uma integração",
|
"description": "Exibe histórico de notificações de uma integração",
|
||||||
"noItems": "Nenhuma notificação para exibir.",
|
"noItems": "Nenhuma notificação para exibir.",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "Speedtest Tracker",
|
"name": "Speedtest Tracker",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "Contêineres",
|
"title": "Contêineres",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "Atualizado em {when}",
|
"updated": "Atualizado em {when}",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "Buscar {count} contêineres",
|
"search": "Buscar {count} contêineres",
|
||||||
"selected": "{selectCount} de {totalCount} contêineres selecionados",
|
"selected": "{selectCount} de {totalCount} contêineres selecionados",
|
||||||
"footer": "Total de contêineres: {count}",
|
"footer": "Total de contêineres: {count}",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "",
|
"clear": "",
|
||||||
"heading": "",
|
"heading": "",
|
||||||
"align": "",
|
"align": "",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "",
|
"blockquote": "",
|
||||||
"horizontalLine": "",
|
"horizontalLine": "",
|
||||||
"bulletList": "",
|
"bulletList": "",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "",
|
"sunrise": "",
|
||||||
"sunset": "",
|
"sunset": "",
|
||||||
"maxWindSpeed": "",
|
"maxWindSpeed": "",
|
||||||
"maxWindGusts": ""
|
"maxWindGusts": "",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "",
|
"clear": "",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "",
|
"user": "",
|
||||||
"name": "",
|
"name": "",
|
||||||
"id": "",
|
"id": "",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "",
|
"name": "",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "",
|
||||||
"noAlbumSelected": "",
|
|
||||||
"noPhotos": ""
|
"noPhotos": ""
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": ""
|
"label": ""
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"noItems": "",
|
"noItems": "",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "",
|
"name": "",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "",
|
"updated": "",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "",
|
"search": "",
|
||||||
"selected": "",
|
"selected": "",
|
||||||
"footer": "",
|
"footer": "",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Curăță formatul",
|
"clear": "Curăță formatul",
|
||||||
"heading": "Rubrica {level}",
|
"heading": "Rubrica {level}",
|
||||||
"align": "Așezați textul: {position}",
|
"align": "Așezați textul: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Citat",
|
"blockquote": "Citat",
|
||||||
"horizontalLine": "Linie orizontală",
|
"horizontalLine": "Linie orizontală",
|
||||||
"bulletList": "Listă cu puncte",
|
"bulletList": "Listă cu puncte",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "",
|
"sunrise": "",
|
||||||
"sunset": "",
|
"sunset": "",
|
||||||
"maxWindSpeed": "",
|
"maxWindSpeed": "",
|
||||||
"maxWindGusts": ""
|
"maxWindGusts": "",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Senin",
|
"clear": "Senin",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "",
|
"user": "",
|
||||||
"name": "",
|
"name": "",
|
||||||
"id": "",
|
"id": "",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "",
|
"name": "",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "",
|
||||||
"noAlbumSelected": "",
|
|
||||||
"noPhotos": ""
|
"noPhotos": ""
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Deschide link-ul într-o pagină nouă"
|
"label": "Deschide link-ul într-o pagină nouă"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"noItems": "",
|
"noItems": "",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "",
|
"name": "",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "Containere",
|
"title": "Containere",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "",
|
"updated": "",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "",
|
"search": "",
|
||||||
"selected": "",
|
"selected": "",
|
||||||
"footer": "",
|
"footer": "",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "Использовать индикаторы доступности"
|
"label": "Использовать индикаторы доступности"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "Поисковая система по умолчанию"
|
"label": "Поисковая система по умолчанию"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "API-ключ (Secret)",
|
"label": "API-ключ (Secret)",
|
||||||
"newLabel": "Новый API-ключ (Secret)"
|
"newLabel": "Новый API-ключ (Secret)"
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "App Id",
|
"label": "App Id",
|
||||||
"newLabel": "Новый App Id"
|
"newLabel": "Новый App Id"
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "Пользовательский формат даты",
|
"label": "Пользовательский формат даты",
|
||||||
"description": "Используйте формат ISO 8601 для отображения даты (это переопределит другие настройки)"
|
"description": "Используйте формат ISO 8601 для отображения даты (это переопределит другие настройки)"
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Очистить форматирование",
|
"clear": "Очистить форматирование",
|
||||||
"heading": "Заголовок {level}",
|
"heading": "Заголовок {level}",
|
||||||
"align": "Выравнивание текста: {position}",
|
"align": "Выравнивание текста: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Цитата",
|
"blockquote": "Цитата",
|
||||||
"horizontalLine": "Горизонтальная линия",
|
"horizontalLine": "Горизонтальная линия",
|
||||||
"bulletList": "Маркированный список",
|
"bulletList": "Маркированный список",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "Восход",
|
"sunrise": "Восход",
|
||||||
"sunset": "Закат",
|
"sunset": "Закат",
|
||||||
"maxWindSpeed": "Макс. скорость ветра: {maxWindSpeed} {unit}",
|
"maxWindSpeed": "Макс. скорость ветра: {maxWindSpeed} {unit}",
|
||||||
"maxWindGusts": "Макс. порывы ветра: {maxWindGusts} {unit}"
|
"maxWindGusts": "Макс. порывы ветра: {maxWindGusts} {unit}",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Ясно",
|
"clear": "Ясно",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "Пользователь",
|
"user": "Пользователь",
|
||||||
"name": "Название",
|
"name": "Название",
|
||||||
"id": "Id",
|
"id": "Id",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "Техническая информация",
|
"title": "Техническая информация",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "Статистика сервера Immich",
|
"name": "Статистика сервера Immich",
|
||||||
"description": "Информация о вашем экземпляре Immich",
|
"description": "Информация о вашем экземпляре Immich",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "Альбом Immich",
|
"name": "Альбом Immich",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "ID альбома",
|
"label": "ID альбома",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "Слайд-шоу фотографий из вашего альбома Immich",
|
"description": "Слайд-шоу фотографий из вашего альбома Immich",
|
||||||
"noAlbumSelected": "Альбом не выбран — отредактируйте виджет и выберите альбом",
|
|
||||||
"noPhotos": "В этом альбоме нет фотографий"
|
"noPhotos": "В этом альбоме нет фотографий"
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Открывать ссылки в новой вкладке"
|
"label": "Открывать ссылки в новой вкладке"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "RSS-ленты",
|
"name": "RSS-ленты",
|
||||||
"description": "Отслеживание и отображение одной или нескольких RSS, ATOM или JSON-лент",
|
"description": "Отслеживание и отображение одной или нескольких RSS, ATOM или JSON-лент",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "Уведомления",
|
"name": "Уведомления",
|
||||||
"description": "Отображает историю уведомлений из интеграции",
|
"description": "Отображает историю уведомлений из интеграции",
|
||||||
"noItems": "Нет уведомлений для отображения.",
|
"noItems": "Нет уведомлений для отображения.",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "",
|
"name": "",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "Контейнеры",
|
"title": "Контейнеры",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "Обновлено {when}",
|
"updated": "Обновлено {when}",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "Поиск среди {count} контейнеров",
|
"search": "Поиск среди {count} контейнеров",
|
||||||
"selected": "Выбрано {selectCount} из {totalCount} контейнеров",
|
"selected": "Выбрано {selectCount} из {totalCount} контейнеров",
|
||||||
"footer": "Всего {count} контейнеров",
|
"footer": "Всего {count} контейнеров",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "Používanie ikon pre pingy"
|
"label": "Používanie ikon pre pingy"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "Predvolený vyhľadávací nástroj"
|
"label": "Predvolený vyhľadávací nástroj"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "Vlastný formát času",
|
"label": "Vlastný formát času",
|
||||||
"description": "Na formátovanie času použite ISO 8601 (toto prepíše ostatné možnosti)"
|
"description": "Na formátovanie času použite ISO 8601 (toto prepíše ostatné možnosti)"
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Vyčistiť formátovanie",
|
"clear": "Vyčistiť formátovanie",
|
||||||
"heading": "Nadpis {level}",
|
"heading": "Nadpis {level}",
|
||||||
"align": "Zarovnanie textu: {position}",
|
"align": "Zarovnanie textu: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Citát",
|
"blockquote": "Citát",
|
||||||
"horizontalLine": "Horizontálna čiara",
|
"horizontalLine": "Horizontálna čiara",
|
||||||
"bulletList": "Zoznam odrážok",
|
"bulletList": "Zoznam odrážok",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "Východ slnka",
|
"sunrise": "Východ slnka",
|
||||||
"sunset": "Západ slnka",
|
"sunset": "Západ slnka",
|
||||||
"maxWindSpeed": "Maximálna rýchlosť vetra: {maxWindSpeed} km/h",
|
"maxWindSpeed": "Maximálna rýchlosť vetra: {maxWindSpeed} km/h",
|
||||||
"maxWindGusts": "Maximálne nárazy vetra: {maxWindGusts} km/h"
|
"maxWindGusts": "Maximálne nárazy vetra: {maxWindGusts} km/h",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Jasno",
|
"clear": "Jasno",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "Používateľ",
|
"user": "Používateľ",
|
||||||
"name": "Názov",
|
"name": "Názov",
|
||||||
"id": "Id",
|
"id": "Id",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "",
|
"name": "",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "",
|
||||||
"noAlbumSelected": "",
|
|
||||||
"noPhotos": ""
|
"noPhotos": ""
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Otvorenie odkazov v novej karte"
|
"label": "Otvorenie odkazov v novej karte"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "RSS kanály",
|
"name": "RSS kanály",
|
||||||
"description": "Monitorujte a zobrazujte jeden alebo viac všeobecných informačných kanálov RSS, ATOM alebo JSON",
|
"description": "Monitorujte a zobrazujte jeden alebo viac všeobecných informačných kanálov RSS, ATOM alebo JSON",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"noItems": "",
|
"noItems": "",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "",
|
"name": "",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "Kontajnery",
|
"title": "Kontajnery",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "Aktualizované {when}",
|
"updated": "Aktualizované {when}",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "Vyhľadajte {count} kontajnery",
|
"search": "Vyhľadajte {count} kontajnery",
|
||||||
"selected": "{selectCount} z {totalCount} vybratých kontajnerov",
|
"selected": "{selectCount} z {totalCount} vybratých kontajnerov",
|
||||||
"footer": "Celkový počet kontajnerov: {count}",
|
"footer": "Celkový počet kontajnerov: {count}",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Jasno oblikovanje",
|
"clear": "Jasno oblikovanje",
|
||||||
"heading": "Naslov {level}",
|
"heading": "Naslov {level}",
|
||||||
"align": "Poravnava besedila: {position}",
|
"align": "Poravnava besedila: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Blokovni citat",
|
"blockquote": "Blokovni citat",
|
||||||
"horizontalLine": "Vodoravna črta",
|
"horizontalLine": "Vodoravna črta",
|
||||||
"bulletList": "Seznam kroglic",
|
"bulletList": "Seznam kroglic",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "",
|
"sunrise": "",
|
||||||
"sunset": "",
|
"sunset": "",
|
||||||
"maxWindSpeed": "",
|
"maxWindSpeed": "",
|
||||||
"maxWindGusts": ""
|
"maxWindGusts": "",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Počisti",
|
"clear": "Počisti",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "",
|
"user": "",
|
||||||
"name": "",
|
"name": "",
|
||||||
"id": "",
|
"id": "",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "",
|
"name": "",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "",
|
||||||
"noAlbumSelected": "",
|
|
||||||
"noPhotos": ""
|
"noPhotos": ""
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Odprite povezave v novem zavihku"
|
"label": "Odprite povezave v novem zavihku"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"noItems": "",
|
"noItems": "",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "",
|
"name": "",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "",
|
"updated": "",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "",
|
"search": "",
|
||||||
"selected": "",
|
"selected": "",
|
||||||
"footer": "",
|
"footer": "",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "Använd ikoner för \"onlinekontroll\" (pings)"
|
"label": "Använd ikoner för \"onlinekontroll\" (pings)"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "Förvald sökmotor"
|
"label": "Förvald sökmotor"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Rensa formatering",
|
"clear": "Rensa formatering",
|
||||||
"heading": "Rubrik {level}",
|
"heading": "Rubrik {level}",
|
||||||
"align": "Justera text: {position}",
|
"align": "Justera text: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Blockcitat",
|
"blockquote": "Blockcitat",
|
||||||
"horizontalLine": "Horisontell linje",
|
"horizontalLine": "Horisontell linje",
|
||||||
"bulletList": "Punktlista",
|
"bulletList": "Punktlista",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "",
|
"sunrise": "",
|
||||||
"sunset": "",
|
"sunset": "",
|
||||||
"maxWindSpeed": "",
|
"maxWindSpeed": "",
|
||||||
"maxWindGusts": ""
|
"maxWindGusts": "",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Klart",
|
"clear": "Klart",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "",
|
"user": "",
|
||||||
"name": "",
|
"name": "",
|
||||||
"id": "",
|
"id": "",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "",
|
"name": "",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "",
|
||||||
"noAlbumSelected": "",
|
|
||||||
"noPhotos": ""
|
"noPhotos": ""
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Öppna länkar i ny flik"
|
"label": "Öppna länkar i ny flik"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"noItems": "",
|
"noItems": "",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "",
|
"name": "",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "Uppdaterad {when}",
|
"updated": "Uppdaterad {when}",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "",
|
"search": "",
|
||||||
"selected": "",
|
"selected": "",
|
||||||
"footer": "",
|
"footer": "",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "Pingler İçin Simge Kullanın"
|
"label": "Pingler İçin Simge Kullanın"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "Öntanımlı arama motoru"
|
"label": "Öntanımlı arama motoru"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "API Anahtarı (Gizli Anahtar)",
|
"label": "API Anahtarı (Gizli Anahtar)",
|
||||||
"newLabel": "Yeni API Anahtarı (Gizli Anahtar)"
|
"newLabel": "Yeni API Anahtarı (Gizli Anahtar)"
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "Uygulama Kimliği",
|
"label": "Uygulama Kimliği",
|
||||||
"newLabel": "Yeni Uygulama Kimliği"
|
"newLabel": "Yeni Uygulama Kimliği"
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "Özel tarih biçimi",
|
"label": "Özel tarih biçimi",
|
||||||
"description": "Tarih biçimini değiştirmek için ISO 8601 standardını kullanın (bu diğer seçenekleri geçersiz kılacaktır)"
|
"description": "Tarih biçimini değiştirmek için ISO 8601 standardını kullanın (bu diğer seçenekleri geçersiz kılacaktır)"
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Biçimlendirmeyi temizle",
|
"clear": "Biçimlendirmeyi temizle",
|
||||||
"heading": "Başlık {level}",
|
"heading": "Başlık {level}",
|
||||||
"align": "Metin hizalama: {position}",
|
"align": "Metin hizalama: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Blok alıntı",
|
"blockquote": "Blok alıntı",
|
||||||
"horizontalLine": "Yatay çizgi",
|
"horizontalLine": "Yatay çizgi",
|
||||||
"bulletList": "Maddeli liste",
|
"bulletList": "Maddeli liste",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "Gün Doğumu",
|
"sunrise": "Gün Doğumu",
|
||||||
"sunset": "Gün Batımı",
|
"sunset": "Gün Batımı",
|
||||||
"maxWindSpeed": "Maks. Rüzgar Hızı: {maxWindSpeed} km/s",
|
"maxWindSpeed": "Maks. Rüzgar Hızı: {maxWindSpeed} km/s",
|
||||||
"maxWindGusts": "Maks. Rüzgar Hamlesi: {maxWindGusts} km/s"
|
"maxWindGusts": "Maks. Rüzgar Hamlesi: {maxWindGusts} km/s",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Açık",
|
"clear": "Açık",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "Kullanıcı",
|
"user": "Kullanıcı",
|
||||||
"name": "İsim",
|
"name": "İsim",
|
||||||
"id": "Kimlik",
|
"id": "Kimlik",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "Meraklısı için istatistikler",
|
"title": "Meraklısı için istatistikler",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "Immich Server Stats",
|
"name": "Immich Server Stats",
|
||||||
"description": "Information about your Immich instance",
|
"description": "Information about your Immich instance",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "Immich Album",
|
"name": "Immich Album",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "Album ID",
|
"label": "Album ID",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "Slideshow of pictures in your Immich album",
|
"description": "Slideshow of pictures in your Immich album",
|
||||||
"noAlbumSelected": "No album selected, edit widget and choose an album",
|
|
||||||
"noPhotos": "No photos in this album"
|
"noPhotos": "No photos in this album"
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Bağlantıları yeni sekmede aç"
|
"label": "Bağlantıları yeni sekmede aç"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "RSS Beslemeleri",
|
"name": "RSS Beslemeleri",
|
||||||
"description": "Bir veya daha fazla RSS, ATOM veya JSON beslemesini takip edin ve görüntüleyin",
|
"description": "Bir veya daha fazla RSS, ATOM veya JSON beslemesini takip edin ve görüntüleyin",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "Bildirimler",
|
"name": "Bildirimler",
|
||||||
"description": "Entegrasyonların bildirim geçmişini görüntüle",
|
"description": "Entegrasyonların bildirim geçmişini görüntüle",
|
||||||
"noItems": "Görüntülenecek bildirim yok.",
|
"noItems": "Görüntülenecek bildirim yok.",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "Speedtest Tracker",
|
"name": "Speedtest Tracker",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "Konteynerler",
|
"title": "Konteynerler",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "{when} Güncellendi",
|
"updated": "{when} Güncellendi",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "{count} konteyner içinde ara",
|
"search": "{count} konteyner içinde ara",
|
||||||
"selected": "{selectCount} / {totalCount} konteyner seçildi",
|
"selected": "{selectCount} / {totalCount} konteyner seçildi",
|
||||||
"footer": "Toplam {count} konteyner",
|
"footer": "Toplam {count} konteyner",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "Використовувати значки для ping"
|
"label": "Використовувати значки для ping"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": "Показувати контекстне меню Homarr при клацанні правою кнопкою миші на віджеті. Вимкніть, щоб використовувати меню браузера за замовчуванням (наприклад, «Відкрити посилання в новій вкладці»)."
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "Стандартна система пошуку"
|
"label": "Стандартна система пошуку"
|
||||||
},
|
},
|
||||||
@@ -862,7 +866,7 @@
|
|||||||
"created": "",
|
"created": "",
|
||||||
"updated": "",
|
"updated": "",
|
||||||
"deleted": "",
|
"deleted": "",
|
||||||
"imported": "",
|
"imported": "Віджет успішно імпортовано.",
|
||||||
"aiPromptCopied": "",
|
"aiPromptCopied": "",
|
||||||
"aiPromptDescription": "",
|
"aiPromptDescription": "",
|
||||||
"aiPromptCopy": "",
|
"aiPromptCopy": "",
|
||||||
@@ -877,7 +881,7 @@
|
|||||||
"toggleError": "Не вдалося змінити стан віджету.",
|
"toggleError": "Не вдалося змінити стан віджету.",
|
||||||
"deleteError": "",
|
"deleteError": "",
|
||||||
"previewError": "",
|
"previewError": "",
|
||||||
"executed": "",
|
"executed": "Дію успішно виконано.",
|
||||||
"executeError": ""
|
"executeError": ""
|
||||||
},
|
},
|
||||||
"table": {
|
"table": {
|
||||||
@@ -1021,7 +1025,7 @@
|
|||||||
"mediaMonitoring": "",
|
"mediaMonitoring": "",
|
||||||
"speedtest": "",
|
"speedtest": "",
|
||||||
"analytics": "",
|
"analytics": "",
|
||||||
"vpn": "",
|
"vpn": "VPN",
|
||||||
"mediaLibrary": "Медіа бібліотека",
|
"mediaLibrary": "Медіа бібліотека",
|
||||||
"uptimeMonitoring": ""
|
"uptimeMonitoring": ""
|
||||||
},
|
},
|
||||||
@@ -1141,7 +1145,7 @@
|
|||||||
"connection": {
|
"connection": {
|
||||||
"hostUnreachable": "",
|
"hostUnreachable": "",
|
||||||
"networkUnreachable": "Мережа недоступна. Перевірте підключення до Інтернету або налаштування мережі.",
|
"networkUnreachable": "Мережа недоступна. Перевірте підключення до Інтернету або налаштування мережі.",
|
||||||
"refused": "",
|
"refused": "Сервер відхилив з'єднання. Він не може працювати або відхиляти запити до вказаного порту.",
|
||||||
"reset": ""
|
"reset": ""
|
||||||
},
|
},
|
||||||
"dns": {
|
"dns": {
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "Секрет API",
|
||||||
|
"newLabel": "Новий cекрет API"
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "Безпаперовий ngx",
|
"name": "Безпаперовий ngx",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "Bazarr",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "Помилка",
|
||||||
|
"loading": "",
|
||||||
|
"idle": "Неактивно"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1904,7 +1944,7 @@
|
|||||||
"noStation": "",
|
"noStation": "",
|
||||||
"option": {
|
"option": {
|
||||||
"baseUrl": {
|
"baseUrl": {
|
||||||
"label": ""
|
"label": "Шукати URL"
|
||||||
},
|
},
|
||||||
"station": {
|
"station": {
|
||||||
"label": ""
|
"label": ""
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "",
|
"clear": "",
|
||||||
"heading": "",
|
"heading": "",
|
||||||
"align": "",
|
"align": "",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "Встановити напрямок тексту справа наліво",
|
||||||
"blockquote": "",
|
"blockquote": "",
|
||||||
"horizontalLine": "",
|
"horizontalLine": "",
|
||||||
"bulletList": "",
|
"bulletList": "",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "",
|
"sunrise": "",
|
||||||
"sunset": "",
|
"sunset": "",
|
||||||
"maxWindSpeed": "Максимальна швидкість вітру: {maxWindSpeed} км/год",
|
"maxWindSpeed": "Максимальна швидкість вітру: {maxWindSpeed} км/год",
|
||||||
"maxWindGusts": ""
|
"maxWindGusts": "",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Ясно",
|
"clear": "Ясно",
|
||||||
@@ -2287,7 +2330,7 @@
|
|||||||
"visibleStorageVolumes": {
|
"visibleStorageVolumes": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"placeholder": ""
|
"placeholder": "Оберіть томи сховища"
|
||||||
},
|
},
|
||||||
"defaultTab": {
|
"defaultTab": {
|
||||||
"label": ""
|
"label": ""
|
||||||
@@ -2359,7 +2402,7 @@
|
|||||||
"name": "Назва",
|
"name": "Назва",
|
||||||
"cpu": "ЦП",
|
"cpu": "ЦП",
|
||||||
"memory": "",
|
"memory": "",
|
||||||
"node": ""
|
"node": "Вузол"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2499,7 +2542,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"recentActivity": {
|
"recentActivity": {
|
||||||
"title": "",
|
"title": "Нещодавня активність",
|
||||||
"empty": "",
|
"empty": "",
|
||||||
"watched": "",
|
"watched": "",
|
||||||
"partial": ""
|
"partial": ""
|
||||||
@@ -2689,8 +2732,13 @@
|
|||||||
"user": "Користувач",
|
"user": "Користувач",
|
||||||
"name": "Назва",
|
"name": "Назва",
|
||||||
"id": "Id",
|
"id": "Id",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "",
|
"title": "Статистика ботів",
|
||||||
"video": {
|
"video": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"resolution": ""
|
"resolution": ""
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "Показувати хости з оновленнями безпеки",
|
||||||
|
"description": "Показувати хости, які потребують патчів безпеки"
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "Показати останні оновлення (24h)",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "Показати репозиторії",
|
||||||
|
"description": "Відображати кількість активних репозиторіїв, що відслідковуються"
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "Виберіть спосіб відображення дистрибутива операційної системи",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": "Кільцева діаграма"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "",
|
"name": "",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
@@ -2797,11 +3033,10 @@
|
|||||||
},
|
},
|
||||||
"randomizePhotos": {
|
"randomizePhotos": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"description": ""
|
"description": "Показувати фотографії у випадковому порядку замість того, щоб завжди починатися з того ж порядку альбому."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "",
|
||||||
"noAlbumSelected": "",
|
|
||||||
"noPhotos": ""
|
"noPhotos": ""
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Відкрийте посилання в новій вкладці"
|
"label": "Відкрийте посилання в новій вкладці"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,9 +3334,38 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": "Залишилося часу"
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "RSS-канали",
|
"name": "RSS-канали",
|
||||||
"description": "",
|
"description": "Моніторинг та відображення однієї або кількох загальних RSS-, ATOM- або JSON-стрічок",
|
||||||
"option": {
|
"option": {
|
||||||
"feedUrls": {
|
"feedUrls": {
|
||||||
"label": ""
|
"label": ""
|
||||||
@@ -3140,7 +3410,7 @@
|
|||||||
"label": "Показати тільки іконку"
|
"label": "Показати тільки іконку"
|
||||||
},
|
},
|
||||||
"topReleases": {
|
"topReleases": {
|
||||||
"label": "",
|
"label": "Кращі релізи",
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
"repositories": {
|
"repositories": {
|
||||||
@@ -3236,7 +3506,7 @@
|
|||||||
"projectDescription": "",
|
"projectDescription": "",
|
||||||
"created": "Створено",
|
"created": "Створено",
|
||||||
"error": {
|
"error": {
|
||||||
"label": "",
|
"label": "Помилка",
|
||||||
"messages": {
|
"messages": {
|
||||||
"invalidIdentifier": "",
|
"invalidIdentifier": "",
|
||||||
"noMatchingVersion": "",
|
"noMatchingVersion": "",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"noItems": "",
|
"noItems": "",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "",
|
"name": "",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "Трафік",
|
||||||
|
"description": "Огляд маршрутизаторів, сервісів, проміжного програмного забезпечення та точок входу Traefik",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": "Неможливо отримати дані Traefik"
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3787,11 +4095,16 @@
|
|||||||
"series": "Використано"
|
"series": "Використано"
|
||||||
},
|
},
|
||||||
"diskIO": {
|
"diskIO": {
|
||||||
"title": "",
|
"title": "Диск вводу/виводу",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "Сховище",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": "Використано"
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4309,7 +4622,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
"includeFromAllUsers": ""
|
"includeFromAllUsers": "Включити медіа від усіх користувачів"
|
||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"back": "",
|
"back": "",
|
||||||
@@ -4681,8 +4994,8 @@
|
|||||||
"title": ""
|
"title": ""
|
||||||
},
|
},
|
||||||
"authentication": {
|
"authentication": {
|
||||||
"title": "",
|
"title": "Аутентифікація",
|
||||||
"intro": "",
|
"intro": "Ви можете автентифікувати свій MCP-сервер, використовуючи або ключ API, або OAuth. Обидва методи дають той же рівень доступу.",
|
||||||
"apiKey": {
|
"apiKey": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
@@ -4766,9 +5079,9 @@
|
|||||||
"metaTitle": "",
|
"metaTitle": "",
|
||||||
"export": {
|
"export": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"description": "",
|
"description": "Завантажте повну резервну копію вашої бази даних SQLite, включаючи всі налаштування, користувачів, дошки та зашифровані секрети інтеграції. Резервна копія містить ключ шифрування та метадані у вигляді ZIP-файлу.",
|
||||||
"button": "",
|
"button": "Завантажити резервну копію",
|
||||||
"error": "",
|
"error": "Помилка експорту",
|
||||||
"confirm": {
|
"confirm": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"warningTitle": "",
|
"warningTitle": "",
|
||||||
@@ -4837,11 +5150,11 @@
|
|||||||
"app": "",
|
"app": "",
|
||||||
"integration": "",
|
"integration": "",
|
||||||
"item": "",
|
"item": "",
|
||||||
"media": "",
|
"media": "Медіа",
|
||||||
"search_engine": ""
|
"search_engine": "Пошукові системи"
|
||||||
},
|
},
|
||||||
"migrationsApplied": "",
|
"migrationsApplied": "Застосовано міграцію {count}",
|
||||||
"migrationsAppliedPlural": "",
|
"migrationsAppliedPlural": "Застосовано міграції {count}",
|
||||||
"migrationsOlderVersion": "",
|
"migrationsOlderVersion": "",
|
||||||
"migrationsOlderVersionPlural": "",
|
"migrationsOlderVersionPlural": "",
|
||||||
"migrationsUpToDate": "",
|
"migrationsUpToDate": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "Контейнери",
|
"title": "Контейнери",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "Оновлено {when}",
|
"updated": "Оновлено {when}",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "",
|
"search": "",
|
||||||
"selected": "Вибрано {selectCount} із {totalCount} контейнерів",
|
"selected": "Вибрано {selectCount} із {totalCount} контейнерів",
|
||||||
"footer": "",
|
"footer": "",
|
||||||
@@ -5055,13 +5371,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"internalServerError": "",
|
"internalServerError": "Не вдалося отримати Docker контейнери",
|
||||||
"noColumns": ""
|
"noColumns": "Виберіть хоча б один стовпець в налаштуваннях віджета"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"kubernetes": {
|
"kubernetes": {
|
||||||
"cluster": {
|
"cluster": {
|
||||||
"title": "",
|
"title": "Панель кластера",
|
||||||
"label": "",
|
"label": "",
|
||||||
"providers": "",
|
"providers": "",
|
||||||
"version": "",
|
"version": "",
|
||||||
@@ -5187,7 +5503,7 @@
|
|||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
"clusterIP": {
|
"clusterIP": {
|
||||||
"label": ""
|
"label": "Кластер IP"
|
||||||
},
|
},
|
||||||
"creationTimestamp": {
|
"creationTimestamp": {
|
||||||
"label": ""
|
"label": ""
|
||||||
@@ -5273,10 +5589,10 @@
|
|||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
"label": ""
|
"label": "Сховище"
|
||||||
},
|
},
|
||||||
"storageClassName": {
|
"storageClassName": {
|
||||||
"label": ""
|
"label": "Назва класу сховища"
|
||||||
},
|
},
|
||||||
"volumeMode": {
|
"volumeMode": {
|
||||||
"label": ""
|
"label": ""
|
||||||
@@ -5616,7 +5932,7 @@
|
|||||||
"label": "",
|
"label": "",
|
||||||
"children": {
|
"children": {
|
||||||
"detail": {
|
"detail": {
|
||||||
"title": ""
|
"title": "Увімкнути Бан DuckGos"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -5624,12 +5940,12 @@
|
|||||||
"label": "",
|
"label": "",
|
||||||
"children": {
|
"children": {
|
||||||
"detail": {
|
"detail": {
|
||||||
"title": ""
|
"title": "Оберіть перший день тижня"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"homeBoardId": {
|
"homeBoardId": {
|
||||||
"label": "",
|
"label": "Домашня дошка",
|
||||||
"children": {
|
"children": {
|
||||||
"detail": {
|
"detail": {
|
||||||
"title": ""
|
"title": ""
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
@@ -5963,7 +6287,7 @@
|
|||||||
"status": ""
|
"status": ""
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"requested": ""
|
"requested": "Запитано"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"button": {
|
"button": {
|
||||||
@@ -5977,7 +6301,7 @@
|
|||||||
"certificate": {
|
"certificate": {
|
||||||
"field": {
|
"field": {
|
||||||
"hostname": {
|
"hostname": {
|
||||||
"label": ""
|
"label": "Назва хоста"
|
||||||
},
|
},
|
||||||
"subject": {
|
"subject": {
|
||||||
"label": ""
|
"label": ""
|
||||||
@@ -6013,7 +6337,7 @@
|
|||||||
"toHostnames": ""
|
"toHostnames": ""
|
||||||
},
|
},
|
||||||
"hostnames": {
|
"hostnames": {
|
||||||
"title": "",
|
"title": "Довірені назви хостів сертифікатів",
|
||||||
"description": "",
|
"description": "",
|
||||||
"noResults": {
|
"noResults": {
|
||||||
"title": ""
|
"title": ""
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": ""
|
"label": ""
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "Công cụ tìm kiếm mặc định"
|
"label": "Công cụ tìm kiếm mặc định"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "Xóa định dạng",
|
"clear": "Xóa định dạng",
|
||||||
"heading": "Tiêu đề {level}",
|
"heading": "Tiêu đề {level}",
|
||||||
"align": "Căn chỉnh: {position}",
|
"align": "Căn chỉnh: {position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "Trích dẫn",
|
"blockquote": "Trích dẫn",
|
||||||
"horizontalLine": "Kẻ ngang",
|
"horizontalLine": "Kẻ ngang",
|
||||||
"bulletList": "Danh sách kiểu ký hiệu",
|
"bulletList": "Danh sách kiểu ký hiệu",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "",
|
"sunrise": "",
|
||||||
"sunset": "",
|
"sunset": "",
|
||||||
"maxWindSpeed": "",
|
"maxWindSpeed": "",
|
||||||
"maxWindGusts": ""
|
"maxWindGusts": "",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "Quang đãng",
|
"clear": "Quang đãng",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "",
|
"user": "",
|
||||||
"name": "",
|
"name": "",
|
||||||
"id": "",
|
"id": "",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "",
|
"name": "",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "",
|
||||||
"noAlbumSelected": "",
|
|
||||||
"noPhotos": ""
|
"noPhotos": ""
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "Mở liên kết trong tab mới"
|
"label": "Mở liên kết trong tab mới"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"noItems": "",
|
"noItems": "",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "",
|
"name": "",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "",
|
"title": "",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "",
|
"updated": "",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "",
|
"search": "",
|
||||||
"selected": "",
|
"selected": "",
|
||||||
"footer": "",
|
"footer": "",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,10 @@
|
|||||||
"pingIconsEnabled": {
|
"pingIconsEnabled": {
|
||||||
"label": "為 Pings 使用 icon"
|
"label": "為 Pings 使用 icon"
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"defaultSearchEngine": {
|
"defaultSearchEngine": {
|
||||||
"label": "預設搜尋引擎"
|
"label": "預設搜尋引擎"
|
||||||
},
|
},
|
||||||
@@ -1285,6 +1289,14 @@
|
|||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
},
|
},
|
||||||
|
"patchmonApiKey": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
|
"patchmonApiSecret": {
|
||||||
|
"label": "",
|
||||||
|
"newLabel": ""
|
||||||
|
},
|
||||||
"githubAppId": {
|
"githubAppId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
"newLabel": ""
|
"newLabel": ""
|
||||||
@@ -1328,9 +1340,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
"paperlessNgx": {
|
"paperlessNgx": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": ""
|
"description": ""
|
||||||
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"media": {
|
"media": {
|
||||||
@@ -1602,6 +1626,12 @@
|
|||||||
"refresh": "",
|
"refresh": "",
|
||||||
"options": "",
|
"options": "",
|
||||||
"actions": ""
|
"actions": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"success": "",
|
||||||
|
"error": "",
|
||||||
|
"loading": "",
|
||||||
|
"idle": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"create": {
|
"create": {
|
||||||
@@ -1875,6 +1905,16 @@
|
|||||||
"customDateFormat": {
|
"customDateFormat": {
|
||||||
"label": "自訂日期格式",
|
"label": "自訂日期格式",
|
||||||
"description": "使用 ISO 8601 格式化日期 (此操作將覆蓋其他選項)"
|
"description": "使用 ISO 8601 格式化日期 (此操作將覆蓋其他選項)"
|
||||||
|
},
|
||||||
|
"showWeather": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"weatherLocation": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"isWeatherFormatFahrenheit": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1936,6 +1976,8 @@
|
|||||||
"clear": "清除格式",
|
"clear": "清除格式",
|
||||||
"heading": "標題 {level}",
|
"heading": "標題 {level}",
|
||||||
"align": "對齊文字:{position}",
|
"align": "對齊文字:{position}",
|
||||||
|
"directionLtr": "",
|
||||||
|
"directionRtl": "",
|
||||||
"blockquote": "引用",
|
"blockquote": "引用",
|
||||||
"horizontalLine": "橫線",
|
"horizontalLine": "橫線",
|
||||||
"bulletList": "符號列表",
|
"bulletList": "符號列表",
|
||||||
@@ -2225,7 +2267,8 @@
|
|||||||
"sunrise": "日出",
|
"sunrise": "日出",
|
||||||
"sunset": "日落",
|
"sunset": "日落",
|
||||||
"maxWindSpeed": "最大風速:{maxWindSpeed} 公里/時",
|
"maxWindSpeed": "最大風速:{maxWindSpeed} 公里/時",
|
||||||
"maxWindGusts": "最大陣風:{maxWindGusts} 公里/時"
|
"maxWindGusts": "最大陣風:{maxWindGusts} 公里/時",
|
||||||
|
"humidity": ""
|
||||||
},
|
},
|
||||||
"kind": {
|
"kind": {
|
||||||
"clear": "晴朗",
|
"clear": "晴朗",
|
||||||
@@ -2689,6 +2732,11 @@
|
|||||||
"user": "使用者",
|
"user": "使用者",
|
||||||
"name": "名稱",
|
"name": "名稱",
|
||||||
"id": "ID",
|
"id": "ID",
|
||||||
|
"status": "",
|
||||||
|
"directPlay": "",
|
||||||
|
"transcoding": "",
|
||||||
|
"paused": "",
|
||||||
|
"remaining": "",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"video": {
|
"video": {
|
||||||
@@ -2754,6 +2802,193 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"patchmon": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"title": "",
|
||||||
|
"totalHosts": "",
|
||||||
|
"hostsNeedingUpdates": "",
|
||||||
|
"securityUpdates": "",
|
||||||
|
"upToDateHosts": "",
|
||||||
|
"hostsWithSecurityUpdates": "",
|
||||||
|
"recentUpdates24h": "",
|
||||||
|
"totalOutdatedPackages": "",
|
||||||
|
"totalRepos": "",
|
||||||
|
"osDistribution": "",
|
||||||
|
"compliance": "",
|
||||||
|
"complianceRatio": "",
|
||||||
|
"lastUpdated": "",
|
||||||
|
"option": {
|
||||||
|
"showTotalHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsNeedingUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showUpToDateHosts": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHostsWithSecurityUpdates": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showRecentUpdates24h": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalOutdatedPackages": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showTotalRepos": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"enableThresholdColors": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"useCustomThresholds": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"thresholdMode": {
|
||||||
|
"option": {
|
||||||
|
"absolute": "",
|
||||||
|
"percent": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsNeedingUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"securityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"hostsWithSecurityUpdatesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"upToDateHostsCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesThresholdMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesWarningAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"totalOutdatedPackagesCriticalAt": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showOsDistribution": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDistributionLimit": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"3": "",
|
||||||
|
"5": "",
|
||||||
|
"10": "",
|
||||||
|
"all": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"showOsVersion": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showComplianceHero": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"osDisplayMode": {
|
||||||
|
"label": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"bars": "",
|
||||||
|
"donut": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bazarr": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"episodes": "",
|
||||||
|
"movies": "",
|
||||||
|
"providers": "",
|
||||||
|
"status": "",
|
||||||
|
"option": {
|
||||||
|
"showMissingEpisodes": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showMissingMovies": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showProviderIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
},
|
||||||
|
"showHealthIssues": {
|
||||||
|
"label": "",
|
||||||
|
"description": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"immich-serverStats": {
|
"immich-serverStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -2782,6 +3017,7 @@
|
|||||||
},
|
},
|
||||||
"immich-albumCarousel": {
|
"immich-albumCarousel": {
|
||||||
"name": "",
|
"name": "",
|
||||||
|
"allPhotos": "",
|
||||||
"option": {
|
"option": {
|
||||||
"albumId": {
|
"albumId": {
|
||||||
"label": "",
|
"label": "",
|
||||||
@@ -2801,7 +3037,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description": "",
|
"description": "",
|
||||||
"noAlbumSelected": "",
|
|
||||||
"noPhotos": ""
|
"noPhotos": ""
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
@@ -2986,6 +3221,12 @@
|
|||||||
"option": {
|
"option": {
|
||||||
"linksTargetNewTab": {
|
"linksTargetNewTab": {
|
||||||
"label": "於新分頁中開啟鏈結"
|
"label": "於新分頁中開啟鏈結"
|
||||||
|
},
|
||||||
|
"statusFilter": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"recentDays": {
|
||||||
|
"label": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pending": {
|
"pending": {
|
||||||
@@ -3093,6 +3334,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mediaMissing": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showMissing": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showQueued": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"pageSize": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tab": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"movie": "",
|
||||||
|
"episode": ""
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"missing": "",
|
||||||
|
"queued": "",
|
||||||
|
"noTabsEnabled": ""
|
||||||
|
},
|
||||||
|
"timeLeft": ""
|
||||||
|
},
|
||||||
"rssFeed": {
|
"rssFeed": {
|
||||||
"name": "RSS 訂閱",
|
"name": "RSS 訂閱",
|
||||||
"description": "顯示一個或多個 RSS、ATOM、JSON 源",
|
"description": "顯示一個或多個 RSS、ATOM、JSON 源",
|
||||||
@@ -3336,7 +3606,11 @@
|
|||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
"noItems": "",
|
"noItems": "",
|
||||||
"option": {}
|
"option": {
|
||||||
|
"hideLogos": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"speedtestTracker": {
|
"speedtestTracker": {
|
||||||
"name": "",
|
"name": "",
|
||||||
@@ -3417,6 +3691,40 @@
|
|||||||
"internalServerError": ""
|
"internalServerError": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"traefik": {
|
||||||
|
"name": "",
|
||||||
|
"description": "",
|
||||||
|
"option": {
|
||||||
|
"showTcp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showUdp": {
|
||||||
|
"label": ""
|
||||||
|
},
|
||||||
|
"showEntryPoints": {
|
||||||
|
"label": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"instances": "",
|
||||||
|
"versionUnknown": "",
|
||||||
|
"summary": {
|
||||||
|
"routers": "",
|
||||||
|
"entryPoints": ""
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"routers": "",
|
||||||
|
"services": "",
|
||||||
|
"middlewares": ""
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"healthy": "",
|
||||||
|
"errors": "",
|
||||||
|
"warnings": ""
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"internalServerError": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
"audioStats": {
|
"audioStats": {
|
||||||
"name": "",
|
"name": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@@ -3792,6 +4100,11 @@
|
|||||||
"read": "",
|
"read": "",
|
||||||
"write": ""
|
"write": ""
|
||||||
},
|
},
|
||||||
|
"storage": {
|
||||||
|
"title": "",
|
||||||
|
"subtitle": "",
|
||||||
|
"series": ""
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"title": "",
|
"title": "",
|
||||||
"subtitle": "",
|
"subtitle": "",
|
||||||
@@ -4924,6 +5237,9 @@
|
|||||||
"title": "容器",
|
"title": "容器",
|
||||||
"table": {
|
"table": {
|
||||||
"updated": "已更新於 {when}",
|
"updated": "已更新於 {when}",
|
||||||
|
"refresh": {
|
||||||
|
"lastUpdated": ""
|
||||||
|
},
|
||||||
"search": "搜尋 {count} 容器",
|
"search": "搜尋 {count} 容器",
|
||||||
"selected": "{totalCount} 容器的 {selectCount}",
|
"selected": "{totalCount} 容器的 {selectCount}",
|
||||||
"footer": "",
|
"footer": "",
|
||||||
@@ -5652,6 +5968,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"enableRightClickOnWidgets": {
|
||||||
|
"label": "",
|
||||||
|
"children": {
|
||||||
|
"detail": {
|
||||||
|
"title": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"fullPreferencesPage": {
|
"fullPreferencesPage": {
|
||||||
"label": ""
|
"label": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -114,14 +114,22 @@ const getMaxVisibleMetrics = (cellHeight: number, size: SizeConfig): number => {
|
|||||||
return Math.max(1, Math.floor(available / size.rowHeight));
|
return Math.max(1, Math.floor(available / size.rowHeight));
|
||||||
};
|
};
|
||||||
|
|
||||||
const MIN_CELL_WIDTH = 180;
|
const MIN_CELL_WIDTH = 140;
|
||||||
const MIN_CELL_HEIGHT = 80;
|
const MIN_CELL_HEIGHT = 80;
|
||||||
|
|
||||||
const getColCount = (width: number, height: number, itemCount: number): number => {
|
const getColCount = (width: number, _height: number, itemCount: number): number => {
|
||||||
if (itemCount <= 1) return 1;
|
if (itemCount <= 1) return 1;
|
||||||
const maxCols = Math.min(itemCount, Math.max(1, Math.floor(width / MIN_CELL_WIDTH)));
|
const maxCols = Math.min(itemCount, Math.max(1, Math.floor(width / MIN_CELL_WIDTH)));
|
||||||
const aspectRatio = width / Math.max(height, MIN_CELL_HEIGHT);
|
|
||||||
return Math.min(maxCols, Math.max(1, Math.ceil(Math.sqrt(itemCount * aspectRatio))));
|
let best = 1;
|
||||||
|
for (let c = 1; c <= maxCols; c++) {
|
||||||
|
const emptyCells = (c - (itemCount % c)) % c;
|
||||||
|
const bestEmpty = (best - (itemCount % best)) % best;
|
||||||
|
if (emptyCells < bestEmpty || (emptyCells === bestEmpty && c > best)) {
|
||||||
|
best = c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return best;
|
||||||
};
|
};
|
||||||
|
|
||||||
interface MetricRowProps {
|
interface MetricRowProps {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { useCallback, useEffect, useRef, useState } from "react";
|
import { useCallback, useEffect, useRef, useState, useSyncExternalStore } from "react";
|
||||||
import { skipToken } from "@tanstack/react-query";
|
import { skipToken } from "@tanstack/react-query";
|
||||||
|
|
||||||
import { clientApi } from "@homarr/api/client";
|
import { clientApi } from "@homarr/api/client";
|
||||||
@@ -10,10 +10,22 @@ import type { BeszelContainerStatsRecord, BeszelSystemStatsRecord } from "@homar
|
|||||||
// without synthesizing points for missed updates.
|
// without synthesizing points for missed updates.
|
||||||
const MAX_BUFFER = 60;
|
const MAX_BUFFER = 60;
|
||||||
|
|
||||||
|
const subscribeToVisibility = (onChange: () => void) => {
|
||||||
|
if (typeof document === "undefined") return () => {};
|
||||||
|
document.addEventListener("visibilitychange", onChange);
|
||||||
|
return () => document.removeEventListener("visibilitychange", onChange);
|
||||||
|
};
|
||||||
|
|
||||||
|
const getPageVisibility = () => typeof document === "undefined" || document.visibilityState === "visible";
|
||||||
|
|
||||||
|
const usePageVisible = () => useSyncExternalStore(subscribeToVisibility, getPageVisibility, () => true);
|
||||||
|
|
||||||
export const useLiveStats = (integrationIds: string[], systemId: string, enabled: boolean) => {
|
export const useLiveStats = (integrationIds: string[], systemId: string, enabled: boolean) => {
|
||||||
const [systemStats, setSystemStats] = useState<BeszelSystemStatsRecord[]>([]);
|
const [systemStats, setSystemStats] = useState<BeszelSystemStatsRecord[]>([]);
|
||||||
const [containerStats, setContainerStats] = useState<BeszelContainerStatsRecord[]>([]);
|
const [containerStats, setContainerStats] = useState<BeszelContainerStatsRecord[]>([]);
|
||||||
const [error, setError] = useState<Error | null>(null);
|
const [error, setError] = useState<Error | null>(null);
|
||||||
|
const pageVisible = usePageVisible();
|
||||||
|
const subscriptionEnabled = enabled && pageVisible && systemId !== "";
|
||||||
|
|
||||||
// Append to buffer, trimming to MAX_BUFFER
|
// Append to buffer, trimming to MAX_BUFFER
|
||||||
const appendSystemStats = useCallback((record: BeszelSystemStatsRecord) => {
|
const appendSystemStats = useCallback((record: BeszelSystemStatsRecord) => {
|
||||||
@@ -31,7 +43,7 @@ export const useLiveStats = (integrationIds: string[], systemId: string, enabled
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
clientApi.widget.beszel.subscribeSystemStats.useSubscription(
|
clientApi.widget.beszel.subscribeSystemStats.useSubscription(
|
||||||
enabled && systemId !== "" ? { integrationIds, systemId } : skipToken,
|
subscriptionEnabled ? { integrationIds, systemId } : skipToken,
|
||||||
{
|
{
|
||||||
onData(event) {
|
onData(event) {
|
||||||
setError(null);
|
setError(null);
|
||||||
@@ -49,7 +61,7 @@ export const useLiveStats = (integrationIds: string[], systemId: string, enabled
|
|||||||
|
|
||||||
// Reset buffers when system changes or integration changes
|
// Reset buffers when system changes or integration changes
|
||||||
const prevKeyRef = useRef<string>("");
|
const prevKeyRef = useRef<string>("");
|
||||||
const currentKey = `${integrationIds.join(",")}:${systemId}:${enabled}`;
|
const currentKey = `${integrationIds.join(",")}:${systemId}:${subscriptionEnabled}`;
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (prevKeyRef.current !== currentKey) {
|
if (prevKeyRef.current !== currentKey) {
|
||||||
prevKeyRef.current = currentKey;
|
prevKeyRef.current = currentKey;
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
import { useCallback, useState } from "react";
|
import { Box, Container, Flex, HoverCard, Text, useMantineTheme } from "@mantine/core";
|
||||||
import { Box, Container, Flex, Popover, Text, useMantineTheme } from "@mantine/core";
|
|
||||||
import { useElementSize } from "@mantine/hooks";
|
|
||||||
|
|
||||||
import { useRequiredBoard } from "@homarr/boards/context";
|
import { useRequiredBoard } from "@homarr/boards/context";
|
||||||
import type { CalendarEvent } from "@homarr/integrations/types";
|
import type { CalendarEvent } from "@homarr/integrations/types";
|
||||||
@@ -13,14 +11,9 @@ 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 [pinned, setPinned] = useState(false);
|
|
||||||
const { primaryColor } = useMantineTheme();
|
|
||||||
const { ref, height } = useElementSize();
|
|
||||||
const board = useRequiredBoard();
|
const board = useRequiredBoard();
|
||||||
const mantineTheme = useMantineTheme();
|
const mantineTheme = useMantineTheme();
|
||||||
const actualItemRadius = mantineTheme.radius[board.itemRadius];
|
const actualItemRadius = mantineTheme.radius[board.itemRadius];
|
||||||
@@ -29,39 +22,19 @@ export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth, onO
|
|||||||
const shouldScaleDown = minAxisSize < 350;
|
const shouldScaleDown = minAxisSize < 350;
|
||||||
const isSmall = rootHeight < 256;
|
const isSmall = rootHeight < 256;
|
||||||
|
|
||||||
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
|
<HoverCard
|
||||||
position="bottom"
|
position="bottom"
|
||||||
withArrow
|
withArrow
|
||||||
withinPortal
|
withinPortal
|
||||||
radius="lg"
|
radius="lg"
|
||||||
shadow="sm"
|
shadow="sm"
|
||||||
transitionProps={{
|
transitionProps={{ transition: "pop" }}
|
||||||
transition: "pop",
|
openDelay={350}
|
||||||
}}
|
closeDelay={400}
|
||||||
onChange={(value) => {
|
|
||||||
setOpened(value);
|
|
||||||
if (!value) setPinned(false);
|
|
||||||
}}
|
|
||||||
opened={opened}
|
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
>
|
>
|
||||||
<Popover.Target>
|
<HoverCard.Target>
|
||||||
<Container
|
<Container
|
||||||
h="100%"
|
h="100%"
|
||||||
w="100%"
|
w="100%"
|
||||||
@@ -69,38 +42,23 @@ export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth, onO
|
|||||||
pt={isSmall ? 0 : 10}
|
pt={isSmall ? 0 : 10}
|
||||||
pb={isSmall ? 0 : 10}
|
pb={isSmall ? 0 : 10}
|
||||||
m={0}
|
m={0}
|
||||||
ref={ref}
|
pos="relative"
|
||||||
bd={`2px solid ${opened && !disabled ? primaryColor : "transparent"}`}
|
|
||||||
style={{
|
style={{
|
||||||
alignContent: "center",
|
alignContent: "center",
|
||||||
borderRadius: actualItemRadius,
|
borderRadius: actualItemRadius,
|
||||||
cursor: disabled ? "default" : "pointer",
|
cursor: disabled ? "default" : "pointer",
|
||||||
}}
|
}}
|
||||||
onClick={() => {
|
|
||||||
if (!disabled) setPinned((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()}
|
||||||
</Text>
|
</Text>
|
||||||
{!isTooSmallForIndicators && <NotificationIndicator events={events} isSmall={isSmall} />}
|
<NotificationIndicator events={events} isSmall={isSmall} />
|
||||||
</Container>
|
</Container>
|
||||||
</Popover.Target>
|
</HoverCard.Target>
|
||||||
{/* Popover has some offset on the left side, padding is removed because of scrollarea paddings */}
|
<HoverCard.Dropdown maw="calc(100vw - 24px)" w={512} pe={4} pb={0} style={{ overflow: "hidden" }}>
|
||||||
<Popover.Dropdown
|
|
||||||
maw="calc(100vw - 24px)"
|
|
||||||
w={512}
|
|
||||||
pe={4}
|
|
||||||
pb={0}
|
|
||||||
style={{ overflow: "hidden" }}
|
|
||||||
onMouseEnter={() => setOpened(true)}
|
|
||||||
onMouseLeave={handleMouseLeave}
|
|
||||||
>
|
|
||||||
<CalendarEventList events={events} />
|
<CalendarEventList events={events} />
|
||||||
</Popover.Dropdown>
|
</HoverCard.Dropdown>
|
||||||
</Popover>
|
</HoverCard>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -111,7 +69,6 @@ interface NotificationIndicatorProps {
|
|||||||
|
|
||||||
const NotificationIndicator = ({ events, isSmall }: NotificationIndicatorProps) => {
|
const NotificationIndicator = ({ events, isSmall }: NotificationIndicatorProps) => {
|
||||||
const notificationEvents = [...new Set(events.map((event) => event.indicatorColor))].filter(String);
|
const notificationEvents = [...new Set(events.map((event) => event.indicatorColor))].filter(String);
|
||||||
/* position bottom is lower when small to not be on top of number*/
|
|
||||||
return (
|
return (
|
||||||
<Flex
|
<Flex
|
||||||
w="75%"
|
w="75%"
|
||||||
|
|||||||
@@ -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";
|
||||||
@@ -65,11 +65,6 @@ const CalendarBase = ({ isEditMode, events, month, setMonth, options }: Calendar
|
|||||||
const isSmall = width < 256;
|
const isSmall = width < 256;
|
||||||
|
|
||||||
const normalizedEvents = useMemo(() => splitEvents(events), [events]);
|
const normalizedEvents = useMemo(() => splitEvents(events), [events]);
|
||||||
const activeCloseRef = useRef<(() => void) | null>(null);
|
|
||||||
const onDayOpen = useCallback((close: () => void) => {
|
|
||||||
activeCloseRef.current?.();
|
|
||||||
activeCloseRef.current = close;
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Calendar
|
<Calendar
|
||||||
@@ -146,7 +141,6 @@ const CalendarBase = ({ isEditMode, events, month, setMonth, options }: Calendar
|
|||||||
disabled={isEditMode || eventsForDate.length === 0}
|
disabled={isEditMode || eventsForDate.length === 0}
|
||||||
rootWidth={width}
|
rootWidth={width}
|
||||||
rootHeight={height}
|
rootHeight={height}
|
||||||
onOpen={onDayOpen}
|
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}}
|
}}
|
||||||
|
|||||||
@@ -1,13 +1,16 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { useEffect, useMemo, useRef, useState } from "react";
|
import { useEffect, useMemo, useRef, useState } from "react";
|
||||||
import { Stack, Text, Title } from "@mantine/core";
|
import { Box, Stack, Text, Title } from "@mantine/core";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import advancedFormat from "dayjs/plugin/advancedFormat";
|
import advancedFormat from "dayjs/plugin/advancedFormat";
|
||||||
import timezones from "dayjs/plugin/timezone";
|
import timezones from "dayjs/plugin/timezone";
|
||||||
import utc from "dayjs/plugin/utc";
|
import utc from "dayjs/plugin/utc";
|
||||||
|
|
||||||
|
import { clientApi } from "@homarr/api/client";
|
||||||
|
|
||||||
import type { WidgetComponentProps } from "../definition";
|
import type { WidgetComponentProps } from "../definition";
|
||||||
|
import { AnimatedWeatherIcon } from "../weather/animated-icon";
|
||||||
|
|
||||||
dayjs.extend(advancedFormat);
|
dayjs.extend(advancedFormat);
|
||||||
dayjs.extend(utc);
|
dayjs.extend(utc);
|
||||||
@@ -23,30 +26,65 @@ export default function ClockWidget({ options, width }: WidgetComponentProps<"cl
|
|||||||
const time = useCurrentTime(options);
|
const time = useCurrentTime(options);
|
||||||
|
|
||||||
const sizing = width < 128 ? "xs" : width < 196 ? "sm" : "md";
|
const sizing = width < 128 ? "xs" : width < 196 ? "sm" : "md";
|
||||||
|
const showWeatherCorner = options.showWeather && sizing !== "xs";
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Stack className="clock-text-stack" h="100%" align="center" justify="center" gap={sizing}>
|
<Box className="clock-widget-container" h="100%" pos="relative">
|
||||||
{options.customTitleToggle && (
|
{showWeatherCorner && (
|
||||||
<Text className="clock-customTitle-text" size={sizing} ta="center">
|
<ClockWeatherCorner
|
||||||
{options.customTitle}
|
latitude={options.weatherLocation.latitude}
|
||||||
</Text>
|
longitude={options.weatherLocation.longitude}
|
||||||
|
isFahrenheit={options.isWeatherFormatFahrenheit}
|
||||||
|
/>
|
||||||
)}
|
)}
|
||||||
<Title className="clock-time-text" fw={700} order={sizing === "md" ? 2 : sizing === "sm" ? 4 : 6} lh="1">
|
<Stack className="clock-text-stack" h="100%" align="center" justify="center" gap={sizing}>
|
||||||
{options.customTimeFormat
|
{options.customTitleToggle && (
|
||||||
? dayjs(time).tz(timezone).format(customTimeFormat)
|
<Text className="clock-customTitle-text" size={sizing} ta="center">
|
||||||
: dayjs(time).tz(timezone).format(timeFormat)}
|
{options.customTitle}
|
||||||
</Title>
|
</Text>
|
||||||
{options.showDate && (
|
)}
|
||||||
<Text className="clock-date-text" size={sizing} lineClamp={1}>
|
<Title className="clock-time-text" fw={700} order={sizing === "md" ? 2 : sizing === "sm" ? 4 : 6} lh="1">
|
||||||
{options.customDateFormat
|
{options.customTimeFormat
|
||||||
? dayjs(time).tz(timezone).format(customDateFormat)
|
? dayjs(time).tz(timezone).format(customTimeFormat)
|
||||||
: dayjs(time).tz(timezone).format(dateFormat)}
|
: dayjs(time).tz(timezone).format(timeFormat)}
|
||||||
</Text>
|
</Title>
|
||||||
)}
|
{options.showDate && (
|
||||||
</Stack>
|
<Text className="clock-date-text" size={sizing} lineClamp={1}>
|
||||||
|
{options.customDateFormat
|
||||||
|
? dayjs(time).tz(timezone).format(customDateFormat)
|
||||||
|
: dayjs(time).tz(timezone).format(dateFormat)}
|
||||||
|
</Text>
|
||||||
|
)}
|
||||||
|
</Stack>
|
||||||
|
</Box>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface ClockWeatherCornerProps {
|
||||||
|
latitude: number;
|
||||||
|
longitude: number;
|
||||||
|
isFahrenheit: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ClockWeatherCorner = ({ latitude, longitude, isFahrenheit }: ClockWeatherCornerProps) => {
|
||||||
|
const { data: weather } = clientApi.widget.weather.atLocation.useQuery({ latitude, longitude });
|
||||||
|
|
||||||
|
if (!weather) return null;
|
||||||
|
|
||||||
|
const temp = isFahrenheit ? weather.current.temperature * (9 / 5) + 32 : weather.current.temperature;
|
||||||
|
const unit = isFahrenheit ? "°F" : "°C";
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Stack className="clock-weather-corner" pos="absolute" top={4} left={4} gap={0} align="center">
|
||||||
|
<AnimatedWeatherIcon code={weather.current.weathercode} size={22} />
|
||||||
|
<Text className="clock-weather-corner-temp" size="xs" c="dimmed">
|
||||||
|
{Math.round(temp)}
|
||||||
|
{unit}
|
||||||
|
</Text>
|
||||||
|
</Stack>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
interface UseCurrentTimeProps {
|
interface UseCurrentTimeProps {
|
||||||
showSeconds: boolean;
|
showSeconds: boolean;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,6 +55,20 @@ export const { definition, componentLoader } = createWidgetDefinition("clock", {
|
|||||||
defaultValue: "",
|
defaultValue: "",
|
||||||
withDescription: true,
|
withDescription: true,
|
||||||
}),
|
}),
|
||||||
|
showWeather: factory.switch({
|
||||||
|
defaultValue: false,
|
||||||
|
withDescription: true,
|
||||||
|
}),
|
||||||
|
weatherLocation: factory.location({
|
||||||
|
defaultValue: {
|
||||||
|
name: "Brisbane",
|
||||||
|
latitude: -27.4698,
|
||||||
|
longitude: 153.0251,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
isWeatherFormatFahrenheit: factory.switch({
|
||||||
|
defaultValue: false,
|
||||||
|
}),
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
customTitle: {
|
customTitle: {
|
||||||
@@ -66,6 +80,12 @@ export const { definition, componentLoader } = createWidgetDefinition("clock", {
|
|||||||
dateFormat: {
|
dateFormat: {
|
||||||
shouldHide: (options) => !options.showDate,
|
shouldHide: (options) => !options.showDate,
|
||||||
},
|
},
|
||||||
|
weatherLocation: {
|
||||||
|
shouldHide: (options) => !options.showWeather,
|
||||||
|
},
|
||||||
|
isWeatherFormatFahrenheit: {
|
||||||
|
shouldHide: (options) => !options.showWeather,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
File diff suppressed because it is too large.
Load diff
@@ -8,28 +8,37 @@ import { createWidgetDefinition } from "../definition";
|
|||||||
import { optionsBuilder } from "../options";
|
import { optionsBuilder } from "../options";
|
||||||
|
|
||||||
const columnsList = [
|
const columnsList = [
|
||||||
"id",
|
|
||||||
"actions",
|
|
||||||
"added",
|
|
||||||
"category",
|
|
||||||
"downSpeed",
|
|
||||||
"index",
|
|
||||||
"integration",
|
|
||||||
"name",
|
"name",
|
||||||
"progress",
|
"progress",
|
||||||
|
"size",
|
||||||
|
"downSpeed",
|
||||||
|
"upSpeed",
|
||||||
|
"time",
|
||||||
|
"state",
|
||||||
|
"added",
|
||||||
"ratio",
|
"ratio",
|
||||||
"received",
|
"received",
|
||||||
"sent",
|
"sent",
|
||||||
"size",
|
"category",
|
||||||
"state",
|
"integration",
|
||||||
"time",
|
"index",
|
||||||
"type",
|
"type",
|
||||||
"upSpeed",
|
|
||||||
] as const satisfies (keyof ExtendedDownloadClientItem)[];
|
] as const satisfies (keyof ExtendedDownloadClientItem)[];
|
||||||
const sortingExclusion = ["actions", "id", "state"] as const satisfies readonly (typeof columnsList)[number][];
|
|
||||||
const columnsSort = columnsList.filter((column) =>
|
const sortColumns = [
|
||||||
sortingExclusion.every((exclusion) => exclusion !== column),
|
"name",
|
||||||
) as Exclude<typeof columnsList, (typeof sortingExclusion)[number]>;
|
"progress",
|
||||||
|
"size",
|
||||||
|
"downSpeed",
|
||||||
|
"upSpeed",
|
||||||
|
"time",
|
||||||
|
"added",
|
||||||
|
"ratio",
|
||||||
|
"received",
|
||||||
|
"sent",
|
||||||
|
"index",
|
||||||
|
"type",
|
||||||
|
] as const satisfies readonly (typeof columnsList)[number][];
|
||||||
|
|
||||||
export const { definition, componentLoader } = createWidgetDefinition("downloads", {
|
export const { definition, componentLoader } = createWidgetDefinition("downloads", {
|
||||||
icon: IconDownload,
|
icon: IconDownload,
|
||||||
@@ -38,19 +47,16 @@ export const { definition, componentLoader } = createWidgetDefinition("downloads
|
|||||||
return optionsBuilder.from(
|
return optionsBuilder.from(
|
||||||
(factory) => ({
|
(factory) => ({
|
||||||
columns: factory.multiSelect({
|
columns: factory.multiSelect({
|
||||||
defaultValue: ["integration", "name", "progress", "time", "actions"],
|
defaultValue: ["name", "progress", "downSpeed", "time", "state"],
|
||||||
options: columnsList.map((value) => ({
|
options: columnsList.map((value) => ({
|
||||||
value,
|
value,
|
||||||
label: (t) => t(`widget.downloads.items.${value}.columnTitle`),
|
label: (t) => t(`widget.downloads.items.${value}.columnTitle`),
|
||||||
})),
|
})),
|
||||||
searchable: true,
|
searchable: true,
|
||||||
}),
|
}),
|
||||||
enableRowSorting: factory.switch({
|
|
||||||
defaultValue: false,
|
|
||||||
}),
|
|
||||||
defaultSort: factory.select({
|
defaultSort: factory.select({
|
||||||
defaultValue: "type",
|
defaultValue: "progress",
|
||||||
options: columnsSort.map((value) => ({
|
options: sortColumns.map((value) => ({
|
||||||
value,
|
value,
|
||||||
label: (t) => t(`widget.downloads.items.${value}.columnTitle`),
|
label: (t) => t(`widget.downloads.items.${value}.columnTitle`),
|
||||||
})),
|
})),
|
||||||
@@ -68,7 +74,6 @@ export const { definition, componentLoader } = createWidgetDefinition("downloads
|
|||||||
defaultValue: true,
|
defaultValue: true,
|
||||||
}),
|
}),
|
||||||
activeTorrentThreshold: factory.number({
|
activeTorrentThreshold: factory.number({
|
||||||
//in KiB/s
|
|
||||||
validate: z.number().min(0),
|
validate: z.number().min(0),
|
||||||
defaultValue: 0,
|
defaultValue: 0,
|
||||||
step: 1,
|
step: 1,
|
||||||
@@ -88,14 +93,12 @@ export const { definition, componentLoader } = createWidgetDefinition("downloads
|
|||||||
validate: z.number().min(1),
|
validate: z.number().min(1),
|
||||||
withDescription: true,
|
withDescription: true,
|
||||||
}),
|
}),
|
||||||
|
columnOrder: factory.text({ defaultValue: "" }),
|
||||||
|
columnWidths: factory.text({ defaultValue: "" }),
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
defaultSort: {
|
columnOrder: { shouldHide: () => true },
|
||||||
shouldHide: (options) => !options.enableRowSorting,
|
columnWidths: { shouldHide: () => true },
|
||||||
},
|
|
||||||
descendingDefaultSort: {
|
|
||||||
shouldHide: (options) => !options.enableRowSorting,
|
|
||||||
},
|
|
||||||
showCompletedUsenet: {
|
showCompletedUsenet: {
|
||||||
shouldHide: (_, integrationKinds) =>
|
shouldHide: (_, integrationKinds) =>
|
||||||
!getIntegrationKindsByCategory("usenet").some((kinds) => integrationKinds.includes(kinds)),
|
!getIntegrationKindsByCategory("usenet").some((kinds) => integrationKinds.includes(kinds)),
|
||||||
|
|||||||
@@ -1,12 +1,52 @@
|
|||||||
/* Make the MantineReactTable transparent so the board card's opacity-controlled
|
/* Make the DataTable transparent so the board card's opacity-controlled
|
||||||
background shows through. MRT defaults to var(--mantine-color-body) which is opaque. */
|
background shows through. The mantine-datatable defaults to
|
||||||
.downloads-widget-table,
|
var(--mantine-color-body) which is opaque. */
|
||||||
.downloads-widget-table .mantine-Table-table,
|
.downloads-table,
|
||||||
.downloads-widget-table .mantine-Table-thead,
|
.downloads-table .mantine-datatable-table,
|
||||||
.downloads-widget-table .mantine-Table-tbody,
|
.downloads-table .mantine-datatable-table thead,
|
||||||
.downloads-widget-table .mantine-Table-tfoot,
|
.downloads-table .mantine-datatable-table tbody,
|
||||||
.downloads-widget-table .mantine-Table-tr,
|
.downloads-table .mantine-datatable-table tfoot,
|
||||||
.downloads-widget-table th,
|
.downloads-table th,
|
||||||
.downloads-widget-table td {
|
.downloads-table td {
|
||||||
background-color: transparent !important;
|
background-color: transparent !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.downloads-table .mantine-datatable-table tr {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.downloads-table .mantine-datatable-table tbody tr:hover {
|
||||||
|
background-color: color-mix(in srgb, var(--mantine-color-default-hover) 40%, transparent) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.downloads-table th {
|
||||||
|
white-space: nowrap;
|
||||||
|
background-color: color-mix(in srgb, var(--mantine-color-body) 60%, transparent) !important;
|
||||||
|
backdrop-filter: blur(8px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.downloads-table td {
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.downloads-table td .mantine-Text-root,
|
||||||
|
.downloads-table td .mantine-Group-root {
|
||||||
|
white-space: nowrap;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.downloads-table .mantine-datatable-header-cell-sortable-icon {
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 150ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
.downloads-table th:hover .mantine-datatable-header-cell-sortable-icon {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Row expansion styling */
|
||||||
|
.downloads-table .mantine-datatable-row-expansion-cell {
|
||||||
|
background-color: color-mix(in srgb, var(--mantine-color-body) 40%, transparent) !important;
|
||||||
|
}
|
||||||
@@ -29,6 +29,7 @@ import { MaskedOrNormalImage } from "@homarr/ui";
|
|||||||
import type { WidgetComponentProps } from "../definition";
|
import type { WidgetComponentProps } from "../definition";
|
||||||
import classes from "./component.module.scss";
|
import classes from "./component.module.scss";
|
||||||
import type { ReleasesRepository, ReleasesRepositoryResponse } from "./releases-repository";
|
import type { ReleasesRepository, ReleasesRepositoryResponse } from "./releases-repository";
|
||||||
|
import { getReleasesQueryStaleTimeMs } from "./query-options";
|
||||||
|
|
||||||
const formatRelativeDate = (value: string): string => {
|
const formatRelativeDate = (value: string): string => {
|
||||||
const isMonths = /\d+m/g.test(value);
|
const isMonths = /\d+m/g.test(value);
|
||||||
@@ -89,16 +90,19 @@ export default function ReleasesWidget({ options, itemId }: WidgetComponentProps
|
|||||||
|
|
||||||
const queryResults = clientApi.useQueries((trpc) =>
|
const queryResults = clientApi.useQueries((trpc) =>
|
||||||
batchedRepositories.flatMap(({ provider, repositories }) =>
|
batchedRepositories.flatMap(({ provider, repositories }) =>
|
||||||
trpc.widget.releases.getLatest({
|
trpc.widget.releases.getLatest(
|
||||||
itemId,
|
{
|
||||||
repositories: repositories.map((repository) => ({
|
itemId,
|
||||||
id: repository.id,
|
repositories: repositories.map((repository) => ({
|
||||||
provider,
|
id: repository.id,
|
||||||
identifier: repository.identifier,
|
provider,
|
||||||
versionFilter: repository.versionFilter,
|
identifier: repository.identifier,
|
||||||
providerUrl: repository.providerUrl,
|
versionFilter: repository.versionFilter,
|
||||||
})),
|
providerUrl: repository.providerUrl,
|
||||||
}),
|
})),
|
||||||
|
},
|
||||||
|
{ staleTime: getReleasesQueryStaleTimeMs },
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
import { describe, expect, test } from "vitest";
|
||||||
|
|
||||||
|
import { getReleasesQueryStaleTimeMs } from "./query-options";
|
||||||
|
|
||||||
|
describe("getReleasesQueryStaleTimeMs", () => {
|
||||||
|
test("keeps successful release batches fresh for four hours", () => {
|
||||||
|
const staleTime = getReleasesQueryStaleTimeMs({
|
||||||
|
state: { data: [{ success: true }, { success: true }] },
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(staleTime).toBe(4 * 60 * 60 * 1000);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("keeps a batch stale when a provider returned an error", () => {
|
||||||
|
const staleTime = getReleasesQueryStaleTimeMs({
|
||||||
|
state: { data: [{ success: true }, { success: false }] },
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(staleTime).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
test.each([undefined, [], [{ unexpected: true }]])("keeps missing or invalid data stale", (data) => {
|
||||||
|
expect(getReleasesQueryStaleTimeMs({ state: { data } })).toBe(0);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
export const releasesQuerySuccessfulStaleTimeMs = 4 * 60 * 60 * 1000;
|
||||||
|
|
||||||
|
interface QueryWithData {
|
||||||
|
state: {
|
||||||
|
data: unknown;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getReleasesQueryStaleTimeMs = ({ state }: QueryWithData) => {
|
||||||
|
if (!Array.isArray(state.data) || state.data.length === 0) return 0;
|
||||||
|
|
||||||
|
const allRepositoriesSucceeded = state.data.every(
|
||||||
|
(result) => typeof result === "object" && result !== null && "success" in result && result.success === true,
|
||||||
|
);
|
||||||
|
|
||||||
|
return allRepositoriesSucceeded ? releasesQuerySuccessfulStaleTimeMs : 0;
|
||||||
|
};
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
import "../widgets-common.css";
|
||||||
|
|
||||||
|
import { WeatherIcon } from "./icon";
|
||||||
|
|
||||||
|
interface AnimatedWeatherIconProps {
|
||||||
|
code: number;
|
||||||
|
size?: string | number;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const getAnimationClass = (code: number): string => {
|
||||||
|
if (code === 0) return "weather-anim-sun";
|
||||||
|
if ([1, 2, 3].includes(code)) return "weather-anim-cloud";
|
||||||
|
if ([45, 48].includes(code)) return "weather-anim-fog";
|
||||||
|
if ([51, 53, 55, 56, 57, 61, 63, 65, 66, 67, 80, 81, 82].includes(code)) return "weather-anim-rain";
|
||||||
|
if ([71, 73, 75, 77, 85, 86].includes(code)) return "weather-anim-snow";
|
||||||
|
if ([95, 96, 99].includes(code)) return "weather-anim-storm";
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
export const AnimatedWeatherIcon = ({ code, size = 26 }: AnimatedWeatherIconProps) => {
|
||||||
|
return (
|
||||||
|
<span className={`weather-anim-wrapper ${getAnimationClass(code)}`}>
|
||||||
|
<WeatherIcon code={code} size={size} />
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
};
|
||||||
@@ -12,7 +12,8 @@ import { useScopedI18n } from "@homarr/translation/client";
|
|||||||
|
|
||||||
import { WidgetEmptyState } from "../common/empty-state";
|
import { WidgetEmptyState } from "../common/empty-state";
|
||||||
import type { WidgetComponentProps } from "../definition";
|
import type { WidgetComponentProps } from "../definition";
|
||||||
import { WeatherDescription, WeatherIcon } from "./icon";
|
import { AnimatedWeatherIcon } from "./animated-icon";
|
||||||
|
import { WeatherDescription } from "./icon";
|
||||||
|
|
||||||
export default function WeatherWidget({ isEditMode, options }: WidgetComponentProps<"weather">) {
|
export default function WeatherWidget({ isEditMode, options }: WidgetComponentProps<"weather">) {
|
||||||
const input = {
|
const input = {
|
||||||
@@ -55,7 +56,7 @@ const DailyWeather = ({ options, weather }: WeatherProps) => {
|
|||||||
<HoverCard>
|
<HoverCard>
|
||||||
<HoverCard.Target>
|
<HoverCard.Target>
|
||||||
<Box>
|
<Box>
|
||||||
<WeatherIcon size={30} code={weather.current.weathercode} />
|
<AnimatedWeatherIcon size={30} code={weather.current.weathercode} />
|
||||||
</Box>
|
</Box>
|
||||||
</HoverCard.Target>
|
</HoverCard.Target>
|
||||||
<HoverCard.Dropdown>
|
<HoverCard.Dropdown>
|
||||||
@@ -146,7 +147,7 @@ const WeeklyForecast = ({ options, weather }: WeatherProps) => {
|
|||||||
<HoverCard>
|
<HoverCard>
|
||||||
<HoverCard.Target>
|
<HoverCard.Target>
|
||||||
<Box>
|
<Box>
|
||||||
<WeatherIcon size={16} code={weather.current.weathercode} />
|
<AnimatedWeatherIcon size={16} code={weather.current.weathercode} />
|
||||||
</Box>
|
</Box>
|
||||||
</HoverCard.Target>
|
</HoverCard.Target>
|
||||||
<HoverCard.Dropdown>
|
<HoverCard.Dropdown>
|
||||||
@@ -184,7 +185,7 @@ function Forecast({ weather, options }: WeatherProps) {
|
|||||||
align="center"
|
align="center"
|
||||||
>
|
>
|
||||||
<Text fz="xl">{dayjs(dayWeather.time).format("dd")}</Text>
|
<Text fz="xl">{dayjs(dayWeather.time).format("dd")}</Text>
|
||||||
<WeatherIcon size={16} code={dayWeather.weatherCode} />
|
<AnimatedWeatherIcon size={16} code={dayWeather.weatherCode} />
|
||||||
<Text fz={16}>
|
<Text fz={16}>
|
||||||
{getPreferredUnit(dayWeather.maxTemp, options.isFormatFahrenheit, options.disableTemperatureDecimals)}
|
{getPreferredUnit(dayWeather.maxTemp, options.isFormatFahrenheit, options.disableTemperatureDecimals)}
|
||||||
</Text>
|
</Text>
|
||||||
|
|||||||
@@ -25,3 +25,83 @@
|
|||||||
.text-flash {
|
.text-flash {
|
||||||
animation: glow 1s ease-in-out;
|
animation: glow 1s ease-in-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*Animated weather icons, used by clock and weather widgets*/
|
||||||
|
.weather-anim-wrapper {
|
||||||
|
display: inline-flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes weather-spin {
|
||||||
|
from {
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes weather-drift {
|
||||||
|
0%,
|
||||||
|
100% {
|
||||||
|
transform: translateX(-2px);
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
transform: translateX(2px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes weather-fall {
|
||||||
|
0% {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
opacity: 0.4;
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: translateY(2px);
|
||||||
|
opacity: 0.4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes weather-flicker {
|
||||||
|
0%,
|
||||||
|
90%,
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
92%,
|
||||||
|
96% {
|
||||||
|
opacity: 0.4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.weather-anim-sun {
|
||||||
|
animation: weather-spin 16s linear infinite;
|
||||||
|
transform-origin: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.weather-anim-cloud,
|
||||||
|
.weather-anim-fog {
|
||||||
|
animation: weather-drift 4s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.weather-anim-rain,
|
||||||
|
.weather-anim-snow {
|
||||||
|
animation: weather-fall 1.6s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.weather-anim-storm {
|
||||||
|
animation: weather-flicker 3s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-reduced-motion: reduce) {
|
||||||
|
.weather-anim-sun,
|
||||||
|
.weather-anim-cloud,
|
||||||
|
.weather-anim-fog,
|
||||||
|
.weather-anim-rain,
|
||||||
|
.weather-anim-snow,
|
||||||
|
.weather-anim-storm {
|
||||||
|
animation: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1 +1 @@
|
|||||||
[{"username":"carlchina","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/6697/medium/d22bbe7797bbeb30dbdc73a5648d329a_default.png"},{"username":"zielmann","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/7795/medium/ad22b8b8d5eb33e4154d53a454c862fd_default.png"},{"username":"Thalyn","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12494028/medium/5faf5acc945a874ed116c4567edaa09f_default.png"},{"username":"magnushj","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12503488/medium/68f32e33ea7b891960055c9f831f7344_default.png"},{"username":"almontegil","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12580457/medium/f4136cacbdfdb4c28ae7f85dc5f840db_default.png"},{"username":"andibing","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12664938/medium/b8be63e4dcb2e791ced1ffc9e3a049a5.jpg"},{"username":"gronare","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12680911/medium/c6eb14d1504156f34a158e507f73aa3d_default.png"},{"username":"SmartPhoneLover","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12701640/medium/ec95486662ec875cda080e778c3ff702.jpg"},{"username":"marcelotk_15","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12773227/medium/ecf6bea16ab0c873c131df2154ee9718_default.png"},{"username":"S3OD177","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13051544/medium/11dd990837f61f7e8f7d36b041a7fddb_default.png"},{"username":"marcg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13153301/medium/ebcf60fbf27deb148ec40a659566c6ff_default.png"},{"username":"BeersTeddy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13185230/medium/2f1f4e1effe74a23422b195cbefb2a95_default.png"},{"username":"jamesmcmahon0","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13245578/medium/586aa873b4abddbd9abc6f3de99ab70e.jpeg"},{"username":"b1nar10","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13286752/medium/aaa1f083e04c572f953fde4563171e4a.jpeg"},{"username":"vannCN","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13330448/medium/9b8a9ee3611e51e951e22d5fd4eb7d8d.jpg"},{"username":"binswm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13343482/medium/45dde0e6097b9b72705d2eba9dbbc276_default.png"},{"username":"SkewRam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13496556/medium/188f5c2deb7938eda51eb786cc4539ca.jpeg"},{"username":"raphcatarino","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13547726/medium/b003511e67df13a4b4b5689488fa8099.jpg"},{"username":"shillos5","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13600557/medium/b17650b2b84f829d54fa548c44c1ab27.jpeg"},{"username":"wolong98","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13641407/medium/f4634edc58c7857a357e5293543c15cf.jpg"},{"username":"spair0039","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14012333/medium/72430e96027c09c19141cac38eae4617.png"},{"username":"MajorMarcin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14072183/medium/0a197e64bb92b6ea94cecbb607512c45.jpg"},{"username":"KosmoMoustache","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14103535/medium/51c438cdd9f86e8811c75f4869de479c.png"},{"username":"Soochaehwa","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14118689/medium/496a1ce63111547bf455a1e0a7ac75f1_default.png"},{"username":"garryfield","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14187035/medium/520c964706676045f6eeec1b08edc880.jpg"},{"username":"droidenko","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14444264/medium/4aa3a8e824f72bc9e5ec0d8de307095e.jpeg"},{"username":"maathis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14489950/medium/6eeddf13a757ee35f78f1763f94d95e1.jpeg"},{"username":"bukvam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14546502/medium/a819dc40a13c57395a17dc46e847d3ce.jpg"},{"username":"gm.cinalli","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14670666/medium/2d466a0fdbda40764526be86c97c0ab4.jpeg"},{"username":"antoine2tt","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14722148/medium/f88d926900862dd59007ea4b3419cb9d.png"},{"username":"cretzen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14799754/medium/3ba5c1805ec20c000d5810c07985afe9.jpg"},{"username":"ktKongTong","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14817246/medium/97cfc3c028dbdaf85ebd1102da71e58c.jpeg"},{"username":"marinkaberg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14861042/medium/2d5c4e62613f03082f3e645fa92efd59.jpeg"},{"username":"djismgaming","avatarUrl":"https://crowLine truncated
|
[{"username":"carlchina","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/6697/medium/d22bbe7797bbeb30dbdc73a5648d329a_default.png"},{"username":"zielmann","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/7795/medium/ad22b8b8d5eb33e4154d53a454c862fd_default.png"},{"username":"Thalyn","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12494028/medium/5faf5acc945a874ed116c4567edaa09f_default.png"},{"username":"magnushj","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12503488/medium/68f32e33ea7b891960055c9f831f7344_default.png"},{"username":"almontegil","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12580457/medium/f4136cacbdfdb4c28ae7f85dc5f840db_default.png"},{"username":"andibing","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12664938/medium/b8be63e4dcb2e791ced1ffc9e3a049a5.jpg"},{"username":"gronare","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12680911/medium/c6eb14d1504156f34a158e507f73aa3d_default.png"},{"username":"SmartPhoneLover","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12701640/medium/ec95486662ec875cda080e778c3ff702.jpg"},{"username":"marcelotk_15","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12773227/medium/ecf6bea16ab0c873c131df2154ee9718_default.png"},{"username":"S3OD177","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13051544/medium/11dd990837f61f7e8f7d36b041a7fddb_default.png"},{"username":"marcg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13153301/medium/ebcf60fbf27deb148ec40a659566c6ff_default.png"},{"username":"BeersTeddy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13185230/medium/2f1f4e1effe74a23422b195cbefb2a95_default.png"},{"username":"jamesmcmahon0","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13245578/medium/586aa873b4abddbd9abc6f3de99ab70e.jpeg"},{"username":"b1nar10","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13286752/medium/aaa1f083e04c572f953fde4563171e4a.jpeg"},{"username":"vannCN","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13330448/medium/9b8a9ee3611e51e951e22d5fd4eb7d8d.jpg"},{"username":"binswm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13343482/medium/45dde0e6097b9b72705d2eba9dbbc276_default.png"},{"username":"SkewRam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13496556/medium/188f5c2deb7938eda51eb786cc4539ca.jpeg"},{"username":"raphcatarino","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13547726/medium/b003511e67df13a4b4b5689488fa8099.jpg"},{"username":"shillos5","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13600557/medium/b17650b2b84f829d54fa548c44c1ab27.jpeg"},{"username":"wolong98","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13641407/medium/f4634edc58c7857a357e5293543c15cf.jpg"},{"username":"spair0039","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14012333/medium/72430e96027c09c19141cac38eae4617.png"},{"username":"MajorMarcin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14072183/medium/0a197e64bb92b6ea94cecbb607512c45.jpg"},{"username":"KosmoMoustache","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14103535/medium/51c438cdd9f86e8811c75f4869de479c.png"},{"username":"Soochaehwa","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14118689/medium/496a1ce63111547bf455a1e0a7ac75f1_default.png"},{"username":"garryfield","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14187035/medium/520c964706676045f6eeec1b08edc880.jpg"},{"username":"droidenko","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14444264/medium/4aa3a8e824f72bc9e5ec0d8de307095e.jpeg"},{"username":"maathis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14489950/medium/6eeddf13a757ee35f78f1763f94d95e1.jpeg"},{"username":"bukvam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14546502/medium/a819dc40a13c57395a17dc46e847d3ce.jpg"},{"username":"gm.cinalli","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14670666/medium/2d466a0fdbda40764526be86c97c0ab4.jpeg"},{"username":"antoine2tt","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14722148/medium/f88d926900862dd59007ea4b3419cb9d.png"},{"username":"cretzen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14799754/medium/3ba5c1805ec20c000d5810c07985afe9.jpg"},{"username":"ktKongTong","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14817246/medium/97cfc3c028dbdaf85ebd1102da71e58c.jpeg"},{"username":"marinkaberg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14861042/medium/2d5c4e62613f03082f3e645fa92efd59.jpeg"},{"username":"djismgaming","avatarUrl":"https://crowLine truncated
|
||||||
Reference in new issue
Block a user